• GIT学习


    1.初始化仓库

    git init

    如果遇到以下问题:

    *** Please tell me who you are.
    
    Run
    
      git config --global user.email "you@example.com"
      git config --global user.name "Your Name"
    
    to set your account's default identity.
    Omit --global to set the identity only in this repository.
    
    fatal: unable to auto-detect email address (got 'xxx@xxx.(none)')

    需要配置用户名和邮箱:

    git config user.name “username”

    git config user.email “email”

    2.提交代码

    git add .

    git commit -m “”

    3.查看状态

    git status

    4.查看修改

    git diff

    -change something
    +change

     5.查看提交历史

    git log

    commit acbcfcfa48c89deb725aae9e03a68a2f5abaa1d4
    Author: gcl <155@163.com>
    Date:   Tue Feb 7 14:30:11 2017 +0800
    
        change 2
    
    commit 99f733644454644d90b8ee39c6737dc283c78cec
    Author: gcl <155@163.com>
    Date:   Tue Feb 7 14:27:55 2017 +0800
    
        change readme.txt
    
    commit 58110376e350d36c8df095b17ff2ecb44906eae2
    Author: gcl <155@163.com>
    Date:   Tue Feb 7 14:25:17 2017 +0800
    
        add readme.txt

    简化版本信息:git log --pretty=oneline 

    acbcfcfa48c89deb725aae9e03a68a2f5abaa1d4 change 2
    99f733644454644d90b8ee39c6737dc283c78cec change readme.txt
    58110376e350d36c8df095b17ff2ecb44906eae2 add readme.txt

    6.回退版本

    HEAD指向当前版本,HEAD^是上一版本,HEAD^^是上上版本,HEAD~100是上100个版本

    回到上一版本:git reset --hard HEAD^  

    回到某一历史:git reset --hard commitid

    7.查看命令历史

    git reflog

    acbcfcf HEAD@{0}: reset: moving to acbcfcfa4
    99f7336 HEAD@{1}: reset: moving to HEAD^
    acbcfcf HEAD@{2}: commit: change 2
    99f7336 HEAD@{3}: commit: change readme.txt
    5811037 HEAD@{4}: commit (initial): add readme.txt

    8.工作区与暂存区

    respository文件夹:工作区

    .git:版本库,包含了stage(暂存区),分支master,指针HEAD

    git add是把文件修改放到了暂存区,git commit把暂存区的内容提交到了分支,没有提交到暂存区的修改是不会被提交到分支的

    提交的事件线:工作区->git add->暂存区->git commit->分支

    9.撤销修改

    (1)撤销add前在工作区的修改:git checkout -- readme.txt

    (2)撤销add后,commit前在暂存区的修改:git reset HEAD readme.txt

    reset可以回退版本,还可以撤销add到暂存区的内容,重新回到工作区,可以再次checkout -- 来撤销在工作区的修改

    (3)撤销commit之后,push之前:git reset

    10.删除文件

    git rm

    git commit

    撤销删除,找回文件:git checkout -- filename

    git checkout:使用版本库中的最新版本替换工作区的版本,即撤销git add/rm之前的修改

    11.github使用

    1)在http://git.oschina.net创建库:

      (1)ssh-keygen -t rsa -C "xxxxx@xxxxx.com"# Creates a new ssh key using the provided email

      # Generating public/private rsa key pair...

      (2)cat ~/.ssh/id_rsa.pub

      # ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC6eNtGpNGwstc.... 将public key添加

      (3)ssh -T git@github.com (github)

      ssh -T git@git.oschina.net (oschina)

      Welcome to Git@OSC, yourname! 

    2)为github上的开源仓库贡献代码:

      (1)fork:在GitHub上,可以任意Fork开源仓库

      (2)提交修改到自己帐号上的仓库:自己拥有Fork后的仓库的读写权限

      (3)pull request:可以推送pull request给官方仓库来贡献代码

    12.远程仓库

    (1)本地库origin与远程库learngit关联,origin为git的默认叫法

    git remote add origin git@github.com:XXX/learngit.git(XXX为你的github账户名)

    (2)将本地库中的所有内容推送到远程库中,加上-u将本地master分支和远程master分支关联起来,以后推送就可以直接使用git push简化命令

    git push -u origin master

    (3)以后推送使用以下命令

    git push origin master

     (4)把远程库克隆到本地,使用https速度慢,而且每次都要输入口令

    git clone ssh或https

    (5)push与pull

    push:本地 --> 远程,如果本地超前远程,需要push

    pull:本地 <-- 远程,如果本地落后远程,需要要pull 

    13.分支

    (1)创建分支:将当前分支中的所有文件拷贝到新分支

    git branch second

    切换到分支

     git checkout second

    创建+切换到分支:-b

    git checkout -b second

    (2)查看当前分支

    git branch

    (3)合并指定分支到当前分支

    git merge second

    撤销合并操作:

    git reset

    (4)删除分支

    git branch -d second

    git branch -D second:强行删除一个没有合并过的分支

    git push origin --delete second 删除远程分支

    (5)合并分支默认使用”fast forward”模式,合并后看不出做过合并,禁用”fast forward” 使用普通模式,合并后的历史可以看出曾经做过合并。禁用”fast forward”并且加上了commit描述:

    git merge --no-ff -m "merge with no-ff" second

    (6)分支管理策略

    (7)本地分支:master,dev,bug,feature(最好在开发新功能时为每一个新功能创建一个分支)

    远程分支:origin,dev

     14.解决冲突

    (1)查看冲突

    git status

    (2)查看分支合并图 git log --graph

    git log --graph --pretty=oneline --abbrev-commit

     (3)合并分支发生冲突后,解决冲突步骤:查看冲突->修改->提交->合并完成

     15.bug分支:将当前无法提交到现场先保存起来,使工作区回复clean状态,修复bug后,再将保存的东西解开

    (1)将工作现场先保存起来:git stash

    (2)查看保存现场记录:git stash list

    (3)恢复工作线程

    git stash apply :stash内容不删除,需要使用 git stash drop手动删除

    git stash pop:恢复的同时将stash的内容删除

    git stash apply stash@{0}:有多个stah时,指定恢复到某个stash

    16.多人协作

    (1)查看远程分支

    git remote

    查看远程分支详细信息

    git remote -v

    (2)推送分支:将本地某个分支中的所有提交推送到远程库

    git push origin master

    (3)从远程抓取新提交

    git pull

    注意:如果git pull时提示“no tracking information”,则需要指定本地master/dev分支与远程origin/dev分支的链接后,才能pull

    git branch --set-upstream dev origin/dev  已弃用,更新为:  git branch --set-upstream-to=origin/dev dev

    (4)多⼈人协作的⼯工作模式通常是这样:

    1. 首先,可以试图⽤git push origin branch-name推送⾃自⼰己的修改;
    2. 如果推送失败,则因为远程分⽀支⽐比你的本地更新,需要先⽤用git pull试图合并; 
    3. 如果合并有冲突,则解决冲突,并在本地提交; 
    4. 没有冲突或者解决掉冲突后,再⽤用git push origin branch-name推送就能成功! 

    17. 标签

    (1)添加标签:切换到指定分支后,git tag v1.0

    (2)查看所有标签:git log --pretty=oneline --abbrev-commit

    (3)补加标签:找到commitid后添加标签,git tag v0.9 commitid

    注意,标签不是按时间顺序列出,而是按字母排序的。

    (4)查看某一标签信息:git show v0.9

    (5)添加标签时添加说明,用-a指定标签名,-m指定说明文字:

    git tag -a v0.1 -m "version 0.1 released" 3628164
    (6)用私钥签名一个标签:
    git tag -s v0.2 -m "signed version 0.2 released" fec145a

    (7)删除标签

    git tag -d v1.0

    (8)将本地某一标签推送到远程:

    git push origin v1.0

    推送本地所有未推送到远程的标签:

    git push origin --tags

    (9)删除远程标签:需要先删除本地标签

    git tag -d v1.0

    git push origin :refs/tags/v1.0

     18.自定义git

    (1)配置用户名和email

    git config --global user.name "Your Name"

    git config --global user.email "email@example.com"

    (2)给git命令添加颜色

    git config --global color.ui true

    (3)忽略特殊文件:添加.gitignore

    强制添加被忽略的文件:git add -f App.class
    查看想添加的文件被.gitignore中的哪条规则忽略了:git check-ignore -v App.class
    (4)配置别名

    git config --global alias.st status

    git config --global alias.co checkout

    git config --global alias.ci commit

    git config --global alias.br branch

    git config --global alias.unstage 'reset HEAD'

    git config --global alias.last 'log -1' 

    git config --global alias.lg "log --color --graph --

     注意:--global是针对当前用户起作用的,如果不加,那只针对当前的仓库起作用

    (5)配置文件

    每个仓库的Git配置文件都放在.git/config文件中,查看配置文件:cat .git/config

    要删除别名,直接把对应的行删掉即可

    改错了,可以删掉文件重新通过命令配置

    19.自己搭建git服务器

    (1)安装git

    sudo apt-get install git

    (2)创建一个git用户,用来运行git服务

    sudo adduser git

    (3)创建证书登录

    收集所有需要登录的用户的公钥,就是他们自己的id_rsa.pub文件,把所有公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个

    (4)初始化Git仓库

    sudo chown -R git:git sample.git

    (5)禁用shell登录

    出于安全考虑,第二步创建的git用户不允许登录shell,这可以通过编辑/etc/passwd文件完成。找到类似下面的一行:

    git:x:1001:1001:,,,:/home/git:/bin/bash

    改为:

     git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell

    这样,git用户可以正常通过ssh使用git,但无法登录shell,因为我们为git用户指定的git-shell每次一登录就自动退出。

    (6)克隆远程仓库

    git clone git@server:/srv/sample.git

    (7)要方便管理公钥,用Gitosis

      要像SVN那样变态地控制权限,用Gitolite

    Git的官方网站:http://git-scm.com

    附Unix命令:

    (1)创建文件夹:mkdir

    (2)跳到指定路径:cd

    (3)查看当前完整路径:pwd

    (4)查看当前路径下的所有文件及文件夹:ls

    (5)cat:可以显示文件内容,但是不能编辑

    (6)touch:如果文件存在,使用touch指令可更改这个文件或目录的日期时间,包括存取时间和更改时间; 
    如果文件不存在,touch指令会在当前目录下新建一个空白文件

    (7)vi/vim:打开文件后可以编辑

    (8)echo:输出

    本文为阅读廖雪峰的官方网站中的git教程的学习笔记,仅为自己的一点学习记录,原文写的非常好,作者很厉害,有兴趣的朋友可以阅读原文:廖雪峰的官方网站的git教程

  • 相关阅读:
    inspector 只读属性
    使用MongoDB
    【Roslyn C#】Runtime环境Unity读取字符串代码
    Unity使用LoadImage 读取byte[]图片时,会出现白边问题
    团队中避免不可维护代码的措施
    Unity点到线段的最短距离
    判断点是否在多边形内部
    Unity 根据前后帧位置自动旋转
    停止Unity在运行时脚本修改重新编译的情况
    KI子线段树 / AKEE SegmentTree
  • 原文地址:https://www.cnblogs.com/guchunli/p/6203031.html
Copyright © 2020-2023  润新知