Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git提交,然后从master重新基址,然后对原始提交进行小的更改_Git_Version Control_Patch_Git Commit - Fatal编程技术网

Git提交,然后从master重新基址,然后对原始提交进行小的更改

Git提交,然后从master重新基址,然后对原始提交进行小的更改,git,version-control,patch,git-commit,Git,Version Control,Patch,Git Commit,好的,这个有点复杂,很可能非常具体。让我试着解释一下 假设我把这个git回购协议放到本地驱动器中。然后做一些改变。由于这些更改位于许多不同的文件中,并且针对不同的目标,因此提交不止一个。假设这些更改的提交值为hash值ab001到ab005(五次提交)。然后我创建了一系列补丁并发送给社区进行审查 同时,假设我意识到主回购已经改变了一点,所以我需要重新设定基准。我这样做,解决所有的冲突。现在这将导致另一次提交,比如说ab006 一切都很好 但第二天,我收到了对上一个补丁的评论和建议(其中一个有5次

好的,这个有点复杂,很可能非常具体。让我试着解释一下

假设我把这个git回购协议放到本地驱动器中。然后做一些改变。由于这些更改位于许多不同的文件中,并且针对不同的目标,因此提交不止一个。假设这些更改的提交值为hash值
ab001到ab005(五次提交)。然后我创建了一系列补丁并发送给社区进行审查

同时,假设我意识到主回购已经改变了一点,所以我需要重新设定基准。我这样做,解决所有的冲突。现在这将导致另一次提交,比如说
ab006

一切都很好

但第二天,我收到了对上一个补丁的评论和建议(其中一个有5次提交)。因此,我现在必须根据这些注释进行一些更改,并发送较旧补丁的
v2
(版本2)(即5次提交)。因此,我必须取消这5次提交,进行更改并再次提交,然后创建另一个补丁(使用这5次提交)

我怎么做呢?我不能取消提交,因为
头中有一个rebase提交。对此我真的很困惑。

您可以从master中“撤消”重基,然后将提交的
ab001
修改为
ab005

git log

# commit ab005
# Fifth commit on the topic branch
# ...
#
# commit ab001
# First commit on the topic branch
#
# commit xy999
# Last commit on master before I started this new branch

git reset --hard xy999
git cherry-pick ab001
...
git cherry-pick ab005

现在,您的历史记录是干净的,您可以修改主题。如果有必要,您可以在master上重做rebase,不过如果可能的话,我建议您等到这个分支中的工作完成。

git文档建议您应该在新提交中进行更改,而不是修改已有的提交。请参阅@declan中的“从上游再基准恢复”一节。但是对于每一个小的改变和建议,我不能发送增量提交。它看起来很马虎,而且审核人对以前的更改(因为它尚未合并)没有把握。当然,这是公平的。如果我处于这种情况,我会“撤消”引入最新主控更改的重新基础,然后将我的更改更改为ab001-ab005,即在主控上重做重新基础。这种方法对你有用吗?如果是这样的话,我可以提供更多的细节。@declan,是的,那会有用,但每次我都必须解决冲突。太累了。