【问题标题】:Modifying a merge commit after another commits before push在推送之前在另一个提交之后修改合并提交
【发布时间】:2014-05-26 08:59:11
【问题描述】:

昨天我的队友不小心做了一个糟糕的更改,在合并期间泄露了一些凭据(粗略的重建):

# 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"

我想修改 bad 提交,以便无法将凭据推送到远程存储库。由于尚未推送本地提交,首先,我尝试使用 git rebase --interactive HEAD~2 使用 this solution(一个老 SVN 用户希望仅对这些 badgood 修订进行重新定位),但它似乎无法显示比预期更多的提交(那些已被拉出的提交)并完全忽略 bad 提交。据我了解,由于合并,它不起作用。当前树如下:

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

如何修改 bad 提交,排除包含敏感数据的文件,使其也可以成为 good 提交并准备好推送?

【问题讨论】:

  • 您是否尝试使用git rebase -p @~2? 和-p 来保留合并?
  • @VonC 刚刚尝试过,它完全符合我的要求。能否请您添加答案,以便我标记它并关闭问题?

标签: git git-merge rebase


【解决方案1】:

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

git rebase -p @~2

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

-p
--preserve-merges

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

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

【讨论】:

    猜你喜欢
    • 2011-08-08
    • 2013-05-08
    • 2020-12-18
    • 2019-07-04
    • 2020-04-29
    • 1970-01-01
    • 2011-10-19
    • 2011-11-05
    • 1970-01-01
    相关资源
    最近更新 更多