当squash pull到一个提交时发生冲突



因为我想保持每个拉取请求一个提交

  1. 从分支feature签出并做一些工作。
  2. 工作完成。Istash我的代码,pull新的代码从origin/master得到最新的版本。
  3. git stash apply带回工作并解决冲突。
  4. git commit --amend -m "New message".
  5. git push origin feature.

然而,Github拉请求合并featuremain仍然显示相同的冲突当本地代码被存储到主代码。在这种情况下,我应该做些什么来启动并运行所有内容,同时只提交一次?

提前感谢。

我认为这是因为你覆盖了合并提交。

例子假设你有一个main分支和一个feature分支。

# main branch
* 6ce0740 - This commit only exist on main
* b82d267 - Another Commit
* e168387 - Initial Commit
# feature branch
* 1a6ac14 - This commit only exist on feature
* b82d267 - Another Commit
* e168387 - Initial Commit

当你在feature上运行git merge main之后,我们将有这个提交历史。

# feature branch
* ae70e9a - Merge branch 'main' into feature
* 6ce0740 - This commit only exist on main
* 1a6ac14 - This commit only exist on feature
* b82d267 - Another Commit
* e168387 - Initial Commit
在这一点上,合并featuremain只需要一个简单的快进提交。

但是,你说你在push之前把所有的提交压缩成一个。这可能会导致冲突,因为git现在必须比较这两个分支,而不仅仅是移动HEAD指针。

结论

如果你想保持提交历史干净,最好的选择是使用GitHub或GitLab的"合并和压缩";特性,当你决定合并到main时,它将把所有提交压缩成一个。

但是,如果坚持如果您希望在push之前将所有提交压缩为一个提交,请考虑使用rebase进行pull。但是,这不是最佳实践。
git pull origin main --rebase
# squash commit by git rebase -i or something
git push --force-with-lease