2013-06-21 78 views
2

我知道它们存在于git reflog中,但是如果我将提交推送到远程存储库,修改,然后git push --force(通常应避免警告:pushing --force远程存储库),我覆盖的提交是否存在?Git是否存储修改?

回答

5

我会覆写的提交是否存在?

只有:


注意ORIG_HEAD(一个memento from a time where reflog didn't existed yet)是创建/一个git commit(如git commit --amendgit commit --amend -m "new comment")更新。
因此,如果reflog未在回购库上激活,则ORIG_HEAD不能用于引用修改后的提交。

+0

我应该注意的是,通常会推送到裸仓库,裸仓库默认情况下禁用reflog。所以第二点应该有一个很大的“如果”附加到它。 – kostix

+0

@kostix好点,我在答案中包含了回复日志激活裸回购。 – VonC

+0

我也相信(虽然我懒得检查)'ORIG_HEAD'参考文件可能指向在修改修改之前提到的提交'HEAD'。理论上,如果reflog由于某种原因在正常的本地存储库中被禁用(我的意思是,没有'git fsck'运行需要手动探索),这可能能够缓解人们的脖子问题。 – kostix

1

编号您的修改后的提交将保留在您的本地回购中一段时间​​,但不会推送。

推送时,Git会计算缺少的提交以使远程分支与本地分支处于同一点。由于您的修改提交不在分支上,因此不会推送。

修改后的提交保留,直到发生垃圾回收。但GC在删除提交之前检查了几个条件,所以不要害怕丢失数据。

+0

在OP描述的场景中,提交在修改之前被推送。 –

+0

哦,是的,谢谢,我刚刚看到。因为它没有被编辑,我一定误解了这个问题。 VonC BTW非常好的答案,我upvoted。 –