因为我想保持每个拉取请求一个提交,事情是这样的:
feature
结帐并做一些工作。stash
我的代码,pull
来自origin/master
的新代码以获得最新版本。git stash apply
恢复工作并解决冲突。git commit --amend -m "New message"
。git push origin feature
。然而,将 feature
合并到 main
的 Github 拉取请求仍然显示相同的冲突,当本地代码被隐藏到主代码时。
在这种情况下,我应该怎么做才能让一切正常运行,同时只保持一次提交?
提前致谢。
答案 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