Git命令——分支
Git中分支操作的相关命令:
- $ git branch <new-branch> # 创建新分支
- $ git push <remote_name> <local_branch>:<remote_branch> # 将新建分支push到远端
- $ git checkout <branbch_name> # 切换到指定分支
- $ git checkout -b <branbch_name> # 创建并切换到新分支
- $ git merge <branch_name> # 将指定分支合并到当前分支
- $ git branch -d <branch_name> # 删除指定分支
- $ git checkout -b [branch] [remote_name]/[branch] # 设置跟踪分支
- $ git branch -vv // 查看本地分支跟踪的远程分支
- $ git branch [-u]/[--set-upstream-to] [remote_name]/[branch] # 修改正在跟踪的上游分支
- $ git push [remote_name] --delete [branch_name] # 删除指定远程分支
1. 分支创建
Git 创建分支时只是为你创建了一个可以移动的新的指针。 比如,创建一个 testing 分支, 你需要使用 git branch 命令:
$ git branch testing
这会在当前所在的提交对象上创建一个指针:
如果需要将新建的分支push到远端仓库可以使用如下命令:
$ git push origin testing:testing
会在远端服务器创建一个名为testing的新分支,执行git branch -a命令会看到如下一行新增信息:remotes/origin/testing
2. 分支切换
要切换到一个已存在的分支,你需要使用 git checkout 命令。例如:
$ git checkout testing
这样 HEAD 就指向 testing 分支了。
如果你想要在创建一个分支的同时切换到该分支,可以执行带有 -b 参数的 git checkout 命令。例如:
$ git checkout -b branch_name
它是下面两条命令的简写:
$ git branch branch_name
$ git checkout branch_name
3. 分支合并
通过 git merge 命令可以实现分支合并的操作,例如:
在这种情况下,你的开发历史从一个更早的地方开始分叉开来(diverged)。 因为,master 分支所在提交并不是 iss53 分支所在提交的直接祖先,Git 不得不做一些额外的工作。 出现这种情况的时候,Git 会使用两个分支的末端所指的快照(C4 和 C5)以及这两个分支的工作祖先(C2),做一个简单的三方合并。
和之前将分支指针向前推进所不同的是,Git 将此次三方合并的结果做了一个新的快照并且自动创建一个新的提交指向它。 这个被称作一次合并提交,它的特别之处在于他有不止一个父提交。
3. 跟踪分支
从一个远程跟踪分支检出一个本地分支会自动创建所谓的 “跟踪分支”(它跟踪的分支叫做 “上游分支”)。 跟踪分支是与远程分支有直接关系的本地分支。 如果在一个跟踪分支上输入 git pull,Git 能自动地识别去哪个服务器上抓取、合并到哪个分支。
查看本地分支跟踪的远程分支可以使用以下命令: git branch -vv
然而,如果你愿意的话可以设置其他的跟踪分支,或是一个在其他远程仓库上的跟踪分支,又或者不跟踪 master 分支。 最简单的实例就是像之前看到的那样,运行 git checkout -b [branch] [remotename]/[branch]。 这是一个十分常用的操作所以 Git 提供了 --track 快捷方式:
如果想要将本地分支与远程分支设置为不同名字,你可以轻松地使用上一个命令增加一个不同名字的本地分支:
设置已有的本地分支跟踪一个刚刚拉取下来的远程分支,或者想要修改正在跟踪的上游分支,你可以在任意时间使用 -u 或 --set-upstream-to 选项运行 git branch 来显式地设置。
4. 删除远程分支
假设你已经通过远程分支做完所有的工作了 - 也就是说你和你的协作者已经完成了一个特性并且将其合并到了远程仓库的 master 分支(或任何其他稳定代码分支)。 可以运行带有 选项的 git push 命令来删除一个远程分支。 如果想要从服务器上删除 serverfix 分支,运行下面的命令: