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

时间:2015-04-19 07:46:22

标签: git branch git-reset

我可能错过了一些东西。请指出我的错误。

我有一个存储库。 中继被称为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'
$

建议非常欢迎。

3 个答案:

答案 0 :(得分:1)

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

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

这将检查 dev-17 分支

答案 1 :(得分:1)

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

如果您的HEADmaster并且您运行$ git reset --hard origin/dev-17,则 master移至与origin/dev-17相同的提交。您正在将引用移动到另一个提交,而不仅仅是更新本地文件。您仍然在mastergit status告诉您,但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

(如果在本地工作时创建/推送了其他提交,则会失败。在这种情况下,您需要先pull,见下文。)


完成设置后,让您的本地分支更新很容易。你想要做的是:

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

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

git pull origin dev-17

(假设您在当地分行dev-17

答案 2 :(得分:1)

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

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

如果您要拉最近创建的分支,请使用:git fetch