繁体   English   中英

Git分支和主复位头

[英]Git branching and reset head of master

混帐

步骤-1:我对本地计算机上的master分支做了一些未提交的更改。

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

步骤-3:我创建了一个分支开关,对该分支进行了更改。

步骤04:现在我想将我新创建的分支合并到master,但是我在master中仍然有一些未提交的操作,我尝试重设我的origin / master分支,我所有新分支的更改和master分支的更改都消失了:(

我还注意到我在新创建的分支中所做的更改,它们也出现在master分支中。

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

分支之间的“同步”

在创建和签出new分支时,git会带入当前工作目录和索引。 因此,此时, masternew仍然相同。

当您提交new ,它将与master有所不同。 您提交到new中的内容不会提交到master 他们不同步。

也就是说,如果你有未跟踪文件和你正在改变他们,而在new分支,这些变化将在工作目录无论你是在保持现有masternew分支。 切换分支不会影响未跟踪的文件-它们似乎是同步的。

那可以解释为什么您会经历“同步”。 也许同步是未跟踪的文件。 如果在您提交new checkout master后进行了十次提交,则工作目录中仍将包含所有未跟踪的文件及其更改。

重启

当您运行reset ,git不会破坏您的提交。 而是,它将HEAD和您的当前分支移动到您指定的提交。 例如,如果您在new分支上进行了十二次提交,然后-在仍在new分支上-进行了git reset --hard origin/master ,则new分支和HEAD现在将指向origin/master 结果:您的工作目录将仅包含origin/master目录中的内容,并且任何未跟踪的文件可能已经存在。 看来您已经失去了对new所做的所有提交。

重要的是,您尚未丢失提交。

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

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

要么

git checkout HEAD{1}

这样可能会救您。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM