我怎样才能在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)。