ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

git学习7-分支管理-解决冲突

2021-04-23 16:02:28  阅读:168  来源: 互联网

标签:git study 21CARYC34 master 冲突 branch pyc 分支


git学习7-分支管理-解决冲突

人生不如意事常八九,合并分支往往也不是一帆风顺的。

写在开始本节学习之前

在开始本节学习之前,笔者需要清理本地操作,以便按廖老师的课程继续学习。在清理过程中发现:

  1. Git不允许删除当前分支(比如feature1),需切换当前分支至master,然后才允许删除feature1分支;
  2. 切换分支后,Git会自动提示我们当前master分支比远程的master分支要超前1个提交。如Your branch is ahead of 'origin/master' by 1 commit.
21CARYC34 /e/pyc_study (feature1)
□□ git branch
* feature1
  master
21CARYC34 /e/pyc_study (feature1)
□□ git branch -d feature1
error: Cannot delete branch 'feature1' checked out at 'E:/pyc_study'
21CARYC34 /e/pyc_study (feature1)
□□ git switch master
Switched to branch 'master'
Your branch is ahead of 'origin/master' by 1 commit.
  (use "git push" to publish your local commits)
21CARYC34 /e/pyc_study (master)
□□ git branch -d feature1
Deleted branch feature1 (was 915ed39).
21CARYC34 /e/pyc_study (master)
□□ git push origin master
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 8 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 406 bytes | 203.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
To bitbucket.org:carysunqd/pyc_study.git
   2d69ef5..915ed39  master -> master
21CARYC34 /e/pyc_study (master)
□□

从代码可以看得出,在下用上了cmder的bash来操作Git。实践出真知。

  1. 感觉cmder bash与Git bash,也没啥差别,也可能目前没有发现。
  2. 使用cmder的cmd操作Git当然也可以。但碍于cmd的vim是windows的,而非cmder的,当使用vim <file>打开当前目录下文件时,需要绝对路径,比较麻烦。当然可以通过windows里PATH环境变量的改变来解决,但那样又会导致Windows里gvim的打开问题,不折腾得好。
  3. 总体感觉cmder bash与Git bash更配套。

制造冲突(Conflict)

好了,现在转入正题,准备新的feature1分支,继续我们的新分支开发:

21CARYC34 /e/pyc_study (master)
□□ git status
On branch master
Your branch is up to date with 'origin/master'.

nothing to commit, working tree clean
21CARYC34 /e/pyc_study (master)
□□ git branch
* master
21CARYC34 /e/pyc_study (master)
□□ git switch -c feature1
Switched to a new branch 'feature1'
21CARYC34 /e/pyc_study (feature1)
□□ git branch
* feature1
  master
21CARYC34 /e/pyc_study (feature1)
□□ vim README.md

修改README.md最后一行,改为:

Creating a new branch is quick AND simple.

feature1分支上提交:

21CARYC34 /e/pyc_study (feature1)
□□ git add README.md
21CARYC34 /e/pyc_study (feature1)
□□ git status
On branch feature1
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   README.md

21CARYC34 /e/pyc_study (feature1)
□□ git commit -m "AND simple"
[feature1 53a3d1f] AND simple
 1 file changed, 6 insertions(+), 1 deletion(-)
21CARYC34 /e/pyc_study (feature1)
□□

切换到master分支:

21CARYC34 /e/pyc_study (feature1)
□□ git switch master
Switched to branch 'master'
Your branch is up to date with 'origin/master'.
21CARYC34 /e/pyc_study (master)
□□ git status
On branch master
Your branch is up to date with 'origin/master'.

nothing to commit, working tree clean
21CARYC34 /e/pyc_study (master)
□□  vim README.md

master分支上把README.md文件的最后一行改为:

Creating a new branch is quick & simple.

提交:

21CARYC34 /e/pyc_study (master)
□□ git status
On branch master
Your branch is up to date with 'origin/master'.

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   README.md

no changes added to commit (use "git add" and/or "git commit -a")
21CARYC34 /e/pyc_study (master)
□□ git add README.md
21CARYC34 /e/pyc_study (master)
□□ git commit -m "& simple"
[master d71bde7] & simple
 1 file changed, 3 insertions(+), 1 deletion(-)
21CARYC34 /e/pyc_study (master)
□□

现在,master分支和feature1分支各自都分别有新的提交,变成了这样:

git-br-feature1

git-br-feature1

合并(Merge),发生冲突(Conflict)

这种情况下,Git无法执行“快速合并”,只能试图把各自的修改合并起来,但这种合并就可能会有冲突,我们试试看:

21CARYC34 /e/pyc_study (master)
□□ git merge feature1
Auto-merging README.md
CONFLICT (content): Merge conflict in README.md
Automatic merge failed; fix conflicts and then commit the result.
21CARYC34 /e/pyc_study (master|MERGING)
□□

果然冲突了!Git告诉我们,README.md文件存在冲突,必须手动解决冲突后再提交。git status也可以告诉我们冲突的文件:

21CARYC34 /e/pyc_study (master|MERGING)
□□ git status
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
  (use "git push" to publish your local commits)

You have unmerged paths.
  (fix conflicts and run "git commit")
  (use "git merge --abort" to abort the merge)

Unmerged paths:
  (use "git add <file>..." to mark resolution)
        both modified:   README.md

no changes added to commit (use "git add" and/or "git commit -a")
21CARYC34 /e/pyc_study (master|MERGING)
□□

解决冲突:手工编辑冲突文件并提交

我们可以直接查看README.md的内容:

  1 # README #
  2 本文件由Bitbucket创建Repository时创建,首次由PyCharm进行编辑。
  3 通过PyCharm
  4 - 提交(Ctrl+K)
  5 - 推送(Ctrl+Shift+K)  与搜狗输入法快捷键冲突。
  6
  7 此处由Bitbucket进行编辑,需PyCharm更新才可以观察到更改。
  8 - 更新(Ctrl+T)
  9
 10 ## 此处由carysLaptop小黑修改。
 11
 12 This README would normally document whatever steps are necessary to get your application up and running.
 13
 14 ## 0423 HaierLaptop modified
 15 Creating a new branch is quick.
 16
 17 <<<<<<< HEAD
 18 ## master
 19 Creating a new branch is quick & simple.
 20 =======
 21 ## git branch 'feature1'
 22 Creating a new branch is quick AND simple.
 23
 24
 25
 26 >>>>>>> feature1
 27
 28 ### What is this repository for? ###

Git用<<<<<<<=======>>>>>>>标记出不同分支的内容,我们修改如下后保存:

Creating a new branch is quick and simple.

再提交:

21CARYC34 /e/pyc_study (master|MERGING)
□□ vim README.md
21CARYC34 /e/pyc_study (master|MERGING)
□□ git add README.md
21CARYC34 /e/pyc_study (master|MERGING)
□□ git status
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
  (use "git push" to publish your local commits)

All conflicts fixed but you are still merging.
  (use "git commit" to conclude merge)

Changes to be committed:
        modified:   README.md

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        .README.md.swp

21CARYC34 /e/pyc_study (master|MERGING)
□□ git commit -m "conflict fixed"
[master bdffc59] conflict fixed
21CARYC34 /e/pyc_study (master)
□□ git status
On branch master
Your branch is ahead of 'origin/master' by 3 commits.
  (use "git push" to publish your local commits)

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        .README.md.swp

nothing added to commit but untracked files present (use "git add" to track)
21CARYC34 /e/pyc_study (master)
□□ rm .README.md.swp
21CARYC34 /e/pyc_study (master)
□□ git status
On branch master
Your branch is ahead of 'origin/master' by 3 commits.
  (use "git push" to publish your local commits)

nothing to commit, working tree clean
21CARYC34 /e/pyc_study (master)
□□

查看分支

现在,master分支和feature1分支变成了下图所示:

git-br-conflict-merged

git-br-conflict-merged

用带参数的git log也可以看到分支的合并情况:

21CARYC34 /e/pyc_study (master)
□□ git log --graph --pretty=oneline --abbrev-commit
*   bdffc59 (HEAD -> master) conflict fixed
|\
| * 53a3d1f (feature1) AND simple
* | d71bde7 & simple
|/
* 915ed39 (origin/master, origin/HEAD) branch dev modified
* 2d69ef5 modify main.py from little black
* 40e5382 from carysLaptop little black
* 1aa2f87 README.md 已在 Bitbucket 中,在线编辑过。
* a2252ec modify readme.md
* 5cd5ad8 from haierLaptop PyCharm Ver01
* 2d5f4c7 Initial commit
21CARYC34 /e/pyc_study (master)
□□ git log --graph --pretty=oneline
*   bdffc59a810cf74cc9e364b306c0ada677560bf4 (HEAD -> master) conflict fixed
|\
| * 53a3d1fab392c02318a31e708290381e77b7ff73 AND simple
* | d71bde74723082e9448543532b1d3a0f42a16e5b & simple
|/
* 915ed39bfbced0fda0a9d521a54874e544d563f3 (origin/master, origin/HEAD) branch dev modified
* 2d69ef50aec19fd3172ac24a3f943d39b9f7509b modify main.py from little black
* 40e53821936a0406a38f4aeba1fb80e0d1ca7c45 from carysLaptop little black
* 1aa2f87574ec03c9f4d2f20521d1c9a1344f0bea README.md 已在 Bitbucket 中,在线编辑过。
* a2252ecec2970f8c8ecd386814a25a3bfd3884ae modify readme.md
* 5cd5ad8f696e11287698a7dd57a12492c69d5319 from haierLaptop PyCharm Ver01
* 2d5f4c7f3c4bc44c5ff791f88788c5f51f0336d7 Initial commit
21CARYC34 /e/pyc_study (master)
□□ git branch
  feature1
* master
21CARYC34 /e/pyc_study (master)
□□ git branch -d feature1
Deleted branch feature1 (was 53a3d1f).
21CARYC34 /e/pyc_study (master)
□□

小结

当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。

解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。

git log --graph命令可以看到分支合并图。

标签:git,study,21CARYC34,master,冲突,branch,pyc,分支
来源: https://www.cnblogs.com/caryqd/p/14694271.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有