我想回滾到以前的提交,然後發佈該代碼,然後回到最新的提交。想要將我的主人更改爲較舊的提交,我該如何做?
也就是說,我的主人正在指向一個較舊的提交版本,所以我可以調整該版本,然後我想返回到最初的一次提交。
我該怎麼做?
我想回滾到以前的提交,然後發佈該代碼,然後回到最新的提交。想要將我的主人更改爲較舊的提交,我該如何做?
也就是說,我的主人正在指向一個較舊的提交版本,所以我可以調整該版本,然後我想返回到最初的一次提交。
我該怎麼做?
要移動到以前的版本:
git checkout <version hash>
做你的工作在這裏,並與
git commit --amend
提交它要返回主:
git checkout master
你可以只需git checkout <commit-id>
,做任何你需要做的,然後git checkout master
回到新的代碼。
如果你確實需要修改的舊代碼將其釋放,那麼你或許應該:
git checkout -b my_release <commit-id>
... prepare code for release ...
... release code ...
git checkout master
git merge my_release
而且,我不能推薦git flow不夠。它使這一切都變得非常簡單。
你的問題不清楚。我認爲你問的是:
git push -f origin $old_commit_id:master
是什麼內容呢?它會將$old_commit_id
提交到origin
作爲origin
的master
分支的新主管。
如果這是你想要的,你根本不需要觸摸你當地的master
分支。
這對我造成了「主(非快進)」故障。 @jtdubs解決方案工作。 – 2013-01-30 19:49:50
如果要做到這一點,將主服務器恢復先前的承諾:
git checkout master~1 # Checkout previous commit on master
git checkout -b new_master # Create branch for new master
git branch -D master # Delete old master
git branch -mv new_master master # Make new_master master
或者:
git reset --hard master~1 # Reset current branch to one commit ago on master
假設像這樣的提交圖表:
| (A) ---------> (B) ----------> (C)
| ^
| (master)
你要先結帳master
並創建一個分支,指向master
curre ntly是:
git checkout master
git branch pointer master
看起來應該是現在這個樣子:
| (A) ---------> (B) ----------> (C)
| ^
| (HEAD, master, pointer)
現在,你已經在master
,我們會告訴master
分支向後移動一個承諾:
git reset master~1
現在,master
應該移回一個空格,但pointer
分支仍處於最近的提交中:
| (A) ---------> (B) ----------> (C)
| ^ ^
| (HEAD, master) (pointer)
此時,您可以將master
推送到遠程或任何地方,然後將其快速合併回pointer
分支。您可以在該點殺pointer
分支:
git push origin master
git merge --ff-only pointer
git branch -D pointer
決賽:
| (A) ---------> (B) ----------> (C)
| ^ ^
| [ origin/master ] (HEAD, master)
使用git reset --hard <old commit number>
它將HEAD重置爲這個老犯。
此外,您還需要使用git push -f origin
來更改遠程回購。
這是行不通的。 `git reset --hard`將他的主分支指向舊的提交,所以`git checkout master`什麼也不做。 – jtdubs 2010-12-05 16:32:11
誠然,感謝您的糾正。 +1給你,也會刪除我的回答,但我認爲`commit --amend`步驟足夠有用 – 2010-12-06 02:22:25
什麼是'--amend`? – Shafizadeh 2016-12-31 18:54:39