2017-05-24 223 views
0

我有一個情況,其中git pull正在刪除我的提交。以下是如何輕易重現的情況:git pull刪除提交

  1. 當地分行已經一次提交的遠程回購一個git update-ref -d refs/heads/<branch> <branch>~1做的是把它未來的遠程跟蹤分支
  2. git push
  3. 的。是的,我知道......請不要問爲什麼或者不要說我不應該這樣做。它與一些後端自動化有關,這可能會讓這個線程脫離主題。反正...
  4. 回到本地回購,git pull
  5. 領先提交已經消失

基本上發生的事情是,我有branch.<branch name>.rebase設置爲true,並在此底墊一步它默認爲語義--fork-point哪(我認爲)基本上從本地分支的reflog的頂部迭代下來,並檢查SHA是否存在於遠程跟蹤分支的reflog中。一旦它存在於兩者中,那就是叉點。然而,在這個小角落的情況下,它的實際叉點是而不是。如果遠程跟蹤分支和本地分支參數在命令行上交換,則實際返回正確的叉點。

  1. 是否可以將--no-fork-point設置爲重新綁定的默認值?我看着git config documentation,但沒有找到任何明顯--fork-point關閉

  2. 我嘗試使用Git別名會轉,但它的尷尬,並要求每個人都使用非常規的指令

+0

AFAIK做任何'git pull'都不會導致提交被刪除。在最極端的情況下,'git pull --rebase'會導致你的某些提交被_rewritten_並在遙控器上播放,但即使在這種情況下,它們也不會被刪除。 –

+0

@TimBiegeleisen:唉,當'git pull'運行'git rebase'(就像它有'branch'一樣,​​.rebase'設置爲'true'),你會得到fork-point代碼。 – torek

+0

@torek我完全不知道這可能發生。如果你喜歡它,可以給你的答案添加一些信息。 –

回答

2

,不幸的是,是--fork-point的實際目標:它意味着剝離上游自身剝離的上游提交,即您在分支中提交的提交。

對Q1的回答是無法從git pull中關閉此功能。通常我建議反對git pull:使用git fetch其次git rebase ...但默認--fork-point,你會得到,如果你沒有指定一個特定的上游(或--root)將仍然咬你這裏。

Q2並不是一個真正的問題:別名有點尷尬,是的。一個明確的git fetch,然後git rebase --no-fork-point將完成這項工作,但它需要人們真的這樣做。