为什么说时exciting是因为等了好久,就想看分支。
其实我觉得分支就应该放在靠前一点讲的,不知道分支的话其他一切都听不到的哇。
branch
-
git branch
显示本地所有分支,带星号的为当前分支 -
git branch -r
显示远端 -
git branch <branch>
创建新分支 -
git branch -d <branch>
安全删除分支,必须在合并到主干之后才可以删除 -
git branch -D <branch>
强行删除分支 -
git branch -m <branch>
更改当前分支的名字为... -
git branch -a
列出所有branch,包括远端
分支的实质是创建一个新的指向,指向创建时的节点,没有移动任何东西。
-
git push <remote-name> <branch>
把本地的分支推到远端
删除远端分支
首先要删除本地分支,上面有讲怎么删,然后执行
git push <remote> --delete <branch>
或者
git push <remote> :<branch>
checkout
checkout的作用是改变head的指向而已。
-
git checkout -b <branch>
从当前的head创建新分支并切过去 -
git checkout -b <new-branch> <existing-branch>
从指定的分支创建分支并切换 -
git checkout <branchname>
切换HEAD至某个分支
切换至远端分支
- 方法一:fetch后切换分支
git fetch --all
git checkout <branchname>
- 方法二:本地创建一个新的分支并强制更新至线上分支
git checkout -b <new-branch>
git reset --hard <remote>/<remote-branch>
detached head
head是git对当前快照的引用。当你checkout到某个分支的时候,git没有异样,但是当checkout到某个旧版本的时候,git就会处于detached head的状态。
当你处于detached head状态的时候,最好只是为了看看老代码,也可以说处于一条匿名分支里面去,这里所有的提交不会提交到任何分支。假如这个时候又想继续开发,那就要迁一条branch出来,这样子就不会处于detached head状态了。可以这么操作:
git branch temp <当前版本号>
git add .
git commit
git checkout <正常工作分支>
git merge temp
git branch -d temp
这样就相当于创建一条temp分支,提交代码, 然后合并到我现在的工作分支,可以避免你在历史记录中修改代码之后checkout回当前分支最新而丢失代码。
git merge
所谓的merge,都是把目标分支合并到当前分支。
执行merge操作的时候会把文件以及历史集合之后commit到当前分支。
冲突
假设:
- 文件冲突
你新建了分支,修改了文件a并提交,然后切回到主分支,同样修改文件a的同个位置并提交,这个时候就会冲突。这个时候你还是处于merge的状态,无法删除新的那条分支。可以使用git merge --abort
来退出合并流程。
如何处理冲突:
- 打开冲突的文件
- 修改成你想要的样子
- add and commit
- git检测到已经没有冲突的文件,自动退出merge状态
- 删除分支(可选)
- 路径冲突
意味着某个文件分支里有而当前分支没有,或者相反。这个时候使用add或rm来修改stage,然后commit即可。