【发布时间】:2018-03-03 01:51:10
【问题描述】:
一般问题:如何才能单独在本地(即自己)使用 Git,以便将来自新分支的更改合并到主分支,或使用结帐从一个分支移动到另一个分支? t 删除新分支和主分支中的所有内容?
或者,如果想要避免 git 删除所有内容并且不留下任何备份,那么是否有必要使用远程存储库(例如 GitHub),而不仅仅是本地存储库?
具体案例:
我的本地 git 存储库有两个分支,master 和 equality,位于文件夹 .../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'。尽管没有出现任何错误,但我仍然认为这可能是删除所有内容的步骤,因为这样做之后,我的终端不再显示我在 equality 或 master,所以它似乎必须在至少删除了整个存储库,即其中的所有文件和包含的文件夹。
我的终端仍然说我在一个名为 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