我完全fubar'd我的本地分支,並希望重新開始。服務器上的版本是正確的。覆蓋我的本地分支與遠程分支
我不想重新開始,我想用我的本地歷史來解決我的巨大麻煩。 (我可以,如果我必須)。
git fetch branchname
和git pull branchname
不起作用。我收到的消息是「最新」,但是,我的本地版本與服務器的版本不匹配。
git pull origin/branchname
給我一個「找不到」的錯誤。
我完全fubar'd我的本地分支,並希望重新開始。服務器上的版本是正確的。覆蓋我的本地分支與遠程分支
我不想重新開始,我想用我的本地歷史來解決我的巨大麻煩。 (我可以,如果我必須)。
git fetch branchname
和git pull branchname
不起作用。我收到的消息是「最新」,但是,我的本地版本與服務器的版本不匹配。
git pull origin/branchname
給我一個「找不到」的錯誤。
您的本地分支可能會對您想要丟棄的分支進行修改。要做到這一點,您需要使用git reset
將分支機構重置爲您與上游回購分支不同的最後一個分支。使用git branch -v
查找上游分支的sha1標識,並使用git reset SHA1ID
重置您的分支。然後,您應該可以執行git checkout
來放棄它在目錄中留下的更改。
注意:請務必在備份的回購庫上執行此操作。這樣你可以保證你自己的工作是正確的。或者,如果沒有,則需要備份才能恢復。
這種感覺好像可能會起作用,但考慮到「在其他地方複製你的工作副本」的方法的簡單性和可靠性,請創建一個遠程分支的新副本「我沒有看到這是如何更好。 – greggles 2012-10-18 15:55:52
首先,在當前位置的新的分支(如果你需要你的老「搞砸了」歷史):
git branch fubar-pin
更新您的遠程分支機構的列表,並同步新的提交:
git fetch --all
那麼,您的分支重置到這種地步產地/分支點:
git reset --hard origin/branch
小心,這將刪除您的工作樹的任何更改!
+1,但你可能想要添加一個提醒來做'git fetch origin'在重置之前 – 2011-06-03 16:22:59
我做了這個只做了一點小小的改動,它不起作用:git fetch --all,git reset --hard SHA1OFANOLDCOMMIT,(一些其他的東西),git reset --hard origin/branch。最終的結果是,我仍然在舊的提交。所以,這種方法在某些情況下可能有效,但我認爲這種方法根本不起作用。 – greggles 2012-10-18 15:56:41
@greggles:任何錯誤?在最後一個命令後,HEAD必須指向原點/分支。 – knittl 2012-10-18 18:10:13
我做什麼,當我搞砸了我的本地分行是我剛剛重命名我破碎的分支,並再次檢查了/支上游分支:
git branch -m branch branch-old
git fetch remote
git checkout -b branch remote/branch
然後,如果你確定你不想刪除它:
git branch -D branch-old
但通常我會在本地離開舊分支,以防萬一我在那裏有東西。
這似乎是最好的答案。它有助於創建一個備份副本以防萬一,並且似乎很可能導致本地分支成爲遠程分支的精確副本。 – greggles 2012-10-18 15:59:16
很好的回答,對我有用。一問: 官方git的結帳文件似乎是說,你的第三個命令應該是: 'git的結帳-b
我認爲config var'branch.autoSetupMerge'(我認爲默認爲true)會使'--track'隱含。而且,是的,在我所有的git設置中,我不需要在執行'checkout -b'時顯式''track',而是YMMV。 – 2017-12-13 20:54:38
[重置本地存儲庫分支就像遠程存儲庫HEAD]可能的副本(http://stackoverflow.com/questions/1628088/reset-local-repository-branch-to-be-just-like-remote- repository-head) – 2016-04-01 02:42:33