当壁球拉到一次提交时发生冲突

时间:2021-07-28 10:57:24

标签: git

因为我想保持每个拉取请求一个提交,事情是这样的:

  1. 从分支 feature 结帐并做一些工作。
  2. 工作已完成。我stash我的代码,pull来自origin/master的新代码以获得最新版本。
  3. git stash apply 恢复工作并解决冲突。
  4. git commit --amend -m "New message"
  5. git push origin feature

然而,将 feature 合并到 main 的 Github 拉取请求仍然显示相同的冲突,当本地代码被隐藏到主代码时。 在这种情况下,我应该怎么做才能让一切正常运行,同时只保持一次提交?

提前致谢。

1 个答案:

答案 0 :(得分:1)

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

示例

假设您有一个 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

git merge main 上运行 feature 后,我们将拥有此提交历史记录。

# 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

此时,将 feature 合并到 main 只需要一个简单的 fast-forward commit

但是相反,您说在推送之前将所有提交压缩为一个。这可能会导致冲突,因为 git 现在必须比较这两个分支,而不仅仅是移动 HEAD 指针。

总结

如果您想保持提交历史干净,最好的选择是使用 GitHub 或 GitLab 的“合并和压缩”功能,当您决定合并到 main 时,该功能会将所有提交压缩为一个。

但是,如果您坚持希望在推送之前将所有提交压缩为一个,请考虑使用 rebase 拉取。但是,这不是最佳做法。

git pull origin main --rebase
# squash commit by git rebase -i or something
git push --force-with-lease
相关问题