我有一個私人git存儲庫,用於跟蹤個人項目。在使用源代碼控制之前,我也有這個項目的副本。我想將這些副本添加到此存儲庫的歷史記錄中。由於只有我有權訪問存儲庫,所以我應該能夠重寫歷史記錄,而不會遇到常見問題。在git中添加歷史
這樣做的最好方法是什麼?我應該創建一個新的空白項目並連續添加舊項目,然後重播當前存儲庫,還是有其他替代方法?如果我這樣做,這會導致遠程回購問題(我正在使用bitbucket)?
我有一個私人git存儲庫,用於跟蹤個人項目。在使用源代碼控制之前,我也有這個項目的副本。我想將這些副本添加到此存儲庫的歷史記錄中。由於只有我有權訪問存儲庫,所以我應該能夠重寫歷史記錄,而不會遇到常見問題。在git中添加歷史
這樣做的最好方法是什麼?我應該創建一個新的空白項目並連續添加舊項目,然後重播當前存儲庫,還是有其他替代方法?如果我這樣做,這會導致遠程回購問題(我正在使用bitbucket)?
「我應該創建一個新的空白項目,然後添加舊的 項目,然後重播當前的存儲庫嗎?」
是的。
假設「預歷史記錄」合併到現有的歷史記錄,您可以將兩個歷史記錄與兩個git命令一起移植。從你的Git倉庫內,這條命令:
git --git-dir=/path/to/original/.git log -m -p --reverse --first-parent --binary --pretty=email | git am --keep-non-patch --whitespace=fix
這是一種很難看,所以這裏是古怪的,但明顯(而且仍然可以運行,只要你拷貝&粘貼的所有功能於一身)格式:
git --git-dir=/path/to/original/.git \
log -m -p --reverse --first-parent --binary --pretty=email |
git am --keep-non-patch --whitespace=fix
之後運行「git log」命令以確保一切正確。一旦你感到高興,我建議刪除或重命名現有的bitbucket回購,並將其推入其位置。注意事項#1:「git log --first-parent」將所有分支去掉,並從歷史記錄中合併,因此結果只是一個單一的提交線性序列。 (關於--first-parent:GIT: How can I prevent foxtrot merges in my 'master' branch?和https://bit-booster.blogspot.ca/2016/02/no-foxtrots-allowed.html的更多閱讀材料)。注意事項#2:「git am」討厭空提交(例如git commit --allow-empty),所以如果你有任何這些,你將不得不把程序分成三個步驟:1 。git log> git_am.log。 2.從「git_am.log」中刪除空的補丁。 3. cat git_am.log |混帳我
以下是有關「混帳日誌」的一些注意事項上面的選項:
-m
Include patches caused by merge commits.
-p
Show patches in the "git log" output.
--reverse
Reverse "git log" ordering (since we want oldest-to-newest).
--first-parent
Only include 1st parent of merge commits.
--binary
Include binary-diffs in output.
--pretty=email
Have "git log" output its data in the "email" format
that "git am" is expecting.
我離開仰視「混帳上午」選項作爲一個練習的讀者(如「混帳幫助上午「)。
重寫歷史記錄會對遙控器造成問題,因爲它需要強制推送,而其他的則無法快速前進。只要你確定,那麼有很多方法可以完成你想要做的事情。最好的將取決於我的想法。 –
@JeffPuckettII:是的,我可以 - 沒有其他人,只有我有權限訪問。 – Charles