Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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 将大块头重新组织为提交_Git_Commit_Squash - Fatal编程技术网

Git 将大块头重新组织为提交

Git 将大块头重新组织为提交,git,commit,squash,Git,Commit,Squash,我对一些代码进行了重大重构,在此过程中,我已经提交了几次。这还没有被推到任何公开回购。在推之前,我想现在将提交重新组织为逻辑单元。问题是,我不仅想挤压提交,还想将大块重新组织到其他提交中 为了说明这一点,我将A和A1、A2、A3组合,B和B1、B2、B3组合。我想签出A之前的版本,并用大块A1、A2、B2签出新的提交C,用大块B1、B3、A3签出新的提交D 提前感谢。看一看git-rebase。听起来你想要一套完全不同的提交。如果是这种情况,只需返回原点(例如git reset origin/m

我对一些代码进行了重大重构,在此过程中,我已经提交了几次。这还没有被推到任何公开回购。在推之前,我想现在将提交重新组织为逻辑单元。问题是,我不仅想挤压提交,还想将大块重新组织到其他提交中

为了说明这一点,我将A和A1、A2、A3组合,B和B1、B2、B3组合。我想签出A之前的版本,并用大块A1、A2、B2签出新的提交C,用大块B1、B3、A3签出新的提交D


提前感谢。

看一看
git-rebase

听起来你想要一套完全不同的提交。如果是这种情况,只需返回原点(例如git reset origin/master),然后重复使用git add-p和git commit,直到完成为止。如果需要,您可以在提交后使用git stash测试每个提交,并使用git--amend来修复任何错误


或者,git-rebase-i实际上可以拆分提交。阅读手册页,这并不难,但有点麻烦。

对于这样一个复杂的重组,最简单的事情可能是首先完全拆分您的提交,然后再进行第二次交互式重基以根据需要重新排列和挤压它们。另一个重要提示是,您可以使用
git stash
来提供很多帮助:在
reset HEAD^
将分支提示移回后,为第一次拆分提交添加所需内容,运行
git stash--keep index
隐藏所有未添加的更改,但保留索引,测试其中的内容,提交,然后使用
git stash pop
取回其余内容。这样,您就可以干净地测试您正在提交的内容,就好像您只智能地进行了这些更改一样。泡沫,冲洗,重复@杰弗罗米,我认为你应该把这些评论作为自己的回答。我认为这是个好建议。