Git 分支并重置 master 的头部
Git branching and reset head of master
Git
步骤-1:我在本地机器上对 master 分支做了一些未提交的更改。
步骤-2:后来我决定为这些更改创建单独的分支,因为我注意到这些更改要大得多并且已成为一项功能。
步骤-3:我创建了一个分支切换到那个分支进行了我的更改。
第 04 步:现在我想将我新创建的分支合并到 master,但我在 master 中仍然有几个未提交,我试图重设我的 origin/master 分支和我所有新的分支更改和master 分支更改消失了:(
我还注意到我在新创建的分支中所做的任何更改它们也出现在 master 分支中。
我以为local branch和master是unsync branch。请帮助我理解为什么会发生这种情况的概念。
"Syncing" B运行ches
当您创建并签出 new
b运行ch 时,git 会带来您当前的工作目录和索引。所以在这一点上,master
和new
还是一样的。
当您投入 new
时,它会偏离 master
。您提交到 new
的内容不会提交到 master
。它们不同步。
就是说,如果您有未跟踪的文件并且在 new
b运行ch 上对它们进行了更改,那么无论您是否在master
或 new
b运行ch。切换 b运行ches 不会影响未跟踪的文件 - 它们看起来是同步的。
这可以解释为什么你经历了 "syncing" 之间。也许同步是未跟踪的文件。如果在 new
中进行了十几次提交后你检出 master
,工作目录将仍然有任何未跟踪的文件及其更改。
重置
当您 运行 reset
时,git 不会破坏您的提交。相反,它将 HEAD
和您的 current b运行ch 移动到您指定的提交。例如,如果您在 new
b运行ch 上进行了十几个提交,然后 - 同时仍在 new
b运行ch - 运行 git reset --hard origin/master
,你的 new
b运行ch 和 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
如果您想 return 到重置和恢复提交之前的位置,您可以通过 运行ning 检出您以前的 HEAD
位置之一:
git checkout 3b50d9f
或
git checkout HEAD{1}
这可能会拯救你。
Git
步骤-1:我在本地机器上对 master 分支做了一些未提交的更改。
步骤-2:后来我决定为这些更改创建单独的分支,因为我注意到这些更改要大得多并且已成为一项功能。
步骤-3:我创建了一个分支切换到那个分支进行了我的更改。
第 04 步:现在我想将我新创建的分支合并到 master,但我在 master 中仍然有几个未提交,我试图重设我的 origin/master 分支和我所有新的分支更改和master 分支更改消失了:(
我还注意到我在新创建的分支中所做的任何更改它们也出现在 master 分支中。
我以为local branch和master是unsync branch。请帮助我理解为什么会发生这种情况的概念。
"Syncing" B运行ches
当您创建并签出 new
b运行ch 时,git 会带来您当前的工作目录和索引。所以在这一点上,master
和new
还是一样的。
当您投入 new
时,它会偏离 master
。您提交到 new
的内容不会提交到 master
。它们不同步。
就是说,如果您有未跟踪的文件并且在 new
b运行ch 上对它们进行了更改,那么无论您是否在master
或 new
b运行ch。切换 b运行ches 不会影响未跟踪的文件 - 它们看起来是同步的。
这可以解释为什么你经历了 "syncing" 之间。也许同步是未跟踪的文件。如果在 new
中进行了十几次提交后你检出 master
,工作目录将仍然有任何未跟踪的文件及其更改。
重置
当您 运行 reset
时,git 不会破坏您的提交。相反,它将 HEAD
和您的 current b运行ch 移动到您指定的提交。例如,如果您在 new
b运行ch 上进行了十几个提交,然后 - 同时仍在 new
b运行ch - 运行 git reset --hard origin/master
,你的 new
b运行ch 和 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
如果您想 return 到重置和恢复提交之前的位置,您可以通过 运行ning 检出您以前的 HEAD
位置之一:
git checkout 3b50d9f
或
git checkout HEAD{1}
这可能会拯救你。