我有這個問題,我正在為我的代碼開發一個新功能,但不小心我在 dev 分支中撰寫了我的代碼并提交了我的更改(我必須創建一個新分支)。
我需要將這些更改放入 feature_branch 并將 dev 恢復到之前的提交。
我正在考慮從 dev 創建一個分支,然后恢復 dev,但我做得不好。
uj5u.com熱心網友回復:
幾個重要的點:
- git 中的提交是不可變的
- 提交指向零個或多個“父母”,并且總是通過向后跟蹤這些來檢查歷史
- 分支只是一個指向特定提交的指標,從那里可以到達其他提交
- 分支可以自由移動以指向您想要的任何提交
所以,你的歷史看起來像這樣(向后的箭頭代表每次提交中記錄的“父母”):
A <--B <--C <--D
^
|
(develop)
你希望它看起來像這樣:
A <--B <--C <--D
^ ^
| |
(develop) (feature_branch)
因此,首先,檢查您更改的開發后,運行git branch feature_branch,給出:
A <--B <--C <--D
^
|
(develop, feature_branch)
然后使用 找到提交 C 的實際提交散列(develop 應該指向的地方)git log,并用于git reset --hard the_commit_hash_you_found將 develop 指向該提交。(重要提示:這將清除所有未提交的更改。git stash在開始之前提交或使用它們!)
A <--B <--C <--D
^ ^
| |
(develop) (feature_branch)
重要提示:如果您已將帶有更改的開發版本推送到共享服務器,或者其他任何人已經基于它進行了任何操作,那么還有更多作業要做。但是,如果您只是在本地完成此操作而未在任何地方推送,則以上就是您所需要的。
uj5u.com熱心網友回復:
如果我理解正確,那么您已經向 dev 分支而不是功能分支進行了兩次提交。現在您想創建一個包含所有功能提交的新功能分支。并且您想從 dev 分支中洗掉這些提交。
此時,您可以從 dev 創建一個新分支。它將在新分支中提交所有功能。從您的開發分支運行以下命令。
git checkout -b {newFeatureBrnach}
現在要從 dev 分支恢復您的提交,首先您需要找到這些提交的哈希值。回到你的開發分支:
git checkout {devBranch}
列出所有最近的提交
git log
在日志中找到您的提交并記下哈希。然后您可以使用 revert 洗掉這些提交。
git revert {hash}
您必須運行它兩次才能恢復兩次提交。
請注意, git revert 將在您的 dev 分支上進行更多新提交以撤銷您的更改。如果要從歷史記錄中完全洗掉提交,則必須使用git rebase并強制推送到遠程分支。如果多人在 repo 上作業,這是不可取的。
uj5u.com熱心網友回復:
如果我理解,您可以嘗試使用 git stash。
你必須運行這些命令:
在您的開發分支上:
git stash
在您要作業的分支上:
git checkout
git stash pop
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/313214.html
標籤:混帐
上一篇:比較從一組提交到先前版本的更改
