簡體   English   中英

Git將所有父提交提交到遠程(即重寫遠程歷史記錄)

[英]Git push all parent commits to the remote (ie rewrite remote history)

有一點背景:最近我使用cvsimport從CVS遷移到Git。 現在有一個通用的(裸露的)存儲庫,由甘露石管理,人們可以在那里進行本地更改。 然后,我發現舊CVS歷史中的許多標簽沒有被完美地導入。 我可以通過使用cvs2git從本地重新執行從CVS的遷移來解決此問題,然后將我的第一個存儲庫的分支頭移植到cvs2git提供的新樹上(仍在本地)。 現在,我有一棵歷史比以前更好的完整樹,其中所有分支的頭都具有與遠程服務器上當前哈希值相同的哈希值(我使用了嫁接和過濾器分支,如以下答案所示: https:// stackoverflow .com / a / 2428339/1005470

我現在想做的就是將這些更改推送到遙控器上。 當然, git push返回所有內容都是最新的:我不知道如何推送重寫的歷史記錄 因為refs匹配,所以git push -f還返回一切都是最新的。

而且,我當然希望其他開發人員幾乎沒有注意到某些變化。 下次拉動它們時,他們應該只會看到更新的歷史記錄(如果必須重新克隆,我也可以)。 我假設他們在分支機構負責人之前沒有基於提交的任何工作(我知道否則會很麻煩)。

編輯:澄清一下,這是兩個存儲庫上git rev-list HEAD的輸出(摘錄)。 以粗體顯示的提交是我進行嫁接的地方。 我想用本地存儲庫中的內容覆蓋遠程位置以下的所有內容。

本地倉庫
fff881c238fff8b0057be8dab494ec5a6aa181d9
ac513b5596cca48dd885a969fdcc4a2b49e507d0
1b199d8e4ac29e4bd39ff96059031cf9b1390609
427837c98a14f28bc2e5d91fcf89e954b3bb3e77
0d9e58cc4f6a0107c718c689e24353d4ce59ab8c
....

遠程倉庫
6ad634da6e5acda43e6cf0919e8f4994c08ac862
bd32b7c9b0ae4faea51720b98586f89972b52e58
3778ce4ff85f269e2287d57c7aec3ecefabc135a
d3c343f3498d1d82b680be2ffc2c5e05c14a3d4c
a5d200b99f31a005cc8312d0a23a79d4014a2156
8b90afbbb06bea062d26b520c42c068ef96e5db7
fff881c238fff8b0057be8dab494ec5a6aa181d9
19cf091efb12413027941ac893ea8d503fea415e
efbed577d5986beef45ba0f9a2560f4b1ca120fc
bbec686e3389abe0679672a3d71c236b98ffc111
5b56665e48b3af51a25d0c9d2342d04e730aaa16
2ce095b0ed92f22baf74e728bda07bfded5a4e7b
...

看來您的本地分支未設置為跟蹤遠程分支。

您將需要在分支中設置遠程跟蹤(檢查branch命令的--set-upstream選項),然后執行裸git push 或單獨推送每個分支,在push命令中指定分支名稱: git push --set-upstream <remote> <remote-branch-name>每個分支,同時將該分支檢出。

我希望這有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM