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

Git:移动一个分支以使其指向另一个分支,git,branch,git-branch,master,Git,Branch,Git Branch,Master,我的情况如下: -----O | master branch1 然后我不得不对master做一些更改: -----O-----O-----O | | branch1 master 现在我希望branch1处于主节点的同一点(因此包含我所做的提交): 我不知道合并是否是实现这一目标的正确方法。 我应该采取什么步骤 编辑:还考虑到在BrANCH1与MARKER最新的情况下,在BANCH1上应提交的未提交更改。因此,我需要保持

我的情况如下:

-----O
     |
   master
   branch1
然后我不得不对master做一些更改:

 -----O-----O-----O
      |           |
   branch1      master
现在我希望branch1处于主节点的同一点(因此包含我所做的提交):

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


编辑:还考虑到在BrANCH1与MARKER最新的情况下,在BANCH1上应提交的未提交更改。因此,我需要保持当前更改不变,以便稍后在branch1提交。在这种简单的情况下,您可以通过以下简单的方式完成:

git branch -f branch1 master
从git帮助分支的

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

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

这看起来是一项重基作业,因此我将执行以下操作:

git commit -m 'your work on branch 1'    # from branch1
git rebase master                        # also from branch1
这将把新的提交从
master
拉入
branch1
,然后在
master
的提交之上重放您的提交


从功能上讲,将
master
合并到
branch1
中也应该可以,但是您可能无法维持两次提交的解析,而是以一次合并提交结束。

因为
branch1
引用的提交是
master
的祖先,合并操作不会导致合并提交;相反,Git只需向前移动
branch1
引用,以便它引用与
master
相同的提交。这称为合并

从:

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

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

git checkout branch1
git merge master
这将使
branch1
指向与
master
相同的提交

更新:请注意,在进行合并之前,需要先进行一次更新。如果您在
branch1
中有未提交的更改(即,您有),则应首先使用以下命令将其存储在中:

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

git stash pop

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

如果您的工作目录是干净的(否则请执行“隐藏”),则您将处于一种特殊情况,其中“重设基础”、“合并”和“重设-硬”会完全执行您想要执行的操作

我忘了提到我有未提交的更改,应该在branch1上提交,但在branch1与master一起更新之后。您建议的方法是否会保留当前更改,以便稍后在branch1上提交?否,但您可以在进行合并之前将它们隐藏起来。查看我的更新答案。好的,我明白了,所以我签出branch1,隐藏更改,将branch1合并到master中并取消对吗?几乎–您将
master
合并到
branch1
;您希望将
branch1
master
进行相同的提交,因此将
master
合并到
branch1
。这样想:当使用
git merge
时,您所在的分支是目的地(即到
branch1
),而您指定的分支是源(即从
主节点
)。我忘了提到我有未提交的更改,应该在branch1上提交,但在branch1更新到主节点之后。您所建议的方法是否会保留当前更改不变,以便稍后在branch1上提交?在这种情况下,最好先提交(这样,如果您处理混乱,您将始终需要修复并重试),然后重新设置基础,如果您对提交不完全满意,修改它或者在最后“reset--soft”我忘了提到我有未提交的更改应该提交到branch1上,但是在branch1与master更新之后。您提出的方法是否会保留当前更改不变,以便稍后在branch1上提交?@Jacopograsi没有问题,只需提交您的工作,然后再进行重新基础。哦,等等,但这将使新提交也在master上(我猜),但我希望它们仅在branch1上提交不,不会。它将只在
branch1
上进行提交。我忘了提到我有未提交的更改应该在branch1上提交,但在branch1与master更新之后。您建议的方法是否会保留当前更改,以便稍后提交?
git checkout branch1
git merge master
git stash save --include-untracked -m "Work in progress"
git stash pop