【问题标题】:Did git checkout just delete my repository?git checkout 只是删除了我的存储库吗?
【发布时间】:2018-03-03 01:51:10
【问题描述】:

一般问题:如何才能单独在本地(即自己)使用 Git,以便将来自新分支的更改合并到主分支,或使用结帐从一个分支移动到另一个分支? t 删除新分支和主分支中的所有内容?

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

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

所以首先我做了git merge,这返回了错误:

fatal: No remote for the current branch.

然后我想我需要在 master 而不是 equality 中才能将我从 equality 的更改合并到 master 中。所以我接下来要做的是: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 重写 git。

我的终端提示显示我还在目录.../ps/ps3和分支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'。尽管没有出现任何错误,但我仍然认为这可能是删除所有内容的步骤,因为这样做之后,我的终端不再显示我在 equalitymaster,所以它似乎必须在至少删除了整个存储库,即其中的所有文件和包含的文件夹。

我的终端仍然说我在一个名为 ps3 的目录中,尽管它没有列出应该有的 git 分支。所以接下来我做了git merge 然后git merge equality 但都返回了错误:

fatal: Unable to read current working directory: No such file or directory

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

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

【问题讨论】:

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


    【解决方案1】:

    首先,语法:你说得对,git merge 需要在目标分支上运行(然后你必须给它你要引入的分支的名称)。

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

    好消息:没有任何损失。您仍然在存储库中,而不是在它之外查看它曾经占用的空间。现在是运行git merge equality 的时候了,你会看到ps3 回来了。

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

    【讨论】:

    • 天哪,我现在就想嫁给你。这太棒了
    • 要排除生成的文件,将**/*.aux**/*.log等放在存储库根目录下的.gitignore文件中?
    • 是的;您可以在开头省略**/。不过,这只影响新的adds。从你的 current 提交中删除它们(你还没有merged!)是git rm ps3/ps3.aux ...,然后是我提到的--amend
    猜你喜欢
    • 2012-06-29
    • 2019-05-27
    • 1970-01-01
    • 2016-01-22
    • 1970-01-01
    • 2012-11-28
    • 2012-11-28
    • 2016-06-22
    • 1970-01-01
    相关资源
    最近更新 更多