2010-12-05 29 views

回答

2

要移動到以前的版本:

git checkout <version hash>

做你的工作在這裏,並與

git commit --amend

提交它要返回

git checkout master

+1

這是行不通的。 `git reset --hard`將他的主分支指向舊的提交,所以`git checkout master`什麼也不做。 – jtdubs 2010-12-05 16:32:11

+0

誠然,感謝您的糾正。 +1給你,也會刪除我的回答,但我認爲`commit --amend`步驟足夠有用 – 2010-12-06 02:22:25

+0

什麼是'--amend`? – Shafizadeh 2016-12-31 18:54:39

8

你可以只需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不夠。它使這一切都變得非常簡單。

35

你的問題不清楚。我認爲你問的是:

git push -f origin $old_commit_id:master

是什麼內容呢?它會將$old_commit_id提交到origin作爲originmaster分支的新主管。

如果這是你想要的,你根本不需要觸摸你當地的master分支。

+0

這對我造成了「主(非快進)」故障。 @jtdubs解決方案工作。 – 2013-01-30 19:49:50

64

如果要做到這一點,將主服務器恢復先前的承諾:

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 
7

假設像這樣的提交圖表:

| (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) 
7

使用git reset --hard <old commit number>

它將HEAD重置爲這個老犯。

此外,您還需要使用git push -f origin來更改遠程回購。

相關問題