我不小心在開發分支上提交了一般更改master,不久前已經將其合并到該分支:
* HEAD
* ...
*
* 2c884bc Updated Gradle Root Project Name
* 4926f6a Merge branch 'wip-dev-Logger'
|\
| * 43161fb Revised Logger
| * 13c8303 Switched to JDA 4.4.0_351
* | 599c72e Added Answerer interface
|/
* 4b0dcb8 Switched to Java 17
*
* ...
*
是否可以在13c8303不破壞合并/分支歷史記錄的情況下將提交從開發轉移到主分支?
它應該看起來像這樣:
* HEAD
* ...
*
* 2c884bc Updated Gradle Root Project Name
* 4926f6a Merge branch 'wip-dev-Logger'
|\
| * 43161fb Revised Logger
* | 13c8303 Switched to JDA 4.4.0_351
* | 599c72e Added Answerer interface
|/
* 4b0dcb8 Switched to Java 17
*
* ...
*
uj5u.com熱心網友回復:
git 中的單個提交是不可變的,因為它們由以下哈希值標識:
- 整個代碼樹
- 提交訊息、日期和作者資訊
- 在合并提交的情況下標識其父級或多個父級的哈希
同時,分支可以隨意更改,因為它們只是指向特定提交的可移動指標。
所以你展示的結果是不可能的,因為如果由 hash 標識的提交13c8303有不同的父級,它會有不同的散列。由43161fb和標識的提交4926f6a也將具有不同的父項,因此散列不同 - 等等所有提交從您要創建的歷史點“轉發”。
可以使用git rebase命令創建替代歷史記錄,但是每個作業副本以及您所做更改后的每個分支都需要更新以參考新的歷史記錄。如果你做對了,它看起來像這樣:
* HEAD
* ...
*
* 56fa78b Updated Gradle Root Project Name
* 12cd34e Merge branch 'wip-dev-Logger'
|\
| * ef78ab9 Revised Logger
* | 12ab34d Switched to JDA 4.4.0_351
* | 599c72e Added Answerer interface
|/
* 4b0dcb8 Switched to Java 17
*
* ...
*
如果您嘗試使用原始歷史記錄中較晚的分支而不將其重新建立在新歷史記錄上,那么在您更改提交之后,您最終會得到所有提交的兩個版本 - 并且在您嘗試合并時可能會發生很多沖突他們一起回來。
uj5u.com熱心網友回復:
根據@IMSop 的回答,我想出了以下解決方案:
- 就我而言,除此之外沒有其他分支,
master而且我還沒有將我的任何錯誤推送到遙控器上
如果您有一個未合并的分支指向一個較新的提交,請確保您知道如何處理即將到來的額外困難。
git rebase --root --interactive --rebase-merges- 在編輯器中更改提交順序
...
pick 4b0dcb8 Switched to Java 17
label branch-point
pick 13c8303 Switched to JDA 4.4.0_351 <--- COMMIT TO MOVE ---
pick 43161fb Revised Logger
label wip-dev-Logger
reset branch-point # Switched to Java 17
pick 599c72e Added Answerer interface
merge -C 4926f6a wip-dev-Logger # Merge branch 'wip-dev-Logger'
pick 2c884bc Updated Gradle Root Project Name
...
到
pick 4b0dcb8 Switched to Java 17
label branch-point
pick 43161fb Revised Logger
label wip-dev-Logger
reset branch-point # Switched to Java 17
pick 599c72e Added Answerer interface
pick 13c8303 Switched to JDA 4.4.0_351 <--- COMMIT TO MOVE ---
merge -C 4926f6a wip-dev-Logger # Merge branch 'wip-dev-Logger'
pick 2c884bc Updated Gradle Root Project Name
...
保存并關閉編輯器。如果您沒有觸及移動提交中可能與此合并沖突的任何檔案,一切都應該正常作業。
確認使用
git log --graph --oneline:
* HEAD
* ...
*
* c5d2985 Updated Gradle Root Project Name
* 31a26e4 Merge branch 'wip-dev-Logger'
|\
| * 13e0a2c Revised Logger
* | 5cebef6 Switched to JDA 4.4.0_351
* | 599c72e Added Answerer interface
|/
* 4b0dcb8 Switched to Java 17
*
* ...
*
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/380595.html
標籤:混帐 git合并 git-rebase
