修改git的重新基址
我做了一个修改git的重新基址,git,Git,我做了一个git-rebase-master,这涉及到在三个文件中进行一些手动合并。在其中一个例子中,我遗漏了一个尾随的换行符,导致文件末尾出现以下情况: <<<<<<< HEAD ======= >>>>>>> ... commit message >。。。提交消息 这自然会导致PHP错误。我可以很容易地修复该文件,但我不想添加错误的“修复草率的重基”提交 我如何修改对重基的更改?或者,重复重新基址以便我
git-rebase-master
,这涉及到在三个文件中进行一些手动合并。在其中一个例子中,我遗漏了一个尾随的换行符,导致文件末尾出现以下情况:
<<<<<<< HEAD
=======
>>>>>>> ... commit message
>。。。提交消息
这自然会导致PHP错误。我可以很容易地修复该文件,但我不想添加错误的“修复草率的重基”提交
我如何修改对重基的更改?或者,重复重新基址以便我能捕捉到它?您可以进行更改,然后
git commit--amend
这个问题基本上归结为“如何修改不是最新的提交?”。假设您没有将提交推到任何地方,并且进一步假设从提交开始,历史是线性的,这非常容易
$SHA
,但您可以使用任何想要标识此提交的方法$SHA
,第二次提交应该是您的编辑,接下来应该是HEAD
之前的其余提交。保存并关闭此编辑器。Git现在将执行一个交互式重基,将您的更改应用于您想要修改的提交
您可以使用另一种解决方案,该解决方案更为手动,但不需要交互式重新基址。基本上,您可以直接签出要修改的提交(生成一个分离的头部),进行更改,运行
git commit--amend
,然后在新修改的提交之上重新设置分支的基础。实际上,您可能更喜欢这种风格,因为它更明确地说明了您正在做的事情,但交互式基础版本的好处是,您可以使用交互式基础做更多的事情。例如,您可以对提交重新排序、将多个提交挤压在一起、删除提交、重写提交等。您还可以使用--fixup
和--squash
标志来git commit
记录您希望执行的这些操作,而无需立即实际执行重基,完成后,您可以返回并执行一个大型交互式重基。这样做会删除上次提交时显示的行。这与纠正重基不同。顺便说一句,我现在还需要知道如何清理它。我明白了。其余的再基地成功了吗?如果是这样的话,您应该能够git reset--hard[ref在错误合并之前提交]
,然后再次重新设置基址。如果你不介意我问的话,稍微草率的承诺有什么大不了的?很抱歉幸灾乐祸,但是你的第二句话让我哈哈大笑。@umbrane:你可以用reflog撤销你的修正。如果git commit--amend
是您执行的最后一个命令(至少是修改任何内容的最后一个命令),那么您可以使用git reset--hard HEAD@{1}
撤销它(或者--soft
在索引中保留您的更改)。我要修改的commit是分支的第一个提交吗?错误的行显示了该提交和来自master的最新提交之间的差异,只是重新设置了基础。请解释“然后将分支重新设置到新修改的提交之上”。我不清楚我是应该在分离头中运行git-rebase[branch]
,还是在分离头之后运行git-rebase[commit]
。@umbrane:无论commit引入了哪些行,您要修改的行都是您要针对的行。听起来这可能是您的分支的第一次提交。至于解释,当你处于分离状态时,在修改提交后,你可以使用git-rebase-head[branch]
(它检查分支,并在原来的head
,即你修改的提交之上对其进行重定)。按照你上一次评论中所述的重定提交对我有效。非常感谢。