如何对大量提交进行变基

3
我正在尝试将我的分支与上游同步。
git rebase upstream/master

但是,不幸的是,我发现有100多个本地提交,每个提交都需要手动解决冲突。

我考虑的一个想法是将所有本地提交压缩成一个,然后重新绑定只会更容易处理一个提交。但这是我最不想要的事情,因为我真的想保留我所有提交的记录。

有没有什么方法可以用较少的努力重新绑定大量提交?


你到底是怎么做到的?本地和远程代码库为什么不同步了?你尝试过拉取重置吗? - jonrsharpe
3
你使用git rebase而不是git pull(即git pull upstream/master)是否有特定原因?后者会生成一个带有两个分支的历史记录,但它只尝试合并上游和本地工作区中的最新提交,这意味着你只需要解决一次提交。 - Kevin
2个回答

3

我认为在这种情况下,您实际上需要的是合并而不是变基。解决合并冲突将等同于如果您将所有100多个提交压缩为单个提交,然后对该提交进行变基所看到的内容。但是通过合并,您将保留您的正在进行的工作历史,正如您所需。

当您只有几个提交需要与同事的最新工作同步或者有特定的需要重写历史时,变基很好用。但是,当您已经分叉了100多个提交时,您已经创建了一个通常使用分支来处理的用例。在这种情况下,通过合并提交进行同步似乎非常合理。

如果您确实需要成为唯一可以查看您正在进行的工作历史的人,您可以创建一个本地分支(git branch <my-true-local-history>),指向您正在进行的本地工作的头部,以保留对提交的命名引用,然后执行一个压缩合并(git merge --squash),它仍将创建一个合并提交,但将您的正在进行的工作提交折叠为单个提交(但是您之前创建的本地分支仍将指向真实的详细历史记录)。


0

场景:

我创建了一个新的代码库,并在第一个新分支上有大约一百个提交消息。为了保持历史记录的清洁,我想在合并之前将所有内容压缩成单个提交。

解决方案:

  1. main|master 创建新分支。(目前只有初始提交)

git checkout -b feature/<name_of_new_branch>

  1. 切换到新分支(<feature/<name_of_new_branch)

git checkout <feature/<name_of_new_branch>

  1. 合并并压缩具有多个提交的分支。

git merge --squash feature/<branch_with_many_commits

  1. 使用单个新消息提交更改。

git commit -m "Your new commit message"

  1. 最后,推送您的更改。 git push

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接