Git删除重复提交

alen0pnh  于 2022-09-21  发布在  Git
关注(0)|答案(3)|浏览(196)

在玩了一些遥控器之后,我的所有承诺都翻了一番。例如,不是

C3107
..
C3
C2
C1

我拿到了

C3107
C3107
..
C3
C3
C2
C2
C1
C1

其中,重复提交具有相同的名称但不同的散列。问题是我注意到它太晚了,而不是我在它上面添加了一堆好的承诺。

有没有一种方法可以删除重复的提交,而不是我添加的松散提交?

附言:如果对我有帮助,我在尝试遥控器之前会有一个储存库的副本。

提前谢谢你了。

更新正如你们中的许多人所问的那样,结果是这样的:我有一个回购R1,然后我又创建了一个R2。在我的本地副本(与R1一起更新)中,我将源更改为R2并尝试推送,但一些大文件被GitHub拒绝。所以我做了git filter-branch --index-filter 'git rm --cached --ignore-unmatch filename',这让git认为存储库是不同的。然后,我将所有内容都推送到R2,进行了一些提交,并决定切换回R1,再次更改原点并推送。然后,我向R1添加了更多的提交。

pqwbnv8z

pqwbnv8z1#

带着一点贝壳魔力、贪婪和极大的自信,答案可能是肯定的。但我太谨慎了,不会用一个命令就把事情搞得一团糟,超过3000个提交!

但是,您可以通过使用交互式重定基址来(适度地)进行交互。这有点费力,但你对正在发生的事情有很好的控制力,而且你从Git那里得到了很好的反馈。

mi7gmzs6

mi7gmzs62#

您可以运行以下命令:

git rebase -i <commit id where you want to start squashing>

这将打开一个互动会话。将堆栈上除第一个提交之外的所有内容都切换为修复或挤压。

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

rur96b6h

rur96b6h3#

最后,我决定赞成用cherrypy。

相关问题