我可能错过了一些东西。请指出我的错误。
我有一个存储库。
中继被称为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'
$
建议非常欢迎。
答案 0 :(得分:1)
为了切换分支,您不需要重置。你需要checkout
所需的分支
git fetch --all --prune
git checkout dev-17
这将检查 dev-17 分支
答案 1 :(得分:1)
reset
将您当前的HEAD
移动到指定的提交(并--hard
相应地更新工作文件。)
如果您的HEAD
为master
并且您运行$ git reset --hard origin/dev-17
,则将 master
移至与origin/dev-17
相同的提交。您正在将引用移动到另一个提交,而不仅仅是更新本地文件。您仍然在master
,git 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