Git:移动一个分支使其指向另一个分支

时间:2016-08-08 11:04:08

标签: git branch git-branch master

我遇到以下情况:

-----O
     |
   master
   branch1

然后我不得不对主人进行一些修改:

 -----O-----O-----O
      |           |
   branch1      master

现在我希望branch1与master相同(因此包含我提交的提交):

-----O-----O-----O
                 |
               master
               branch1

我不知道合并是否是实现这一目标的正确方法。 我应该采取什么措施?

编辑:还认为我在branch1与master更新后应该在branch1上提交未提交的更改。所以我需要保持当前的更改,以便稍后在branch1上提交

4 个答案:

答案 0 :(得分:2)

由于branch1引用master祖先提交,因此合并操作不会导致合并提交;相反,Git将简单地向前移动branch1引用,以便它引用与master相同的提交。这称为fast-forward合并。

来自documentation

  

当您尝试将一个提交与一个提交合并时   通过遵循第一个提交的历史记录可以达到提交,   Git通过向前移动指针简化了事情,因为有   没有不同的工作要合并在一起 - 这被称为“快进”。

所以,在你的情况下,你可以简单地说:

git checkout branch1
git merge master

将使branch1指向与master相同的提交。

更新:请注意,在进行合并之前,您需要拥有clean working directory。如果您在branch1中有未提交的更改(即您有dirty working directory),则应首先使用stash命令将其存储在git-stash中:

git stash save --include-untracked -m "Work in progress"

保存更改并清理工作目录后,即可继续合并。之后,您可以通过以下方式从存储中恢复文件:

git stash pop

将把这些文件放回工作目录并从存储中删除它们。此时,您可以选择在任意数量的提交中提交它们。

答案 1 :(得分:0)

在这个简单的例子中,你可以用简单的方法做到:

git branch -f branch1 master

来自git help branch

git branch [--set-upstream | --track | --no-track] [-l] [-f] <branchname> [<start-point>]

编辑:保留未提交的更改:

git stash
git checkout master
git branch -f branch1 master
git checkout branch1
git stash pop

现在,未提交的更改将再次未提交(或未添加,具体取决于之前的内容)。

答案 2 :(得分:0)

这看起来是rebase的工作,所以我会做以下事情:

git commit -m 'your work on branch 1'    # from branch1
git rebase master                        # also from branch1

这会将新提交从master提取到branch1,然后在master的提交之上重播您的提交。

从功能上讲,将master合并到branch1也应该没问题,但是你可能无法保持两次提交的解析,而是以单个合并提交结束。

答案 3 :(得分:0)

如果您的工作目录是干净的(否则请执行'存储'),您将处于一个特殊情况,即'rebase','merge'和'reset --hard'完全按照您的意愿执行... < / p>