Git学习笔记&总结

原文廖老师的Git教程:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

一、Git的安装

 

1.在Windows上安装Git

从https://git-scm.com/downloads下载,然后按默认选项安装即可。

2.安装完后的简单设置

安装完成后,还需要最后一步设置,在命令⾏输⼊:

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

$ git config --global user.email "[email protected]"

二、创建版本库

版本库(repository)又名仓库,可以简单理解成一个目录,这个目录面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。

         首先在一个合适的位置创建一个空目录:$ mkdir GitRepository

         进入该目录后,执行命令:$ git init

三、版本的回退与切换

1、添加文件到Git仓库

    第一步添加:git add readme.txt

    第二步提交:git commit –m “wrote a readme file”

 注:首先需要在git仓库目录下新建一个readme.txt文件;

 执行第一步后,没有消息显示说明添加成功,使用add可以一次提交多个文件;

  -m后面的参数是对本次提交的说明;

        $ git status可以命令查看当前Git仓库状态,有哪些文件需要add和commit;

        $ git diff 可以查看修改过的内容;

2、版本回退

应用场景:文件丢失的情况下,从最近的一次commit中恢复文件。

$ git log 以倒序的方式查看提交日志;

$ git reset --hard HEAD^ 回退到当前版本的上一个版本;

$ git reset --hard “commitID”回退到具体哪次提交,commitID代表具体commit的版本号;

$ git reflog 查看每一次命令,第一列显示有commit版本号

3、工作区和版本库

工作区:我们看到的目录,刚刚我们创建的GitRepository文件夹;

版本库:我们执行git init后在生成的隐藏的.git文件夹;

暂存区:.git目录下有一个stage或index目录即为暂存区;

      

4、管理修改

Git跟踪并管理的是修改,而非文件。未add到暂存区的修改是不能够提交到版本库的;

$ git diff HEAD -- readme.txt  查看工作区和版本库里最新版本的区别

5、撤销修改

应用场景:把修改错误的文件add到了暂存区,但还未commit到版本库,想撤回本次add。

(1)$ git reset HEAD readme.txt

把暂存区的修改撤销掉,重新放回到工作区。

(2)$ git checkout -- readme.txt

丢弃工作区的修改,让该文件回退到最近一次的git add或git commit时的状态这里有两种情况:

一种是readme.txt修改后还没有add到暂存区,命令执行后回到和版本库一样的状态。

二种是readme.txt已经添加到暂存区,之后又做了修改,命令执行后,文件恢复为添加到暂存区的状态。

6、删除文件

(1)应用场景:确定要从版本库中删除某个文件

    第一步:$ git rm readme.txt

    第二步:$ git commit –m “delete readme.txt”

(2)应用场景:工作区误删某文件,可以从版本库中恢复

    $ git checkout – readme.txt

四、远程仓库

1、添加公钥到github

         首先注册GitHub账号并登录,然后将自己的公钥添加到GitHub上。公钥即电脑用户名目录下的.ssh目录下id_rsa.pub文件里的内容。如果没有该目录,需要我们手动生成:

         $ ssh-keygen -t rsa -C "[email protected]"

然后在github里点击account setting   --> SSH Keys à Add SSH Key  --> title随意写,将密钥粘贴进去。

2、添加远程仓库

第1步:在GitHub上创建一个远程库:右上角“+”  -->  “New repositories ”;

第2步:将本地库与远程库关联:

         $ git remote add origin [email protected]:你的用户名/learngit.git

    注:远程库的名字就是origin,这是Git默认的叫法,也可以改成别的。

第3步:将本地内容推送到远程库:

    $ git push -u origin master

    注:用 git push命令,实际上是把当前分支master推送到远程。由于远程库是空的,我们第一次推送master分支时,加上了 -u参数,Git不但会把本地的master分支内容推送的远程master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。

3、从远程库克隆

执行命令:$ git clone [email protected]:你的用户名/gitskills.git

注:Git支持多种协议,还可以用 https://github.com/huozf/gitskills.git这样的地址。默认的git://使用ssh,但也可以使用https等其他协议。使用https除了速度慢以外,还有个最大的麻烦是每次推送都必须输入口令,但是在某些只开放http端口的公司内部就无法使用ssh协议而只能用https。

五、分支管理

1、创建与合并分支


Git都把它们串成一条时间线,这条时间线就是一个分支。截⽌止到目前,只有一条时间线,在Git里,这个分支叫主分支,即 master分支。HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是当前分支。一开始的时候,master分支是一条线,Git用master指向最新的提交,再用HEAD指向master,就能确定当前分支,以及当前分支的提交点:

     


 (1)  创建并切换分支:$ git checkout –b dev
当我们创建新的分支dev时,Git新建了一个指针叫dev,令dev指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上:

       

注:“-b”参数表示创建并切换分支,相当于命令(2)、(3)之和。

(2) 创建分支:$ git branch dev

(3) 切换分支:$ git checkout dev

(4) 查看当前分支: $ git branch

    注:该命令会列出所有分支,前边标有 * 的表示当前所在分支。

(5) 合并指定分支到当前分支:$ git merge master

(6) 删除分支: $ git branch –d dev

2、解决冲突


当我们新建一个分支后,master分支新建分支各自都分别有新的提交,这种情况下,Git⽆无法执行“快速合并”,只能试图把各自的修改合并起来,但这种合并就可能会有冲突

     

这时候需要我们手动解决冲突,然后才能合并。合并后,查看分支合并图:

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

3、分支管理策略

通常,合并分支时,如果可能,Git会用“Fast forward”模式,但这种模式下,删除分支后,会丢掉分支信息。如果要强制禁用“Fast forward”模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。

例如,新建并切换一个分支dev,修改文件并提交。然后切换回master分支,将dev分支合并到master分支:

$ git merge --no-ff -m "merge with no-ff" dev

注:“—no-ff”表示禁用“Fast forword”模式。

此时,分支合并图变成:

       

4、Bug分支
支上合并就可以了。所以,团队合作的分支看起来就像这样:

应用场景:当前工作还未完成且不能够提交,但上级要求立即修复项目中出现的bug,需要我们停下手头的工作。

(1)$ git stash 将“工作现场”储存起来;

(2)$ git stash list 列出所有已储存的“工作现场”;

(3)$ git stash pop 恢复“工作现场”,且将stash里的最上一层内容删除,等同于(4)、(5)命令之和;

(4)$ git stash apply 恢复“工作现场”,但stash里的内容并未删除;

(5)$ git stash drop 删除最上一层“工作现场”;

(6) $ git stash apply stash@{0} 恢复指定的stash内容;

5、多人协作

(1) $ git remote 查看远程库信息;

(2) $ git remote –v 显示远程库更详细信息;

(3) $ git push origin branch_name 推送到远程库的指定分支

(4) $ git pull 从远程库拉取更新

(5) git branch --set-upstream dev origin/<branch> 将本地库的分支与远程库指定分支关联起来

注:多人协作的工作模式

1. 首先,可以试图用 git push origin branch-name推送⾃自己的修改;

2. 如果推送失败,则因为远程分支比你的本地更新,需要先用 git pull试图合并;

3. 如果合并有冲突,则解决冲突,并在本地提交;

4. 没有冲突或者解决掉冲突后,再用$ git push origin branch-name推送就能成功!

5. 如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name。

六、标签管理

1、创建标签

(1) $ git tag v1.0 默认给最近以此提交创建标签

(2) $ git tag v0.9 66756 给指定的提交创建标签,66756为提交id

(3) $ git tag -a v0.1 -m "version 0.1 released" 3628164   给指定的提交创建标签,-a 指定标签名,-m指定标签信息

(4) $ git tag 列出所有标签

(5) $ git show v0.1 查看指定标签的具体信息

2、操作标签

(1) $ git tag -d v0.1  删除指定标签

(2) $ git push origin v1.0  推送某个标签到远程

(3) $ git push origin --tags 一次性推送全部尚未推送到远程的本地标签

(4) 如果标签已经推送到远程,要删除远程标签:

    ① 先从本地库删除:$ git tag -d v0.9

    ② 再从远程库删除:$ git push origin :refs/tags/v0.9

猜你喜欢

转载自www.cnblogs.com/huozf/p/10474009.html