Git学习之旅 - Branching and Merging(分支和合并)篇

前言

其实git里面的很多命令参数都是重复的,虽然功能不同,但大致意思可以举一反三,所以文章只讲解常用的的命令。

branch

罗列,创建或删除分支
参考https://git-scm.com/docs/git-branch

  • [--delete | -d]
    删除分支
    git branch <分支名>

  • [--move | -m]
    移动/重命名分支和相应的reflog。

  • [--remotes | -r]
    列出或删除(如果与-d一起使用)远程分支跟踪信息。

    注意,这里并不会删掉远程的分支,这里删除的只是远程分支跟踪信息,比如在远程创建了一个新的分支,先在本地切换到该分支,通过git branch -a列出本地和远程分支,发现并没有创建的分支,执行git fetch可以同步远程仓库的分支信息等,执行后,新建的分支还是在远程分支的跟踪信息列表中(红色部分的分支),当checkout到本地后,就会在本地分支的跟踪信息列表中,执行git branch -d -r <分支名>只是从远程分支跟踪信息里删除该分支。同理,git branch -d <分支名>删除本地分支。

  • [--add | -a]
    列出远程跟踪分支和本地分支。

  • [--verbose | --v | -vv]
    更加详细列出分支信息,可以自己试一试,看看有什么不同。

  • [--quiet | -q]
    在创建或删除分支时更安静,禁止出现非错误消息。

  • [--contains []]
    仅列出包含指定提交的分支(如果未指定,则为HEAD)

  • git branch []

  • git branch (-m | -M) []

  • git branch (-c | -C) []

  • git branch (-d | -D) [-r] …​

  • git branch --edit-description []
    分支的创建,删除,重命名

checkout

切换分支或恢复工作树文件
这个命令,平时使用也比较简单的功能,更多用法,参考 https://git-scm.com/docs/git-checkout

merge

  1. git merge --abort
    执行merge进行合并时,突然想放弃这次合并,可以使用,git merge --abort
  2. git merge --continue
    当解决合并冲突后,你想要继续下一步来commit合并后的文件,可以执行这个命令。其它用法请参考 https://git-scm.com/docs/git-merge

log

  • --follow
    用于单个文件的提交信息的(包括该文件被重命名前的信息)展示

    git log --follow lib/main.dart
    

    这里注意后面的文件路径要正确。

  • [--no-decorate] , [--decorate[=short|full|auto|no]]
    打印出所有提交的引用名称,自己执行一下命令,看一下打印日志就知道了。

  • --source
    输出每个提交有哪些引用能够访问到,其实就是哪些分支合并了这些代码,可以访问到。


  • 打印特定访问内的日志信息,默认HEAD
    例如:git log origin..HEAD
    指定从当前提交(即HEAD)可到达的所有提交,但不包含origin。

  • Commit Limiting
    请参考上面的连接,这里面的大多命令都是限制日志的输出,比如输出多少条日志,输出什么时候的日志等等。

  • [--patch | -p]
    展示分支之间的不同
    例如:

    比较本地的master分支和origin/master分支的差别
    git log -p master  ..origin/master 
    

git log -p master ..origin/master

stash

储藏区,将未提交的文件(不包括被忽略的文件和不在工作树里的文件),暂时储藏起来,以便我们进行其它操作。

  • git stash: 备份当前的工作区的内容,从最近的一次提交中读取相关内容,让工作区保证和上次提交的内容一致。同时,将当前的工作区内容保存到Git栈中。

  • git stash pop: 从Git栈中读取最近一次保存的内容,恢复工作区的相关内容。由于可能存在多 个Stash的内容,所以用栈来管理,pop会从最近的一个stash中读取内容并恢复。

  • git stash list: 显示Git栈内的所有备份,可以利用这个列表来决定从那个地方恢复。

  • git stash clear: 清空Git栈。此时使用gitg等图形化工具会发现,原来stash的哪些节点都消失了。

  • git stash list []
    列出您当前储藏区拥有的存储条目,(例如,stash@{0}是最新条目,stash@{1}是前一个)。

  • git stash show []
    显示特定存储条目记录信息

  • git stash ( pop | apply ) [--index] [-q|--quiet] []
    从存储列表中删除单个存储条目并将其应用于当前工作树状态之上,即执行git stash push的反向操作。工作目录必须与索引匹配。

如果存在冲突,将导致移除失败;在这种情况下,它不会从隐藏列表中删除。您需要手动解决冲突并随后手动调用git stash drop

  • git stash branch []
    创建新新分支,并应用储藏区的[]条目到新分支
  • drop [-q|--quiet] []
    清理储藏区单个记录
  • git stash create []
    配合git stash store使用,创建一个储藏区记录,并用git stash store存储信息到这个记录里。

tag

创建(git tag ),列出(git tag -l),删除(git tag -d …​)或验证(git tag -v)使用GPG签名的标记对象

  • 创建tag
    参考:Git 基础 - 打标签

    含附注的标签:创建一个含附注类型的标签非常简单,用 -a (译注:取 annotated 的首字母)指定标签名字即可:

    $ git tag -a v1.4 -m 'my version 1.4'
    $ git tag v0.1 v1.3 v1.4
    

    而 -m 选项则指定了对应的标签说明,Git 会将此说明一同保存在标签对象中。如果没有给出该选项,Git 会启动文本编辑软件供你输入标签说明。

    可以使用 git show 命令查看相应标签的版本信息,并连同显示打标签时的提交对象。

签署标签:如果你有自己的私钥,还可以用 GPG 来签署标签,只需要把之前的 -a 改为 -s (译注: 取 signed 的首字母)即可:

轻量级标签:轻量级标签实际上就是一个保存着对应提交对象的校验和信息的文件。要创建这样的标签,一个 -a,-s或 -m 选项都不用,直接给出标签名字即可:

$ git tag v1.4-lw
$ git tag v0.1 v1.3 v1.4 v1.4-lw v1.5

验证标签:

可以使用 git tag -v [tag-name] (译注:取 verify 的首字母)的方式验证已经签署的标签。此命令会调用 GPG 来验证签名,所以你需要有签署者的公钥,存放在 keyring 中,才能验证:

后期加注标签:
你甚至可以在后期对早先的某次提交加注标签。比如在下面展示的提交历史中:

$ git log --pretty=oneline

我们忘了在提交 “updated rakefile” 后为此项目打上版本号 v1.2,没关系,现在也能做。只要在打标签的时候跟上对应提交对象的校验和(或前几位字符)即可:

$ git tag -a v1.2 9fceb02

分享标签

默认情况下,git push 并不会把标签传送到远端服务器上,只有通过显式命令才能分享标签到远端仓库。其命令格式如同推送分支,运行 git push origin [tagname] 即可:

如果要一次推送所有本地新增的标签上去,可以使用 --tags 选项:

$ git push origin --tags

worktree

作用就是在同一个仓库下,新建工作树,是工作树直接的操作互不影响。具体用法,
参考:https://git-scm.com/docs/git-worktree

你可能感兴趣的:(Git学习之旅 - Branching and Merging(分支和合并)篇)