在推送之前修改另一个提交之后的合并提交

时间:2014-05-26 08:59:12

标签: git git-merge rebase

昨天我的队友在合并期间意外地犯了一个错误的更改泄露了一些凭据(粗略重建):

# bad commit reconstruction
$ git pull
... no automatic merge happened ...
... some manual merge goes here ...
$ git add .                     # instead of `git add src`
$ git commit -m "merged"

然后提交了另一个非合并的更改,但没有推动更改:

# good commit reconstruction
... edit ...
$ git add .
$ git commit -m "foo bar"

我想修改错误的提交,因此无法将凭据推送到远程存储库。由于尚未推送本地提交,首先,我尝试this solution使用git rebase --interactive HEAD~2(一个旧的SVN用户希望将这些好的重新设置仅修改),但似乎没有显示比预期更多的提交(已被拉动的提交)并完全省略错误的提交。据我所知,由于合并,它不起作用。当前树如下:

* GOOD [master]
|    
* merge + BAD
|\
| |
| * pulled [remote/origin/master]
| |   
| * pulled
| |   
| * pulled
| |   
| * pulled

如何修改错误的提交,不包括包含敏感数据的文件,这样它就可以成为好的提交并准备推送?

1 个答案:

答案 0 :(得分:1)

为了保留由git pull创建的合并,你可以这样做:

git rebase -p @~2

git rebase -p确实保留了合并提交它的基础。

-p
--preserve-merges
  

不要忽略合并,而是尝试重新创建它们。

     

这在内部使用--interactive机制,但明确地将它与--interactive选项结合使用通常不是一个好主意,除非你知道自己在做什么(参见BUGS below)。