JHHK

欢迎来到我的个人网站
行者常至 为者常成

场景

目录

合并冲突

img

有一个共有的开发分支dev
有一个自己的业务分支lxy_develop

平时我们自己的业务在自己的业务分支进行开发,如果有需要可以随时将dev的分支合并到lxy_develop
这样做的好处是:
1、实时保证自己的代码具有最新的功能,比如同事添加的好用的工具类
2、可以随时解决可能得冲突,而不至于等到最后集中到一块解决,容易产生错误

在最后将lxy_develop合并到dev之前,做一次dev合并到lxy_develop的操作,目的是解决最后可能得冲突
然后再将lxy_develop合并到dev,此时合并就会非常顺利没有了任何冲突

这里有一个问题需要思考:
lxy_develop:修改了xxx.file的 666 行代码
dev:也修改了xxx.file的 666 行代码
dev合并到lxy_develop(节点1)的时候使用lxy_develop的代码解决了冲突,当lxy_develop再次合并回dev(节点2)时是否还会有冲突?
答案是不会,因为冲突已经被解决了。合并后节点1是节点2前面的历史节点。

回滚场景

我在远程仓库提交了节点A,同时拉取到本地后,在本地提交了节点B,这时我回滚了节点A,这种情况该如何处理?

一、存在的问题

1、我提交节点A之后仓库状态

* commit 44a45db9b9a45c7ec85518b5555464157358c19d (HEAD -> main, origin/main, origin/HEAD)
| Author: lxy <lxy@lxy.com>
| Date:   Sat Jan 6 11:04:03 2024 +0800
| 
|     提交了节点A
| 
* commit 4eb8c42962e6b820172f649b1968609e98703f66 
| Author: lxy <lxy@lxy.com>
| Date:   Thu Jan 4 22:14:42 2024 +0800
| 
|     update file
| 
* commit 9b33cdfc8d2d86abb6575135e03ffb2eea9ae7cc
| Author: 同事
| Date:   Thu Jan 4 17:24:24 2024 +0800
| 
|     update file
| 
* commit a031188698bf4379756700c53a192328bd2a46a2
  Author: 同事
  Date:   Thu Jan 4 15:22:55 2024 +0800
  
      initial program

2、同事提交节点B后,他的仓库状态

* commit 076c69a9770a4c9162495379405027fb99fdc448 (HEAD -> main)
| Author: 同事
| Date:   Sat Jan 6 11:06:13 2024 +0800
| 
|     提交了节点B
| 
* commit 44a45db9b9a45c7ec85518b5555464157358c19d (origin/main, origin/HEAD)
| Author: lxy <lxy@lxy.com>
| Date:   Sat Jan 6 11:04:03 2024 +0800
| 
|     提交了节点A
| 
* commit 4eb8c42962e6b820172f649b1968609e98703f66 
| Author: lxy <lxy@lxy.com>
| Date:   Thu Jan 4 22:14:42 2024 +0800
| 
|     update file
| 
* commit 9b33cdfc8d2d86abb6575135e03ffb2eea9ae7cc
| Author: 同事
| Date:   Thu Jan 4 17:24:24 2024 +0800
| 
|     update file
| 
* commit a031188698bf4379756700c53a192328bd2a46a2
  Author: 同事
  Date:   Thu Jan 4 15:22:55 2024 +0800
  
      initial program

3、我回滚了节点A,并强制push到了远端

* commit 4eb8c42962e6b820172f649b1968609e98703f66 (HEAD -> main, origin/main, origin/HEAD)
| Author: lxy <lxy@lxy.com>
| Date:   Thu Jan 4 22:14:42 2024 +0800
| 
|     update file
| 
* commit 9b33cdfc8d2d86abb6575135e03ffb2eea9ae7cc
| Author: 同事
| Date:   Thu Jan 4 17:24:24 2024 +0800
| 
|     update file
| 
* commit a031188698bf4379756700c53a192328bd2a46a2
  Author: 同事
  Date:   Thu Jan 4 15:22:55 2024 +0800
  
      initial program

4、同事拉取了远端代码

* commit 076c69a9770a4c9162495379405027fb99fdc448 (HEAD -> main)
| Author: 同事
| Date:   Sat Jan 6 11:06:13 2024 +0800
| 
|     提交了节点B
| 
* commit 44a45db9b9a45c7ec85518b5555464157358c19d
| Author: lxy <lxy@lxy.com>
| Date:   Sat Jan 6 11:04:03 2024 +0800
| 
|     提交了节点A
| 
* commit 4eb8c42962e6b820172f649b1968609e98703f66 (origin/main, origin/HEAD)
| Author: lxy <lxy@lxy.com>
| Date:   Thu Jan 4 22:14:42 2024 +0800
| 
|     update file
| 
* commit 9b33cdfc8d2d86abb6575135e03ffb2eea9ae7cc
| Author: 同事
| Date:   Thu Jan 4 17:24:24 2024 +0800
| 
|     update file
| 
* commit a031188698bf4379756700c53a192328bd2a46a2
  Author: 同事
  Date:   Thu Jan 4 15:22:55 2024 +0800
  
      initial program

这个时候看下同事的仓库状态

11:41:38 › git status 
On branch main
Your branch is ahead of 'origin/main' by 2 commits.
  (use "git push" to publish your local commits)

nothing to commit, working tree clean

同事 at XXdeMacBook-Pro.local in [~/XXFile/ResourceInWeiXin/helloMP]  on git:main ✔︎  076c69a "提交了节点B"
11:41:43 › 

这个时候同事如果执行 git push 那么回滚的代码就又会被推送到远程仓库

二、如何解决

1、回滚解决

通过回滚的方式解决,修改了历史记录。同时需要跟所有的同事沟通,避免上述情况的产生。这种方式不做首选。

2、撤销解决

撤销解决就是产生一个新的提交记录,将之前提交的代码删除掉,不会修改历史记录。

git revert 4eb8c42962e6b820172f649b1968609e98703f66

但也存在其它问题,比如节点A提交时修改了文件A,之后的某一次提交也修改了文件A,这时候撤销节点A的提交可能会产生冲突。
需要先解决冲突,需要跟同事协商的一定也要先跟同事沟通。
冲突解决之后执行下面的命令

git add <conflicted_file>
git commit -m "Revert changes introduced by commit E"

总之,冲突的发生主要是因为 Git 无法确定如何合并两个不同的更改。手动解决冲突后,你可以继续提交撤销更改的新提交。


行者常至,为者常成!





R
Valine - A simple comment system based on Leancloud.