我怎样才能在git中更改哪些提交主要点?

在混帐,我已经提交到主分支,当真的我应该一直在function分支。 我想改变这个,让主人回到它开始的地方,而主人现在在一个新的分支上。 基本上,我的提交历史如下所示:

A -- B -- C -- D -- E | | | master origin/master 

我希望它看起来像这样:

  master | A -- B -- C -- D -- E | | | new_branch origin/master 

我怎样才能改变主点?

  • 藏起你的未提交: git stash
  • 创build一个新的分支: git branch new_branch
  • 重置主起始/主: git reset --hard origin/master
  • 再次签出新的分支: git checkout new_branch
  • 摆脱你的变化: git stash pop隐藏git stash pop

如果您的工作树是干净的,则不需要藏匿/去除木屑。 只要确保你的工作树没有变化,因为这些将在你复位时被移除–hard


另一种可能性(更快,而不需要存储和重置):

  • 签出一个新的分支: git checkout -b new_branch master
  • 创build一个“新的”主分支,并将其指向origin / master的commit: git branch -f master origin/master
 $ git checkout master $ git reset --hard <commit-id-for-master-to-sit-at> 

例如试试这个

 $ mkdir example; cd example $ git init $ vi testFile.txt (now add "test commit 1" to line 1 of file) $ git add * $ git commit (add message "(+) 1st commit" to git commit) $ vi testFile.txt (now add "test commit 2" to line 1 of file) $ git add * $ git commit (add message "(+) 2nd commit" to git commit) $ vi testFile.txt (now add "test commit 3" to line 1 of file) $ git add * $ git commit (add message "(+) 3rd commit" to git commit) $ $ git tag final_head $ git reset --hard HEAD~1 

这个例子显示移动主人不同的提交。 请注意,标签允许我们保存旧的主人,以防万一:)

转到.git / refs / heads / master,它拥有master的散列,并将其更改为任何你想要的。 我使用gitg快速findmaster的散列,之后validation这个举动是否成功。

就像这里所描述的那样,但是更简单一些,不需要重新设置,只需要在master中创build一个新的分支,然后轻松地删除master,再次checkout你想要移动master的地方并在那里创build一个新的master分支:

 git stash git checkout -b old_master_was_here git branch -d master git checkout origin/master git checkout -b master 

在当前HEAD(假定HEAD = master)上创build一个新的分支new_branch ,将master重新设置为C,并再次切换到new_branch (根据SmartGit)。