在玩了一些遥控器后,我的所有提交都被加倍了。例如。而不是
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添加了一些提交。
答案 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)
最后我决定采摘樱桃。