git rebase upstream/master
但是,不幸的是,我发现有100多个本地提交,每个提交都需要手动解决冲突。
我考虑的一个想法是将所有本地提交压缩成一个,然后重新绑定只会更容易处理一个提交。但这是我最不想要的事情,因为我真的想保留我所有提交的记录。
有没有什么方法可以用较少的努力重新绑定大量提交?
我认为在这种情况下,您实际上需要的是合并而不是变基。解决合并冲突将等同于如果您将所有100多个提交压缩为单个提交,然后对该提交进行变基所看到的内容。但是通过合并,您将保留您的正在进行的工作历史,正如您所需。
当您只有几个提交需要与同事的最新工作同步或者有特定的需要重写历史时,变基很好用。但是,当您已经分叉了100多个提交时,您已经创建了一个通常使用分支来处理的用例。在这种情况下,通过合并提交进行同步似乎非常合理。
如果您确实需要成为唯一可以查看您正在进行的工作历史的人,您可以创建一个本地分支(git branch <my-true-local-history>
),指向您正在进行的本地工作的头部,以保留对提交的命名引用,然后执行一个压缩合并(git merge --squash
),它仍将创建一个合并提交,但将您的正在进行的工作提交折叠为单个提交(但是您之前创建的本地分支仍将指向真实的详细历史记录)。
场景:
我创建了一个新的代码库,并在第一个新分支上有大约一百个提交消息。为了保持历史记录的清洁,我想在合并之前将所有内容压缩成单个提交。
解决方案:
main
|master
创建新分支。(目前只有初始提交)git checkout -b feature/<name_of_new_branch>
git checkout <feature/<name_of_new_branch>
git merge --squash feature/<branch_with_many_commits
git commit -m "Your new commit message"
git push
git rebase
而不是git pull
(即git pull upstream/master
)是否有特定原因?后者会生成一个带有两个分支的历史记录,但它只尝试合并上游和本地工作区中的最新提交,这意味着你只需要解决一次提交。 - Kevin