一般性问题:如何在一个地方(即自己)单独使用Git,以便将更改从新分支合并到主分支,或者使用checkout从分支转移到分支,不会t删除新分支和主分支中的所有内容?
或者如果想要避免git删除所有内容而不留下备份,那么使用远程存储库(例如GitHub)本身是否必要,而不仅仅是本地存储库?
具体案例:
我的本地git存储库master
和equality
有两个分支,位于文件夹.../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
。尽管没有出现任何错误,我仍然认为这可能是删除所有内容的步骤,因为在执行此操作后,我的终端不再显示我在master
或ps3
,所以看起来必须至少删除整个存储库,即其中的所有文件和包含文件夹。
我的终端仍然说我在一个名为git merge
的目录中,即使它没有像它应该的那样列出一个git分支。接下来我做了git merge equality
然后fatal: Unable to read current working directory: No such file or directory
,但都返回了错误:
ls
然后我做了cd ..
,没有输出,然后我做了ls -a
和ps3
,目录ps
没有被列为{{1}的子目录}}。即存储库的包含文件夹,以及它中的所有内容和每个分支都以某种方式被删除。我甚至不知道有可能用Git做到这一点 - 我认为如果我搞砸了可能发生的最糟糕的事情是master
分支中的早期版本会覆盖更新的版本equality
分支,然后我可以多次执行git revert
以取回equality
分支。我认为git checkout
只是在分支之间移动,而不是删除所有内容。
This page使git checkout master
看起来像我期望它做的那样,即切换到master
分支,而不是删除所有内容。另外this page使得git checkout
看起来应该有助于恢复文件,为什么它会删除我的所有文件?
答案 0 :(得分:2)
首先,语法:您是正确的,git merge
需要在目标分支上运行(然后您必须为其指定要引入的分支的名称)。
发生了什么:当您运行git checkout master
时,您位于工作副本的子目录中,并删除了该子目录,因为master
没有任何子目录文件那里。 ("无法读取当前工作目录"当shell在其中时删除目录时会发生什么。)
好消息:什么都没有丢失。你只是仍然在存储库中,而不是在它外面看它曾经占据过的空间。现在是时候运行git merge equality
了,你会看到ps3
回来。
坏消息:您提交了生成的文件(.aux
,.log
等)。 Don't do that;也许你应该在合并之前回到equality
和git commit --amend
它们不存在。 (合并后很难很好地修复它。)