我刚刚遇到了一个对 Git 来说似乎不合逻辑的情况。我有一个有大量提交的 repo,所以在这个阶段它只有一个分支(master)。
假设这个分支有一个名为MyFile.txt的文件。现在我需要创建一个不同的分支,因为我想对几个文件进行一些更改,而且我不想直接做主分支,所以我运行:
git checkout iss53
Run Code Online (Sandbox Code Playgroud)
现在架构如下所示:
好的,我已经切换到分支iss53,我运行ls -l
和MyFile.txt。其中一项更改包括删除MyFile.txt文件,因此:
git rm MyFile.txt
Run Code Online (Sandbox Code Playgroud)
很好,ls -l
再次运行显示不再有MyFile.txt。所以我切换回主分支:
git checkout master
Run Code Online (Sandbox Code Playgroud)
但是... MyFile.txt文件也消失了。我的逻辑说,如果我删除分支上的文件,应适用只到分支,那么为什么在文件被删除的主分支呢?请注意,我还没有进行任何提交,只是分支。
注意:两张图片均来自Git-scm。
答案在你的问题中:
请注意,我还没有进行任何提交,只是分支。
如果您不提交,更改将始终保存在您的工作目录中。切换分支不会影响您的工作目录,工作目录也不会影响您的最后一次提交。您看到该文件已被删除,但实际上它仅从您的工作目录中删除。如果要清除更改并返回到上次提交,请使用以下命令:
git reset --hard HEAD
Run Code Online (Sandbox Code Playgroud)
所以文件将再次恢复。
也许这对您来说不是逻辑,但这种行为可能很有用。想象一下,您有 2 个分支 :master
和development
,并且development
在将更改移动到 之前,您应该始终工作master
。假设您development
在开始工作之前忘记切换到,然后 - 在您提交之前 - 您意识到您正在使用master
. 解决方法很简单,切换到development
然后提交即可。
归档时间: |
|
查看次数: |
13760 次 |
最近记录: |