git branch

查看项目分支(本地+远程)

git branch -a

查看各个分支最后一个提交对象的信息

git branch -v

--merged 与 --no-merged 这两个有用的选项可以过滤这个列表中已经合并或尚未合并到当前分支的分支

查看哪些分支已经合并到当前分支

git branch --merged

查看所有包含未合并工作的分支

git branch --no-merged

查看尚未合并到 master 分支的有哪些?

$ git checkout testing
$ git branch --no-merged master
  topicA
  featureB

删除本地分支

因为它包含了还未合并的工作,尝试使用 git branch -d 命令删除它时会失败:

$ git branch -d testing
error: The branch 'testing' is not fully merged.
If you are sure you want to delete it, run 'git branch -D testing'.

如果真的想要删除分支并丢掉那些工作,如同帮助信息里所指出的,可以使用 -D 选项强制删除它。

删除远程分支

git push origin --delete <branch_name>

git push origin :<branch_name>

重建分支

git checkout testing
g branch --set-upstream-to origin/testing

git fetch origin testing:testing

恢复被删除的分支

Git 会自行负责分支的管理,所以当我们删除一个分支时,Git 只是删除了指向相关提交的指针,但该提交对象依然会留在版本库中。

因此,如果我们知道删除分支时的散列值,就可以将某个删除的分支恢复过来。在已知提交的散列值的情况下恢复某个分支:

git branch <branch_name> <hash_val>

git checkout -b <branch_name> <hash_val>

如果我们不知道想要恢复的分支的散列值,可以用 git reflog 命令将它找出来。如:

git reflog

git rg   //需要配置 alias rg

reflog命令:

显示整个本地仓储的 commit,包括所有 branch 的 commit,甚至包括已经撤销的 commit。

只要 HEAD 发生了变化, 就会在 reflog 里面看得到。

这时恢复分支 a_branch 分支如下:

git branch <branch_name> HEAD@{4}

使用 远程分支 替换 本地分支

  1. 删除本地分支 git branch -d local_branch
  2. 获取最新的远程分支 git fetch origin remote_branch
  3. 基于远程分支重建本地分支 git checkout -b local_branch origin/remote_branch