git checkout刚刚删除了我的存储库吗?

时间:2017-09-21 16:04:35

标签: git git-branch git-merge git-commit git-checkout

  

一般性问题:如何在一个地方(即自己)单独使用Git,以便将更改从新分支合并到主分支,或者使用checkout从分支转移到分支,不会t删除新分支和主分支中的所有内容?

     

或者如果想要避免git删除所有内容而不留下备份,那么使用远程存储库(例如GitHub)本身是否必要,而不仅仅是本地存储库?

具体案例:
我的本地git存储库masterequality有两个分支,位于文件夹.../ps/ps3中。我在分支equality,我想将我的更改合并到master

所以首先我做git merge并返回错误:

fatal: No remote for the current branch.

然后我想我需要在master而不是equality将我的更改从equality合并到主人。所以我接下来要做的是:git checkout master。这产生了以下错误:

error: Your local changes to the following files would be overwritten by checkout: ps3/ps3.aux ps3/ps3.log ps3/ps3.pdf ps3/ps3.synctex.gz ps3/ps3.tex Please commit your changes or stash them before you switch branches. Aborting

我将错误解释如下:没有发生任何事情,我仍然在equality分支中,如果我希望equality中的更改成为equality,我应该再次提交master分支当我使用它们重写equality分支时保存,而不是从早期版本的.../ps/ps3重写git。

我的终端提示表明我仍在目录equality和分支git commit -am "Finished correct proof"中,所以我认为没有任何错误。当我5 files changed, 155 insertions(+), 29 deletions(-) rewrite ps3/ps3.pdf (72%)时,我没有收到错误消息。

equality

  

现在它是这个命令,或紧随其后的命令,它删除了所有,而不仅仅是master和该分支中的每个提交,还有.../ps/ps3和分支中的每个提交,甚至是存储库的整个文件夹git merge

我做了equality(我还在分支fatal: No remote for the current branch.),我收到了错误消息:

equality

这让我感到很困惑,因为为什么我需要遥控器才能做任何事情?它与我目前的情况有什么关系?我猜这只是一种神秘的抱怨方式,将master的变化合并到master需要从git checkout master完成。

接下来我做Switched to branch 'master'并且没有错误,只是equality。尽管没有出现任何错误,我仍然认为这可能是删除所有内容的步骤,因为在执行此操作后,我的终端不再显示我在masterps3,所以看起来必须至少删除整个存储库,即其中的所有文件和包含文件夹。

我的终端仍然说我在一个名为git merge的目录中,即使它没有像它应该的那样列出一个git分支。接下来我做了git merge equality然后fatal: Unable to read current working directory: No such file or directory,但都返回了错误:

ls

然后我做了cd ..,没有输出,然后我做了ls -aps3,目录ps没有被列为{{1}的子目录}}。即存储库的包含文件夹,以及它中的所有内容和每个分支都以某种方式被删除。我甚至不知道有可能用Git做到这一点 - 我认为如果我搞砸了可能发生的最糟糕的事情是master分支中的早期版本会覆盖更新的版本equality分支,然后我可以多次执行git revert以取回equality分支。我认为git checkout只是在分支之间移动,而不是删除所有内容。

This page使git checkout master看起来像我期望它做的那样,即切换到master分支,而不是删除所有内容。另外this page使得git checkout看起来应该有助于恢复文件,为什么它会删除我的所有文件?

1 个答案:

答案 0 :(得分:2)

首先,语法:您是正确的,git merge需要在目标分支上运行(然后您必须为其指定要引入的分支的名称)。

发生了什么:当您运行git checkout master时,您位于工作副本的子目录中,并删除了该子目录,因为master没有任何子目录文件那里。 ("无法读取当前工作目录"当shell在其中时删除目录时会发生什么。)

好消息:什么都没有丢失。你只是仍然在存储库中,而不是在它外面看它曾经占据过的空间。现在是时候运行git merge equality了,你会看到ps3回来。

坏消息:您提交了生成的文件(.aux.log等)。 Don't do that;也许你应该在合并之前回到equalitygit commit --amend它们不存在。 (合并后很难很好地修复它。)