在git中,我一直在提交到master分支,当我真的应该在一个功能分支上工作时。我想改变它,以便master回到它开始的地方,而master上的内容现在在一个新的分支上。基本上,我的提交历史记录如下:
A -- B -- C -- D -- E
| |
| master
origin/master
我希望它看起来像这样:
master
|
A -- B -- C -- D -- E
| |
| new_branch
origin/master
如何更改主要点?
答案 0 :(得分:68)
git stash
git branch new_branch
git reset --hard origin/master
git checkout new_branch
git stash pop
另一种可能性(更快,无需存储和重置):
git checkout -b new_branch master
git branch -f master origin/master
答案 1 :(得分:19)
$ 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
此示例显示将主服务器移动到其他提交。请注意,标签允许我们保存旧的主文件,以防万一:)
答案 2 :(得分:3)
转到.git / refs / heads / master,它具有master的哈希值并将其更改为您想要的任何内容。我使用gitg快速找到master的哈希值,然后验证移动是否成功。
答案 3 :(得分:2)
与概述here类似,但更简单,不涉及重置,只需创建一个新的分支,其中master是,然后无痛地删除master,再次检出要移动master的位置并创建一个新的master分支有:
git stash
git checkout -b old_master_was_here
git branch -d master
git checkout origin/master
git checkout -b master
答案 4 :(得分:0)
在当前HEAD处创建一个新分支new_branch
(假设HEAD = master),将master重置为C并再次切换到new_branch
(就SmartGit而言)。
答案 5 :(得分:0)
请注意,在任何给定时间,您都可以使用INSERT INTO [dbo].[doc_exz]
([column_a])
VALUES
(3),
(2);
来更改分支指向的位置,但是在执行此操作之前,必须在树的顶端指定一个名称,否则您的工作将无法访问。因此,这两个命令可以完成
INSERT INTO [dbo].[doc_exz]
([column_a]
,[column_b])
VALUES
(5,1),
(6,NULL);
但是请确保您没有任何未提交的更改,否则所有地狱都会崩溃