目录
合并冲突
有一个共有的开发分支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 无法确定如何合并两个不同的更改。手动解决冲突后,你可以继续提交撤销更改的新提交。
行者常至,为者常成!