新建分支
git branch testing # 新建一个本地分支 testing
git checkout testing # 切换到 testing 分支
git checkout -b testing # 新建一个本地分支 testing 分支并切换到该分支
git checkout -b testing ee22afa9ad9f # 从当前分支之前的某一次提交对象处新建并转换到新建的 testing 分支
git checkout -b testing origin/testing # 从远程仓库testing分支创建分支并自动切换到testing 分支,本地分支会自动跟踪远程分支
查看分支
git branch # 当前所有本地分支
git branch -v # 查看各个分支最后一个提交对象的信息
git branch -vv # 查看本地分支与远程分支的跟踪情况
git branch -r # 当前所有远程分支
git branch --merged # 查看哪些分支已被并入当前分支
git branch --no-merged # 查看尚未合并的分支
git branch -a # 查看所有远程分支与本地分支
删除分支
git branch -d testing
git branch --merged | xagrs git branch -d #删除所有已合并到当前分支的分支
合并分支
git checkout devel # 转换到devel 分支
git merge testing # 合并testing分支到devel 分支
git merge --squash testing # 合并时只会产生一个新的提交对象,不管被合并的分支上有多少次提交,这样会产生一个比较干净的提交历史
解决合并冲突
当两个分支上都有修改同一个文件的同一个地方的提交时,合并时git
不知道该采用哪一个分支上的提交,git
就会停下来将两个提交内容都标示出来,让合并者决定怎么合并。这就是叫合并冲突。git
在冲突的对应地方加上’<<<<<<<’….’=======’….’>>>>>>>’ 来分别标示出两个提交的内容。
git status
----------------------------------------------------
On branch feature/update_embed
Your branch is up to date with 'origin/feature/update_embed'.
You have unmerged paths.
(fix conflicts and run "git commit")
(use "git merge --abort" to abort the merge)
Changes to be committed:
modified: app/Domain/Content/Formatter/Formatter.php
Unmerged paths:
(use "git add <file>..." to mark resolution)
both modified: app/Http/Controllers/OrderController.php
both modified: app/Http/Controllers/ProductController.php
这时需要我们手动修改冲突的文件,保留我们需要的修改,注意要去掉’<<<<<<<’….’=======’….’>>>>>>>’符号。
修改完成后需要告诉git
解决了冲突,使用git add
命令,然后使用git commit
命令完成合并操作。
git add app/Http/Controllers/OrderController.php app/Http/Controllers/ProductController.php # 暂存冲突的文件
git commit -m # 编辑提交对象,合并的提交对象的信息中会自动添加冲突说明,可以修改。然后保存提交信息完成合并。
如果发生冲突时不想解决使用下面的命令取消合并操作:
git merge --abort
分支的变基(衍合)rebase
注意:变基操作请只在本地仓库使用,不要对已经推送到远程仓库的分支使用。
使用场景:
- 将多个历史提交对象合并成一个提交。让提交历史变得干净整洁。
- 更新已过时的分支。使用
git merge
更新分支时会产生一个merge的提交对象。使用rebase则不会。
git rebase -i HEAD~4 # 合并最近4次提交
git rebase master # 将master分支的更新到当前分支
git rebase --edit-todo
git rebase --continue
推送分支
git push origin serverfix
跟踪远程分支
git checkout -b serverfix origin/serverfix # 基于远程分支创建一个并跟踪远程的本地分支
git push --set-upstream origin feature/serverfix # 设置当前分支跟踪远程feature/serverfix 分支
删除远程分支
git push origin :serverfix