• 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@example.com"

    二、创建版本库

    版本库(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 "huozhifa@qq.com"

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

    2、添加远程仓库

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

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

             $ git remote add origin git@github.com:你的用户名/learngit.git

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

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

        $ git push -u origin master

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

    3、从远程库克隆

    执行命令:$ git clone git@github.com:你的用户名/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

  • 相关阅读:
    [CodeForces]Codeforces Round #429 (Div. 2) ABC(待补)
    About Me
    2018-06-14
    Codeforces Codeforces Round #484 (Div. 2) E. Billiard
    Codeforces Codeforces Round #484 (Div. 2) D. Shark
    Codeforces Educational Codeforces Round 44 (Rated for Div. 2) F. Isomorphic Strings
    Codeforces Educational Codeforces Round 44 (Rated for Div. 2) E. Pencils and Boxes
    Codeforces Avito Code Challenge 2018 D. Bookshelves
    Codeforces Round #485 (Div. 2) D. Fair
    Codeforces Round #485 (Div. 2) F. AND Graph
  • 原文地址:https://www.cnblogs.com/huozf/p/10474009.html
Copyright © 2020-2023  润新知