我在 dev
有自己的 master
分店,还有另一个 dev2
分店由另一个人拥有,仍在 开发。
我需要在 dev2
上使用更改,因此我在 git merge dev2
分支上使用 dev
。
第二天,在 dev2
上开发的那个人写了一些新代码,并使用“git rebase
-liked”cmd 将他的提交压缩成一个新的,然后 push -f
到 { {1}} ,所以我再次使用 origin
来获取最新的更改,但是,发生了冲突。
我什至还没有对我的 git merge dev2
进行任何更改,但这只是冲突。自己改的话很容易想象,肯定会有更多的冲突。
是否有一些最佳做法可以避免在这种情况下发生冲突?
答案 0 :(得分:1)
答案 1 :(得分:1)
git rebase 和 git merge 都用于从一个分支中获取并合并到当前分支,但它们采用不同的工作方式。以下工作场景说明了差异。
如图:你在一个特性分支开发新特性,同时在master分支有新的提交。
为了将 master 上的新提交合并到您的功能分支,您有两个选择:mrege 或 rebase
执行以下命令:
git checkout feature
git merge master
或者执行更简单:
git merge master feature
然后git会自动生成一个新的提交(merge commit)
此时在功能上看起来像这样:
本质是变基。
rebase 是找到共同的祖先。
执行以下命令:
git checkout feature
git rebase master
看起来像这样:
如果合并过程中出现冲突,请按照以下步骤解决
修改冲突部分 添加 git rebase --continue (如果第三步无效,可以执行git rebase --skip) git add后不要习惯性地执行git commit命令
变基变基的黄金法则
<块引用>切勿在公共分支上使用它
现在我们看到在公共分支上使用 rebase 有什么问题吗? 如果您将 master 变基到您的功能分支:
Rebase 将所有 master 的提交移动到您的功能顶部。问题是:其他人还在原来的master上开发。因为你用rebase移动了master,git会认为你的master分支的历史和别人的不一样,会发生冲突。
所以在执行 git rebase 之前问问自己,
其他人会看这个分支吗? if YES 不要使用这个破坏性的 rebase 命令来修改提交历史 如果不行,你可以随心所欲地使用 rebase
如果你想要一个没有合并提交的干净、线性的历史树,那么你应该选择 git rebase。 如果你想保留一个完整的历史,又想避免重写提交历史的风险,你应该选择使用 git merge
答案 2 :(得分:0)
1.不要允许任何body直接合并到main/master,这根本不是一个好主意,先做个pr,然后再讨论,然后才能合并到master/main。