git push -f 了之后有后悔药可以吃么

2014-06-09 16:29:40 +08:00
 Yo_oY
git push -f 的时候写错了分支名,把develop分支给覆盖了,但是本地的develop进度还是几个小时之前的,所以这之后别人提交到远端develop分支的进度就没了。

有没有什么方法可以取消这个操作?还是只能让别人重新提交了?

谢谢。。。。
25663 次点击
所在节点    git
13 条回复
YufunHe
2014-06-09 16:33:10 +08:00
额 帮顶,刚才刚-f了一个,还好没弄错……
ToughGuy
2014-06-09 16:44:40 +08:00
今天用git rm -rf 之前忘记commit
现在正失落ing...
ijse
2014-06-09 16:50:17 +08:00
应该可以用git reset或者revert来找回,记录还是有的
clino
2014-06-09 16:58:41 +08:00
重新 git push -f 原来的版本不就好了?
还没gc的话可以用git reflog来找之前丢的版本
hexor
2014-06-09 17:02:38 +08:00
这样没办法的.

假设你冲掉了A的提交, 而且你之前又没把A的提交拉到你的本地, 那么这样一来A的提交就只存在于A的本地了(假设没有另外的人在你冲掉之前拉过A的提交的话).

reflog的话应该只适用于在你本地存在过的commit都能找回来, 但是A的提交根本没在你本地存在过.

不过这不是很严重吧 让A再提交一次就可以啦, 成本还是很低的.

以上.
jsonline
2014-06-09 17:05:30 +08:00
不要手贱。
smalldirector
2014-06-09 17:18:02 +08:00
上周末,我更蛋疼,我居然执行了rm -rf ~命令,敲下回车的那一刹那,一万个草泥马在我心中奔腾~~
clowwindy
2014-06-09 18:26:59 +08:00
如果远程没 gc 可能捞得回来。

$ git clone xxx
$ cd xxx
$ git fsck --lost-found
dangling commit 4d4888a3273a5b56d69df69cbf9698fed7c19a36

$ git show 4d4888a3273a5b56d69df69cbf9698fed7c19a36
commit 4d4888a3273a5b56d69df69cbf9698fed7c19a36
Author: clowwindy <clowwindy42@gmail.com>
Date: Mon Jun 9 12:48:28 2014 +0800

Update README.md

...
确认是你要找的 commit 之后 checkout 这个 commit。然后
$ git branch -D develop
$ git branch -b develop
$ git push -f origin develop
neevek
2014-06-09 18:52:21 +08:00
可以有些补救方法,首先要找到那个有原来upstream上最新提交的人,让他执行下面这组命令:

方法1:
如果只有两个人(包括你自己):
git fetch origin develop
git checkout develop
git rebase --onto origin/develop SHA1_CULPRIT develop
git push origin develop

方法2:
如果多于两个人(包括你自己):
git fetch origin develop
git checkout develop
git cherry-pick SHA1_CULPRIT^..origin/develop
(这时候如果有冲突则解决冲突后执行git add .; git cherry-pick --continue)
git push -f origin master

对于方法2,确保在执行git push -f的时候其他人没有在做push。

注:SHA1_CULPRIT就是上次你跟upstream同步之后提交的第一个commit的sha1 hash。


最后一个提醒,99%的场景下,你不需要push --force。如果你没有100%确认自己在做什么,没有100%把握知道怎么解决问题,最好别尝试force push。
Panic
2014-06-09 19:05:06 +08:00
git果然是给专家用的
ichou
2014-06-10 11:09:56 +08:00
我默默的去百度 -f 是干嘛的去了
jamiesun
2014-06-10 13:45:15 +08:00
@smalldirector 做好备份就好,
rm -fr 还是相当贴心的。
我又一次因为/usr/local搞乱了搞不定,就直接 rm -fr /usr/local,然后将备份恢复省了折腾时间。
smalldirector
2014-06-10 13:48:12 +08:00
@jamiesun 是的,幸亏两天前用time machine备份过一次,不过还是丢了这两天的一些改动~~现在弄得我硬盘天天插着备份了~~

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/116565

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX