Git简记

  本文从Git的命令入手,根据不同的应用场景,对每个命令都会有简单的说明(若有变化,请以官方说明为主)。

  Git初始化:

      $ git init  

    本命令会初始化这个Git仓库,通过命令$ ls -a 可以看到多出了一个.git目录(文件夹,以下简称为目录,即以Unix说法为主)。这个.git目录中包含了这个Git仓库中相关Git的信息。

      $ git config --global user.name "User's name"

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

    本命令会配置Git仓库的User的基本信息,其信息存储在 HOME 目录下的.gitconfig配置文件中。

  Git文件提交:

      $ git add <fileName> <fileName1> <......>

    将文件fileName提交到暂存区,这时的工作区内容会被转移到暂存区,此时仍可以在工作区继续修改创建,再通过本命令将文件提交(转移)至暂存区。

      $ git commit -m "information of the commit"

    将暂存区中的文件提交到本地Git仓库,这时的文件可以说是真正意义上被存储下来,因为日后若有需要,通过这个记录可以对文件进行恢复。

  Git查看:

      $ git status

    随时可以通过本命令来查看Git工作区和暂存区的状态,例如可以看有哪些文件是新创建的,哪些文件是被修改过的。

      $ git diff <fileName> 

    查看文件之间的差异,例如不同文件之间增添了哪些内容,删除了哪些内容(本命令显示的内容同Unix下的diff命令显示内容格式相同)。

      $ git log 

    查看历史commit提交记录,其内容包括提交作者<邮箱>,提交时间,提交说明(commit -m)以及commitID(其标号唯一确定,便于找回)。

    显示模式为Unix下more命令显示格式(按q退出浏览,按space翻篇浏览,按Enter逐行浏览)。

    通过添加参数选项--pretty=oneline可以将内容简洁化,即浏览方式为单行浏览,从而使内容简洁,便于浏览。

      $ git reflog

    查看Git仓库中的历史命令。

  Git撤销修改:

      $ git reset --hard HEAD^ 

    将文件恢复至上一个已提交版本。

    若要恢复上上次提交版本,输入命令 $ git reset --hard HEAD^^,恢复至前一百次版本 $ git reset --hard HEAD~100。

      $ git reset --hard <commitID> 

    将文件恢复至commitID版本,本命令可以结合着 $ git log 和 $ git reflog 命令来使用,方便恢复版本更改。

      $ git checkout -- <fileName>

    丢弃工作区的文件修改,这时会有两种情况:

      ① 若此时暂存区中有相应文件,则从暂存区中将该文件恢复至工作区。

      ② 若此时暂存区中没有响应文件,则从本地仓库中按照最新提交的该文件内容进行恢复,并恢复至工作区。

    应用场景:想直接放弃对工作区文件的修改,重新进行修改。

      $ git reset HEAD <fileName>

    把已经暂存在暂存区的文件撤销暂存,重新放回到工作区。

    应用场景:不小心把不该提交的文件放到了暂存区,通过本命令撤销暂存。

    注:若不小心将不该提交的文件提交了(commit),可通过版本恢复,重新对文件进行修改。

      $ git rm <fileName> <fileName1> <......>

    在Git中删除掉一些文件,注意要在Git仓库中完成删除操作,在本命令之后需要进行一次commit提交。

  Git远程连接:

    为保证能够建立好远程连接,这里给出SSH传输协议连接方式,远程仓库为GitHub的示例说明。

    准备工作:

      若本机未曾建立过SSH传输,则需要创建SSH密钥:

        $ ssh-keygen -t rsa "email-account@example.com"

      通过此命令,便得到了SSH密钥,一个为私有密钥(需保密),一个为公开密钥(可公开),密钥文件路径:~/.ssh/

    建立连接:

      在GitHub中添加SSH公开密钥内容(若无法用打开方式打开密钥内容,试试 $ cat ~/.ssh/id_rsa.pub)。

        $ git remote add origin git@github.com:Author/gitname.git

      将本地Git仓库添加远程连接的GitHub仓库。

        $ git push -u origin master

      将master分支内容提交到远程GitHub仓库,此命令之后即可看到GitHub仓库内容同本地Git仓库内容相一致。

      此命令为第一次push时使用,在此命令之后,每次需要push时,命令 $ git push origin master 即可。

        $ git clone git@github.com:Author/gitname.git

      从指定的GitHub仓库中克隆文件/目录到本地Git仓库。

    注:

        $ git remote -v 

      查看当前Git仓库所关联的远程仓库。

        $ git remote rm origin

      删除与名为origin的远程仓库的连接。

        $ git pull

      从当前Git仓库所绑定的远程仓库中获取目录内容,由此来保证同远程仓库目录内容一致。

  Git分支:

      $ git branch 

    查看当前Git仓库中的分支状态(罗列出所有的Git分支,并在当前分支前用'*'来标识)。

      $ git branch dev

    创建一个分支,分支名为dev。

      $ git checkout dev

    从当前分支转换到dev分支。

      $ git checkout -b dev

    创建一个名为dev的分支,并转换到该分支。

      $ git merge dev

    在master分支上执行此命令时,Git会将dev分支上所做的修改同当前master分支上所做的修改进行合并(注意此时要dev已经commit,来保证文件在dev分支上被修改过)。

    此时可能会发生冲突,比如master分支上和dev分支上均对同一文件的同一位置进行了不同的修改,此时merge命令会报错,并且Git会要求解决掉冲突,重新修改文件后,才能正常提交。

    需要注意的是,本命令下,Git会执行Fast Forward合并,也就是说,Git会将两个分支的指针移动到一起实现merge,但这样很可能会丢掉dev分支上的工作进度。考虑到这种merge模式的弊端,通过命令 $ git merge --no-ff -m "information of the mrege with no-ff" dev 实现非Fast Forward模式合并。

    

      $ git branch -d dev

    删除dev分支。

    附:

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

    通过查看分支合并图的方式查看每次提交。

      $ git branch -D dev 

    强行删除一个未曾合并过的分支。

    

    Bug分支(这是分支常见的应用场景之一):

      考虑这样一种情况,当正位于dev分支上工作时,接到修复bug的任务,此时既要缓存dev分支工作进度,又要解决掉bug。

      方案:①缓存当前工作进度 --> ②转至修复bug提交分支 --> ③创建修复bug的分支并进行修复 --> ④回到修复bug提交分支并将修复版本合并提交 --> ⑤返回dev分支继续工作

      ① $ git stash 

        缓存当前工作进度,便于以后恢复工作进度,继续编辑。

      ② $ git checkout bugLine   // 转换到修复bug提交分支

      ③ $ git checkout -b issue  // 创建临时分支来修复bug

      ④ $ git checkout bugLine   // 转换到修复bug提交分支以准备提交修复版本

        $ git merge --no-ff -m "Finish Task." issue  // 通过非Fast Forward模式进行合并issue分支

        $ git branch -d issue    // 完成修复bug任务后,删除掉临时创建的issue分支即可

      ⑤ $ git checkout dev      // 返回dev分支

        $ git stash list        // 列出dev分支缓存列表

        方式一:$ git stash apply [stash@{No.}] 进行恢复,然后 $ git stash drop 将该缓存删除。

        方式二:$ git stash pop 恢复工作进度的同时,将缓存内容删除。

        

    远程分支提交:

        $ git checkout -b dev origin/dev

      为便于区分,建议创建远程分支时同远程分支结构相同。

        $ git push origin <branchName>

      向远程仓库提交自己所修改的分支。

      若提交失败,则因为远程分支比本地内容更新,需要用 $ git pull 试图合并。

      如果合并有冲突,则解决冲突,并在本地进行提交。

      没有冲突或者解决冲突后,再用 $ git push origin <branchName> 推送即可成功。

      若 $ git pull 提示"no tracking information",则说明本地分支和远程的分支没有建立连接,用命令 $ git branch --set-upstream <branchName> origin/<branchName>创建分支连接。

  Git标签:

      $ git tag <tagName> 

    创建一个新标签,这个标签默认被标记在最新一次的提交上(当前分支)。

      $ git tag 

    查看所有标签。这时所列出的标签不是按照提交时间进行排序的,而是单纯按照标签内容进行字母顺序排序。

      $ git tag v0.9 commitID

    为commitID的提交创建一个名为"v0.9"的标签。

      $ git show <tagName>

    查看标签所在的提交的信息。

      $ git tag -a v0.1 -m "verson 0.1 released." commit ID

    创建带有说明的标签,-a指定标签名,-m指定文字说明。

      $ git tag -d v0.1

    删除v0.1标签(而非删除该标签所代表的提交)。

      $ git push origin <tagName> 

    推送标签到远程。

      $ git push origin --tags

    一次性推送全部标签。

    注:

      若要删除远程标签,先在本地删除,再输入命令 $ git push origin :refs/tags/v0.1

  Git配置别名:

      $ git config --global alias.st status

    此命令后,输入 $ git st 就执行 $ git status 命令。

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

    此命令后,撤销暂存区修改,执行命令 $ git unstage <fileName> 即可。

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

    此命令后,输入 $ git last 可显示最后一次提交信息。

      $ git config --global alias.ls "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

    丧心病狂... 此命令后,输入 $ git ls 可...可以试试看。

    注:

      上述的命令都被存储到 HOME 下的.gitconfig配置文件中的 [alias] 块中。以及上述的Author信息都被存储在.gitconfig文件中,故可通过修改该配置文件来自定义自己的Git配置。

声明:

  本文章参考了廖雪峰Git教程

  其原文链接:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

  

原文地址:https://www.cnblogs.com/stevenshen123/p/8541378.html