2010-12-05 48 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来更改远程回购。

相关问题