2011-09-27 100 views
0
* 080dc7a (HEAD, origin/master, origin/HEAD, master) 
* bfeee2f 
|\ 
| * 16e94ff (origin/McLongNumber, McLongNumber) 
| * f50319b 
| |\ 

这是我的工作树的最后4个提交。我想通过挤压最后一次提交的合并衍合,使我的工作树看起来像下面的例子中,保持树究竟事情是这样的休息:我已经使用--onto -p-i试图如何使用git rebase将我的工作树完全按照我想要的方式转换?

* bfeee2f (HEAD, origin/master, origin/HEAD, master) 
|\ 
| * 16e94ff (origin/McLongNumber, McLongNumber) 
| * f50319b 
| |\ 

没有任何成功。即使使用-p选项时,我设法成功地压扁最后一次提交,树行显示McLongNumber的master分支合并从日志丢失。所以我想有人更熟悉rebase命令可以帮助我解决这个问题。

+0

这是从来没有(为永不最值)一个好主意,改变历史的承诺这是父另一个分支。 –

回答

1

你可以这样说:

# make 'master' point to it's parent commit, 
# but don't modify the index or working directory 
git reset --soft HEAD^ 

# rewrite the commit using the stuff in the index 
git commit --amend 

# publish the modified commit (see WARNING below) 
git push -f 

注意,SHA1会改变;它将不再是bfeee2f

警告

这几乎总是一个非常糟糕的主意改写已经被发布到共享存储库的历史。即使使用-f选件到git push,大多数共享存储库也会配置为拒绝历史记录修改。因此,你可能无法做到你想要的东西。

的唯一时间是可以接受的改写历史的出版是:

  • 您使用的是上游资源库的唯一的人,你知道如何从您的其他克隆历史重写恢复。
  • 共享资源库的其他用户知道如何从历史的改写恢复,你已经警告过他们,你改写历史,你的照顾,以确保重要的变化将不会被丢弃,当你力推。即便如此,重写历史对其他人也是极具破坏性的。这是严重惹恼你的同事/合作者/贡献者的好方法。
相关问题