无法切换分支。我究竟做错了什么?

Unable to switch branches. What am I doing wrong?

我可能遗漏了什么。请指出我的错误。

我有一个存储库。 主干称为 master(很明显)并且包含许多文件。 我创建了一个名为 dev-17 的分支,并向其中添加了一个文件(名为 file17)。

现在,在基于 Debian 的系统上我这样做:

$ git fetch origin
$ git reset --hard origin/master
HEAD is now at 13e51c7 20150418.2030
$ git clean -f -d
$ git status
# On branch master
nothing to commit (working directory clean)
$

看起来不错。 ls 显示了我期望的所有文件。 然后我做:

$ git fetch origin
$ git reset --hard origin/dev-17
HEAD is now at 145e638 add file17
$ git clean -f -d
$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
nothing to commit (working directory clean)
$

执行 ls 表明添加的 file17 确实存在。所以,显然我在 dev-17 分支上。但是,为什么 git status 说我在 master

现在真正的问题是,dev-17 分支上(编辑:上面的内容似乎并没有真正将我带到 dev-17 分支,所以这个说法是不正确的)当我想看看 file17 是否已经改变时会发生这种情况:

$ git --no-pager diff --name-only dev-17..origin/dev-17 -- ./file17
fatal: bad revision 'dev-17..origin/dev-17'
$

非常欢迎提出建议。

为了切换分支,您不需要进行重置。您需要 checkout 所需的分支

git fetch --all --prune
git checkout dev-17

这将检查 dev-17 分支

reset 将您当前的 HEAD 移动到指定的提交(并且 --hard 相应地更新工作文件)。

如果你的 HEADmaster 而你 运行 $ git reset --hard origin/dev-17,你 移动 master 到与 origin/dev-17 相同的提交。您正在将引用移动到另一个提交,而不仅仅是更新本地文件。正如 git status 告诉您的那样,您仍在 master 上,但是 master 现在是另一个提交(与 origin/dev-17 指向的相同)。

要使用远程更新的提交更新 origin/dev-17 的内容,请使用 git fetch origin dev-17

要更新您的本地文件以反映 origin/dev-17 的内容,您需要 checkout 分支 origin/dev-17

如果你想继续在分支上工作,我建议创建一个本地分支来提交:

git checkout origin/dev-17
git checkout -b dev-17

将提交添加到分支后,您可以将其推送回远程:

git push origin dev-17

(如果您在本地工作时向远程提交了额外的 created/pushed,这将失败。在这种情况下,您需要先 pull,见下文。)


设置完成后,很容易使您的本地分支机构保持最新状态。你想要做的是:

git fetch origin dev-17
git merge origin/dev-17

这可以在一次操作中完成:

git pull origin dev-17

(假设您在本地分支机构 dev-17

转到 Git CMD 并根据需要 运行 以下命令。

如果您是第一次切换使用:git fetch --all

如果您尝试提取最近创建的分支,请使用:git fetch