基本操作

查看分支

使用 git branch 查看分支,-a 参数查看所有分支,包括远程的分支:

  1. $ git branch
  2. * master
  3. $ git branch -a
  4. * master
  5. remotes/origin/HEAD -> origin/master
  6. remotes/origin/master

创建分支

使用 git branch <分支名> 创建分支:

  1. $ git branch dev
  2. $ git branch
  3. dev
  4. * master

删除分支

使用 git branch -d <分支名> 删除分支:

  1. $ git branch -d dev
  2. Deleted branch dev (was 9a995da).
  3. $ git branch
  4. * master

重命名分支

使用 git branch move <旧分支名> <新分支名> 重命名分支,它与 linux 中的 mv 命令类似:

  1. $ git branch -m dev dev_1
  2. $ git branch
  3. dev_1
  4. * master

切换分支

使用 git checkout <分支名> 切换到指定分支:

  1. $ git checkout dev_1
  2. Switched to branch 'dev_1'
  3. $ git branch
  4. * dev_1
  5. master

创建并切换分支

也可以在创建分支的同时切换到刚创建的分支,使用 git checkout -b <分支名>

  1. $ git checkout -b dev_2
  2. Switched to a new branch 'dev_2'
  3. $ git branch
  4. dev_1
  5. * dev_2
  6. master

实操:合并分支

接下来演示如何在 dev 分支上给 index.js 增加内容并合并到 master 分支。
准备一个测试文件,在 master 分支上有 index.js 它的内容如下:

  1. function f1() {
  2. }

创建并切换到 dev 分支:

  1. $ git checkout -b dev
  2. Switched to a new branch 'dev'

dev 分支给 index.js 增加一些内容:

  1. function f1() {
  2. // 这是 dev 分支增加的内容
  3. }

dev 分支提交 index.js 的修改:

  1. $ git commit index.js -m '在index.js增加一行内容'
  2. [dev f0bf942] index.js增加一行内容
  3. 1 file changed, 1 insertion(+), 1 deletion(-)

切换回 master 分支:

  1. $ git checkout master
  2. Switched to branch 'master'
  3. Your branch is up to date with 'origin/master'.

将刚刚在 dev 分支修改的内容合并到 master 分支:

git merge --no-ff -m "msg" <branch_name> 合并分支时禁用 Fast forward 模式
如果使用 fast-forward 方式进行分支合并,只是简单改变了分支指针,而不会产生新的 commit 记录。
为了保证合并数据的完整性,我们也可以在合并时禁用 fast-forward 方式,使用 --no-ff 选项。 这样,在 merge 时就会生成一个新的 commit,从日志上就可以看到分支合并记录了。

  1. $ git merge --no-ff -m 'merge dev' dev
  2. Updating 56e572c..f0bf942
  3. Fast-forward
  4. index.js | 2 +-
  5. 1 file changed, 1 insertion(+), 1 deletion(-)

合并成功,push 到远程:

  1. $ git push
  2. Counting objects: 3, done.
  3. Delta compression using up to 4 threads.
  4. Compressing objects: 100% (3/3), done.
  5. Writing objects: 100% (3/3), 345 bytes | 345.00 KiB/s, done.
  6. Total 3 (delta 1), reused 0 (delta 0)
  7. remote: Powered by GITEE.COM [GNK-6.2]
  8. To https://gitee.com/Cai_Programmer/temporary.git
  9. 56e572c..f0bf942 master -> master

实操:合并冲突

接下来演示两个分支 dev_1dev_2 同时修改了 index.js 导致合并的时候出现冲突是如何解决的。
准备一个测试文件,在 master 分支上有 index.js 它的内容如下:

  1. function f1() {
  2. }

master 分支的基础上切换并新建 dev_1 分支,增加一行内容,随后提交:

  1. $ git checkout -b dev_1
  2. Switched to a new branch 'dev_1'
  3. $ vim index.js
  4. $cat index.js
  5. function f1() {
  6. // 在 dev_1 分支增加一行
  7. }
  8. $ git commit index.js -a '增加一行'
  9. [dev_1 fed7707] add line
  10. 1 file changed, 1 insertion(+)

切换回 master 分支:

  1. $ git checkout master
  2. Switched to branch 'master'
  3. Your branch is up to date with 'origin/master'.

master 分支的基础上切换并新建 dev_2 分支,增加一行内容,随后提交:

  1. $ git checkout -b dev_2
  2. Switched to a new branch 'dev_2'
  3. $ vim index.js
  4. $cat index.js
  5. function f1() {
  6. // 在 dev_2 分支增加一行
  7. }
  8. $ git commit index.js -a '增加一行'
  9. [dev_1 fed7707] add line
  10. 1 file changed, 1 insertion(+)

接下来切换到 master 分支,将 dev_1dev_2 都合并到 master 分支:

  1. $ git checkout master
  2. Switched to branch 'master'
  3. Your branch is up to date with 'origin/master'.
  4. $ git merge dev_1
  5. Updating 95c1803..fed7707
  6. Fast-forward
  7. index.js | 1 +
  8. 1 file changed, 1 insertion(+)
  9. $ git merge dev_2
  10. Auto-merging index.js
  11. CONFLICT (content): Merge conflict in index.js
  12. Automatic merge failed; fix conflicts and then commit the result.
  13. $ cat index.js
  14. function f1() {
  15. <<<<<<< HEAD
  16. // 在 dev_1 分支增加一行
  17. =======
  18. // 在 dev_2 分支增加一行
  19. >>>>>>> dev_2
  20. }

可以看出合并的时候出现冲突了,git 将冲突显示在 index.js 文件内了,这时应该根据实际情况修改合并后的文件,随后用 git add .git commit -a 提交合并:

  1. $ vim index.js
  2. $ cat index.js
  3. function f1() {
  4. // 在 dev_1 分支增加一行
  5. // 在 dev_2 分支增加一行
  6. }
  7. $ git status
  8. On branch master
  9. Your branch is ahead of 'origin/master' by 1 commit.
  10. (use "git push" to publish your local commits)
  11. You have unmerged paths.
  12. (fix conflicts and run "git commit")
  13. (use "git merge --abort" to abort the merge)
  14. Unmerged paths:
  15. (use "git add <file>..." to mark resolution)
  16. both modified: index.js
  17. $ git add .
  18. $ git commit -a -m '合并 dev_1 dev_2'

实操:将本地分支提交到远程

  1. $ git push --set-upstream origin 分支名

实操:删除远程分支

  1. $ git push origin --delete 分支名