GIT中
步骤-1:我在本地机器上对master分支进行了一些未提交的更改。
步骤-2:后来我决定为这些更改创建单独的分支,因为我注意到这些更改更大并且已成为一个功能。
步骤-3:我创建了一个分支切换到该分支进行了我的更改。
步骤04:现在我想将我新创建的分支合并到master,但是我仍然很少在master中提交,我试图重置我的origin / master分支和我的所有新分支更改和主分支更改是走了:(
我还注意到我在新创建的分支中所做的改变,他们也出现在主分支中。
我认为本地分支和master是非同步分支。请帮助我理解为什么会发生这种情况的概念。
答案 0 :(得分:1)
当你创建并签出new
分支时,git会带来你当前的工作目录和索引。所以此时master
和new
仍然相同。
当您加入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
这可能只会拯救你。