簡體   English   中英

將Git工作流程從合並切換為變基:如何清理合並提交歷史記錄?

[英]Switching Git workflow from merge to rebase: how to clean up a merge commit history?

我正在嘗試擁有一個良好的Git工作流程來為一個開源項目(Endless Sky)做貢獻,但是當我開始學習時,並沒有得到一個干凈的歷史。 我的工作流程現在是:

  1. upstream/master這里
  2. 我的叉子在這里 我開始使用GitHub Desktop,但開始切換到命令行。
  3. 我的fork的master應該是upstream/master鏡像。 我開發的每個功能都有一個分支,它是由我的主人創建的,並且我使用自己的(本地) alpha和(推送) beta分支來組合我的功能以進行測試/播放。

我的問題出在我的分叉master上: This branch is 15 commits ahead of endless-sky:master. 沒有文件更改; 它是合並提交消息。 這對我來說似乎很丑陋,所以我做了一些閱讀,特別是文章停止使用'git pull':更好的工作流程 ,我切換到了重新定級/快速轉發。

但是在這種情況下清除現有合並提交歷史記錄的最佳方法是什么? 它也觸及了我的一些功能分支(請參閱: feature/JammingHaywire ),我不想提交PR,因為有意義的提交被無意義的合並提交淹沒了。

我讀過其他各種問題,也不清楚我是否最好:

  1. 刪除/重制master -這樣安全嗎,尤其是對於GitHub?
  2. 試圖做一個git rebase -i [which commit?]回到某個點-似乎不起作用。 試了一下回0facf00 ,一些犯我分叉很久以前,我的合並提交哈希值(例如3be4d97看到在GitHub上)不會在文本文件中下降顯示出來。 最終結果保持不變。
  3. 在做我還沒想到的事情嗎? 首先是我要嘗試的“良好實踐”嗎?

我的問題出在我的派生大師上:“這個分支比endless-sky:master提前15次提交。” 沒有文件更改; 它是合並提交消息。

讓我們從這里開始:

重置您的fork master到無盡的天空/ master

假設您已經克隆了叉子:

cd /path/to/fork/clone
git checkout master
git remote add-url endless-sky /url/of/endless-sky
git fetch endless-sky
git reset --hard endless-sky/master
git push --force

現在,簽出您的任何功能分支(您打算從中創建PR),並將其重新建立在您的master分支(現在也代表endless-sky/master )上

git checkout my_feature_branch
git rebase master
git push --force

第一個選擇是刪除和重新創建master ,這可能是最簡單的。 這是清理方法:

  1. 如果還沒有,請切換到master

     git checkout master 
  2. 創建備份分支,以防萬一:

     git branch backup 
  3. 重置master以匹配upstream master 這實際上與刪除和重新創建分支(選項1)相同,但只需要一個命令:

     git reset --hard upstream/master 
  4. 推力:

     git push --force-with-lease origin master 

    強制性警告 :由於重建基准會重寫歷史記錄,因此對於在此分支上工作的任何其他人來說,這可能是危險的/具有破壞性的。 確保與與您合作的任何人清楚地交流所做的事情。 由於這是個人叉子,因此我認為這對您來說不是問題。

現在,您的master分支是最新的upstream/master ,因此在GitHub上,您應該看到:

This branch is even with endless-sky:master.

如果以后發現缺少任何內容,可以查看backup的歷史記錄以找到它。

要修復類似損壞的任何功能分支,請執行以下操作:

git checkout myfeature
git rebase -i master

您的編輯器將打開,您將看到提交列表。 刪除包含多余合並的所有行,然后保存並退出。 再次使用--force-with-lease推送。

暫無
暫無

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

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