什麼是用盡可能少的痛苦儘可能做到這一點的最佳做法?
最好的做法是避免它。
由於ElpieKay建議,這是一個很好的做法,「釋放分支」,其中歷史是安全的,事情是穩定的,但也有「發展/功能分支」在這裏你可以做你想做的,直到你再次將它們合併/重新組合到您的穩定主分支中。
回答您的問題:
- 當他做了沒有任何變化,只是需要更新?
當沒有改變任何東西,拉,git會拿遙控器的歷史,正確的(因爲有人顯然--force
-pushed,所以它必須是正確的。)所以這只是簡單地覆蓋你的合作者工作並使提交歷史記錄與遠程服務器上的歷史記錄匹配。它會顯示一個附加信息,如force update
,就像您強制推送某些東西時一樣。
注意舊提交不會真的被刪除 - 只是「隱藏」的,因爲他們是從呈交圖的其餘部分無關聯。因此,如果您突然需要再次訪問「已刪除」提交,那麼只要您在某處丟失提交的SHA哈希值,這也許是可能的。 git垃圾清理器在對存儲庫進行了一定量的操作後刪除不可達的對象。
- 當他確實做了一些更改,並且希望在提交之前進行更新?
顯然這是最糟糕的情況。無論如何,請確保您通過提交所做的更改(即使您想在之後應用它們!),創建一個臨時的,新的
git add . ; git commit -am "Describe all my changes here" ; git branch backup
現在所做的更改安全地存儲在備份分支,可以去除再次提交。
git reset --hard HEAD~
然後拉動當前分支
git pull
這應該沒有任何合併衝突,因爲它基本上代表案例#1,在沒有修改過,它只會使當地的歷史匹配遠程的。現在,您可以再次應用您的更改,方法是再次應用更改(= backup
分支上的最新提交)。
git cherry-pick backup
顯然,這可能會導致合併衝突,當遠程存儲庫更新代碼的相同行時。如果沒有衝突,則可以刪除backup
分支。您的存儲庫是最新的,您的更改將應用於其上。
但是,試圖避免這些情況。在合併之前在單獨的特徵分支中壓扁/重新綁定,或讓提交在合併之後保持原樣。
維護髮布分支和多個開發分支。你是唯一允許更新發布分支的人。其他團隊成員在開發分支上工作。開發分支完成後,將其壓縮回發佈分支。只要他們向你保證,開發分支的最後一次提交的代碼在合併之前是可以的,他們可以爲開發分支做一些事情。 – ElpieKay
謝謝。我的使用案例恰恰是我一直在爲我的隊友工作的一個特色分支,而我們兩個人都在進行提交。如果我們希望能夠儘可能地同步,那麼我們可能會更多的是因爲我們一直在分支上工作。而且由於開發已經結束,我打算進行合併,但要清理一下歷史。 – tisek