Git分支和重置主人的头

时间:2015-02-17 16:48:02

标签: git git-branch

GIT中

步骤-1:我在本地机器上对master分支进行了一些未提交的更改。

步骤-2:后来我决定为这些更改创建单独的分支,因为我注意到这些更改更大并且已成为一个功能。

步骤-3:我创建了一个分支切换到该分支进行了我的更改。

步骤04:现在我想将我新创建的分支合并到master,但是我仍然很少在master中提交,我试图重置我的origin / master分支和我的所有新分支更改和主分支更改是走了:(

我还注意到我在新创建的分支中所做的改变,他们也出现在主分支中。

我认为本地分支和master是非同步分支。请帮助我理解为什么会发生这种情况的概念。

1 个答案:

答案 0 :(得分:1)

分支

之间的“同步”

当你创建并签出new分支时,git会带来你当前的工作目录和索引。所以此时masternew仍然相同。

当您加入new时,它将与master不同。您在new中提交的内容不会提交到master。他们不同步。

也就是说,如果您有未跟踪的文件并且在new分支上对它们进行了更改,那么无论您是在master还是{new,这些更改都将保留在工作目录中{1}}分支。切换分支不会影响未跟踪的文件 - 它们似乎是同步的。

这可以解释为什么你之间经历了“同步”。也许同步是未跟踪的文件。如果在new中结帐master后进行了十几次提交,则工作目录仍会包含任何未跟踪的文件及其更改。

重置

当你运行reset时,git不会破坏你的提交。相反,它会将HEAD和您的当前分支移动到您指定的提交。例如,如果您在new分支上进行了十二次提交,然后 - 仍然在new分支上 - 运行git reset --hard origin/master,那么您的new分支和{{1}现在指向HEAD。结果:您的工作目录将仅包含origin/master中的内容,并且任何未跟踪的文件可能已存在。您似乎丢失了在origin/master上提交的所有提交内容。

重要的是,您没有丢失提交。

您可以使用reflog查看提交。试试这个:

new

这将列出git reflog -10 指向的最后十个提交。它看起来像这样。

HEAD

如果您想在重置和恢复提交之前返回原来的位置,可以通过以下方式检查以前的ok5073x HEAD@{0}: reset: moving to origin/master fc5773d HEAD@{1}: commit: Some message 3b50d9f HEAD@{2}: commit: Some message 1ab5125 HEAD@{3}: commit: Some message 15bee3e HEAD@{4}: checkout: moving from master to new 94ccc72 HEAD@{5}: commit: Some message 30276c1 HEAD@{6}: commit: Some message 15bee3e HEAD@{7}: checkout: moving from new to master 36857b6 HEAD@{8}: commit: Some message b9f0af5 HEAD@{9}: commit: Some message 17ue83e HEAD@{2}: checkout: moving from master to new 位置之一:

HEAD

git checkout 3b50d9f

这可能只会拯救你。