Git删除重复提交

时间:2014-01-30 21:52:22

标签: git

在玩了一些遥控器后,我的所有提交都被加倍了。例如。而不是

C3107
..
C3
C2
C1

我得到了

C3107
C3107
..
C3
C3
C2
C2
C1
C1

其中doubled提交具有相同的名称但具有不同的哈希值。问题是我注意到它太晚了,而不是在它上面添加了很多提交。

有没有办法删除重复的提交而不是我添加的松散的提交?

P.S。:如果在我使用遥控器进行实验之前,我将获得一个存储库的副本。

提前多多感谢。

更新正如你们许多人在这里问到的是这样的结局:我有一个repo R1然后我创建了另一个R2。在我的本地副本,这是最新的R1我改变了原来R2并尝试推送,但一些大文件被github拒绝。所以我做了git filter-branch --index-filter 'git rm --cached --ignore-unmatch filename',这使得git认为存储库是不同的。然后我把所有推到R2做了一些提交,并决定再次切换回R1更改原点并推送。然后我向R1添加了一些提交。

3 个答案:

答案 0 :(得分:6)

有了一点贝壳魔力,贪婪和很大的信心,那么答案可能是“是”。但是我太过于害怕完全搞砸了用一个命令压缩3000次提交的东西!

但是,您可以使用interactive rebasing以交互方式(适度)进行此操作。这有点费力,但你可以很好地控制正在发生的事情,并从git那里得到很好的反馈。

答案 1 :(得分:4)

git rebase -i #commit id你要开始压缩#

这将启动一个交互式会话。切换堆栈上第一次提交的所有内容 修理或壁球。

pick 07520cd Caught file exists issue. # this is last commit
fixup 3b71b9f Added README.            # fixup will squash the commit

# Rebase b041966..3b71b9f onto b041966
#
# Commands:
#  p, pick = use commit
#  r, reword = use commit, but edit the commit message
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#  f, fixup = like "squash", but discard this commit's log message
#  x, exec = run command (the rest of the line) using shell
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out

我有一个git koan(koan 8),它引导你完成git rebase -i。

https://github.com/jbremson/git_koans(正在进行中)

答案 2 :(得分:0)

最后我决定采摘樱桃。