新建分支

  1. git branch testing # 新建一个本地分支 testing
  2. git checkout testing # 切换到 testing 分支
  3. git checkout -b testing # 新建一个本地分支 testing 分支并切换到该分支
  4. git checkout -b testing ee22afa9ad9f # 从当前分支之前的某一次提交对象处新建并转换到新建的 testing 分支
  5. git checkout -b testing origin/testing # 从远程仓库testing分支创建分支并自动切换到testing 分支,本地分支会自动跟踪远程分支

查看分支

  1. git branch # 当前所有本地分支
  2. git branch -v # 查看各个分支最后一个提交对象的信息
  3. git branch -vv # 查看本地分支与远程分支的跟踪情况
  4. git branch -r # 当前所有远程分支
  5. git branch --merged # 查看哪些分支已被并入当前分支
  6. git branch --no-merged # 查看尚未合并的分支
  7. git branch -a # 查看所有远程分支与本地分支

删除分支

  1. git branch -d testing
  2. git branch --merged | xagrs git branch -d #删除所有已合并到当前分支的分支

合并分支

  1. git checkout devel # 转换到devel 分支
  2. git merge testing # 合并testing分支到devel 分支
  3. git merge --squash testing # 合并时只会产生一个新的提交对象,不管被合并的分支上有多少次提交,这样会产生一个比较干净的提交历史

解决合并冲突

当两个分支上都有修改同一个文件的同一个地方的提交时,合并时git不知道该采用哪一个分支上的提交,git 就会停下来将两个提交内容都标示出来,让合并者决定怎么合并。这就是叫合并冲突。git 在冲突的对应地方加上’<<<<<<<’….’=======’….’>>>>>>>’ 来分别标示出两个提交的内容。

  1. git status
  2. ----------------------------------------------------
  3. On branch feature/update_embed
  4. Your branch is up to date with 'origin/feature/update_embed'.
  5. You have unmerged paths.
  6. (fix conflicts and run "git commit")
  7. (use "git merge --abort" to abort the merge)
  8. Changes to be committed:
  9. modified: app/Domain/Content/Formatter/Formatter.php
  10. Unmerged paths:
  11. (use "git add <file>..." to mark resolution)
  12. both modified: app/Http/Controllers/OrderController.php
  13. both modified: app/Http/Controllers/ProductController.php

这时需要我们手动修改冲突的文件,保留我们需要的修改,注意要去掉’<<<<<<<’….’=======’….’>>>>>>>’符号。

修改完成后需要告诉git解决了冲突,使用git add命令,然后使用git commit命令完成合并操作。

  1. git add app/Http/Controllers/OrderController.php app/Http/Controllers/ProductController.php # 暂存冲突的文件
  2. git commit -m # 编辑提交对象,合并的提交对象的信息中会自动添加冲突说明,可以修改。然后保存提交信息完成合并。

如果发生冲突时不想解决使用下面的命令取消合并操作:

  1. git merge --abort

分支的变基(衍合)rebase

注意:变基操作请只在本地仓库使用,不要对已经推送到远程仓库的分支使用。

使用场景:

  • 将多个历史提交对象合并成一个提交。让提交历史变得干净整洁。
  • 更新已过时的分支。使用git merge更新分支时会产生一个merge的提交对象。使用rebase则不会。
  1. git rebase -i HEAD~4 # 合并最近4次提交
  2. git rebase master # 将master分支的更新到当前分支
  3. git rebase --edit-todo
  4. git rebase --continue

推送分支

  1. git push origin serverfix

跟踪远程分支

  1. git checkout -b serverfix origin/serverfix # 基于远程分支创建一个并跟踪远程的本地分支
  2. git push --set-upstream origin feature/serverfix # 设置当前分支跟踪远程feature/serverfix 分支

删除远程分支

  1. git push origin :serverfix