2017-04-12 43 views
0

我有一個本地分支已經與遠程分支分離。我想保留本地更改並刪除遠程分支,我不再需要遠程分支。我想知道如何通過簡單地使用安全覆蓋遠程分支(原始地址)

git push -f 

「覆蓋」遠程分支有多安全?它只是刪除遠程分支,並創建一個新的給我的本地分支?

有沒有更好的方法來做到這一點?我需要以自動方式(使用shell腳本)完成此操作,所以我無法真正手動轉到Github,刪除分支然後再推送。

具體而言,地方分公司已經從遠程分歧的原因是因爲我已經叫

git reset --soft <another-branch> 

回答

1

它不會「刪除」遠程分支。但是,遠程分支現在將指向您分散的本地HEAD。只要你確信你想要做什麼,就可以推動力量。值得一提的是,你會孤兒一些來自你的舊遙控器HEAD的提交,最終會得到GC'd。

+0

謝謝,這是有道理的,你認爲git的歷史將保持清潔? –

+0

我在原始問題中增加了一個細節,解釋了爲什麼本地分支已經偏離了遠程分支。 –

1

你的問題(並在一些評論中的後續行動)表明在git中有什麼分支有些混淆。其他源代碼管理系統可能讓你受訓,認爲分支是一系列增量;在混帳這是完全不同的事情。

分支只是一個指向提交的指針。這個分支本身對改變歷史一無所知; git通過從分支指向的提交(包含最近的更改)開始並通過「父提交」指針尋找其他提交(其中包含更早的更改)來查找信息。

分支和提交行是完全分開的東西。更新分支(例如推送),覆蓋它(強制它指向一個不同的提交),甚至刪除它......這些都不會對一系列提交產生任何影響。這是一系列的提交,以確保您的歷史的完整性。

那麼這是「安全」嗎?是。歷史是否仍然清潔?是的,儘管在遠程分支上曾經是的提交可能不再可達(意味着它們最終可能被gc刪除)。

唯一需要注意的是其他用戶擁有相同遠程回購的克隆。他們需要一個非常類似於git rebase文檔(「從上游rebase」恢復或類似)中所解釋的恢復過程。

+0

嗯,最後一點關注我 - 我是唯一一個在這個分支上工作,所以我希望它不會影響其他人。 –

+0

我在原始問題中增加了一個細節,解釋了爲什麼本地分支已經偏離了遠程分支。 –