我在 gerrit 上上传了一个补丁 X,但我错误地包含了一个我不应该包含在补丁中的文件 Y。现在,我想为 X 提交一个新的补丁集,没有文件 Y。是否可以这样做
从 X 的新补丁集中删除 Y 的步骤
手动删除了我在 Y 中所做的所有更改(不是最好的方法,但它从 X 的新补丁集中删除了 Y)
git add .
git commit -s --amned
repo upload .
我在 gerrit 上上传了一个补丁 X,但我错误地包含了一个我不应该包含在补丁中的文件 Y。现在,我想为 X 提交一个新的补丁集,没有文件 Y。是否可以这样做
从 X 的新补丁集中删除 Y 的步骤
手动删除了我在 Y 中所做的所有更改(不是最好的方法,但它从 X 的新补丁集中删除了 Y)
git add .
git commit -s --amned
repo upload .
简短的回答:
$ git reset HEAD^ <file to remove from commit>
$ git commit --amend
这将使<file>
本地修改仍然存在,因此假设您不再需要修改,您现在可以恢复该修改:
$ git checkout <file>
这是最快的方法。另外的选择:
$ git log -n1 --oneline | cat
$ git reset --soft HEAD^
$ git reset <file to be unstaged>
$ git commit -C <sha1 commit hash from "git log" above>
我没有太多使用 Gerrit,但你可以修改我相信的提交。
修改提交
使用 git commit --amend 修改提交时,在提交消息中保持 Change-Id 行不变。这将允许 Gerrit 使用修改后的提交自动更新更改。
http://gerrit.googlecode.com/svn/documentation/2.0/user-changeid.html#amend
评论后:
您是否确保存在 Change-Id 行并且是提交消息的最后一行?如果提交消息中不存在 Change-Id 行,请从 Web 上的更改页面复制该行并将其放入您的提交消息中。
您的更改是否已经审核?如果他们仍在等待审核,您可以将其标记为已放弃并摆脱它们。之后,您可以再次提交正确的代码。
如果您的更改已审核并已合并到 git 存储库中,则解决方案应该不会有所不同,撤消线程中解释的 git push; 撤消“git push”