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