如何在git中更改哪些提交主指向?

时间:2010-11-12 15:14:44

标签: git

在git中,我一直在提交到master分支,当我真的应该在一个功能分支上工作时。我想改变它,以便master回到它开始的地方,而master上的内容现在在一个新的分支上。基本上,我的提交历史记录如下:

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

我希望它看起来像这样:

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

如何更改主要点?

6 个答案:

答案 0 :(得分:68)

  • 存储您未提交的:git stash
  • 创建一个新分支:git branch new_branch
  • 将master重置为origin / master:git reset --hard origin/master
  • 再次结帐新分行:git checkout new_branch
  • 取消暂停您的更改:git stash pop
如果您的工作树干净,则不需要使用stash / unstash。只需确保工作树中没有任何更改,因为重置时会删除这些更改--hard


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

  • 结帐新分行:git checkout -b new_branch master
  • 创建一个'新'主分支并将其指向origin / 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);

但是请确保您没有任何未提交的更改,否则所有地狱都会崩溃