我遇到以下情况:
-----O
|
master
branch1
然后我不得不对主人进行一些修改:
-----O-----O-----O
| |
branch1 master
现在我希望branch1与master相同(因此包含我提交的提交):
-----O-----O-----O
|
master
branch1
我不知道合并是否是实现这一目标的正确方法。 我应该采取什么措施?
编辑:还认为我在branch1与master更新后应该在branch1上提交未提交的更改。所以我需要保持当前的更改,以便稍后在branch1上提交
答案 0 :(得分:2)
由于branch1
引用master
的祖先提交,因此合并操作不会导致合并提交;相反,Git将简单地向前移动branch1
引用,以便它引用与master
相同的提交。这称为fast-forward合并。
当您尝试将一个提交与一个提交合并时 通过遵循第一个提交的历史记录可以达到提交, 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>