所以我asked a question yesterday关于git中的变基,并得到了一些关于该怎么做的好答案。然而,当我继续进行时,我遇到了一些我不理解的问题。
快速概述:
我从另一个分支Branch2
分支出来(Branch1
)。 Branch1
是远程的,并且在我从中分支之后有许多提交。所有这些提交都没有被压扁。与此同时,我开始在Branch2
进行更改。现在我完成了我的更改,并且必须在Branch2
之上重新Branch1
。
当我在git status
中Branch2
时,它列出了我已更改的所有文件(这似乎是正确的)。但是,当我执行git checkout Branch1
和git status
时,它会再次列出相同的文件。我不明白这一点,我的印象是每个分支都像一个本地化的环境,并没有显示其他分支的变化。
另一件令我头晕目眩的事情是 - Branch1
向前推进,因为我从中扩展了。在重新定位之前,我想更新Branch1
的本地副本,以便我Branch2
中的更改在Branch1
的最新提交之后得到重新定位,因此我git checkout Branch1
和git pull
。但是我得到了:
error: Your local changes to the following files would be overwritten by merge:
file...
Please, commit your changes or stash them before you can merge.
Aborting
我不明白:
branch2
git status
中Branch1
显示的更改已完成?Branch1
上提交并推送我的更改,那么git pull
,我的提交将放在哪里,因为所有先前的提交,包括Branch1
中我已经分支的提交被压扁了。 答案 0 :(得分:1)
当我在
Branch2
中执行git状态时,它会列出我已更改的所有文件(这似乎是正确的)。
分支是指向提交的指针。 git status
显示已修改但未提交的文件。也许它似乎对你而言,但在你提交更改之前,检查一个不同的分支是一个冒险的操作。
但是当我执行
git checkout Branch1
和git status
时,它会再次列出相同的文件。
这是因为未提交的更改不在分支中,这意味着它们不在存储库中。它们只在工作树中。
我不明白这一点,我的印象是每个分支都像一个本地化的环境,并没有显示其他分支的变化。
您的印象是正确的。
我头脑发热的另一件事是 -
Branch1
向前推进,因为我从中扩展了。
由于您未在Branch2
中创建任何提交,因此从技术上讲,您没有"扩展"从中。 Branch2
只是Branch1
过去的提交,而不是真正的分支。在Branch2
上提交您的更改,它将分支出来。
但是我得到了:
error: Your local changes to the following files would be overwritten by merge: file... Please, commit your changes or stash
嗯,git
正努力不破坏你的工作。它建议你做什么才能安全。
如果我理解你的愿望,你必须运行的命令如下:
# go back to Branch2
git checkout Branch2
# commit the changes in Branch2
git add .
git commit
# get the recent commits on Branch1 from the remote server
# there is no need to merge them
git fetch origin
# rebase Branch1 on top of the remote version of Branch1
# git pull produces the same result if you didn't commit anything on Branch1
git rebase origin/Branch1 Branch1
# rebase the commit(s) you created in Branch2 on top of Branch1
git rebase origin/Branch1 Branch2
# now you are on Branch2 and Branch1 is in the past of Branch2
祝你好运!
答案 1 :(得分:0)
在切换回branch2
之前,您似乎未能提交branch1
。您将把所有未提交的数据传回上一个分支。您有两个选择:首先commit
,运行git checkout .
以撤消它们,或在切换前运行git stash
。