![](/img/trans.png)
[英]Does git reset HEAD~ on master automatically merge a branch merge conflict
[英]Git branching and reset head of master
混帐
步骤-1:我对本地计算机上的master分支做了一些未提交的更改。
步骤-2:后来我决定为这些更改创建单独的分支,因为我注意到这些更改要大得多,并且已成为一项功能。
步骤-3:我创建了一个分支开关,对该分支进行了更改。
步骤04:现在我想将我新创建的分支合并到master,但是我在master中仍然有一些未提交的操作,我尝试重设我的origin / master分支,我所有新分支的更改和master分支的更改都消失了:(
我还注意到我在新创建的分支中所做的更改,它们也出现在master分支中。
我以为本地分支和master是不同步的分支。 请帮助我理解为什么会发生这种情况的概念。
在创建和签出new
分支时,git会带入当前工作目录和索引。 因此,此时, master
和new
仍然相同。
当您提交new
,它将与master
有所不同。 您提交到new
中的内容不会提交到master
。 他们不同步。
也就是说,如果你有未跟踪文件和你正在改变他们,而在new
分支,这些变化将在工作目录无论你是在保持现有master
或new
分支。 切换分支不会影响未跟踪的文件-它们似乎是同步的。
那可以解释为什么您会经历“同步”。 也许同步是未跟踪的文件。 如果在您提交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.