关于git checkout
结论。
移动到远程追踪分支的命令是’git checkout origin/branch_name’。
移动到本地工作分支的命令是’git checkout branch_name’。
远程跟踪分支是本地分支。
※远程追踪分支 = 跟踪分支
起因和经过
在远程分支上进行checkout时,有时会对origin和分支名称之间是否需要’/’感到困惑。
git checkout命令需要使用’/’,而git push命令不需要使用’/’。
git checkout origin/ブランチ名
git push origin ブランチ名
这个斜杠(/)的存在与否有什么意思?
有疑問
① 如果使用 `git checkout origin/ブランチ名`,无法切换到远程分支吗?
② 如果使用 `git push origin/ブランチ名`,无法推送到远程分支吗?
③ 尽管有 `origin/` 和分支名连在一起,为什么无法将 `origin/ブランチ名` 识别为单独的分支名?
为了解决这个疑问,我们将进行验证。
验证
在本地能否使用“git checkout origin 分支名称”命令来进行checkout操作?
从#2分支的状态中执行git checkout origin develop/#1
masahiro@MacBook-Air project % git branch
develop/#1
* develop/#2
master
masahiro@MacBook-Air project % git checkout origin develop/#1
error: pathspec 'origin' did not match any file(s) known to git
error: pathspec 'develop/#1' did not match any file(s) known to git
→ 发生错误。
翻译成中文:错误:路径规范“origin”与Git识别的文件不匹配。错误:路径规范“develop/#1”与Git识别的任何文件都不匹配。
用”git push origin/分支名称”可以进行push吗?
从develop/#1的状态下执行’git push origin/develop/#1’。
masahiro@MacBook-Air project % git branch
* develop/#1
develop/#2
master
masahiro@MacBook-Air project % git push origin/develop/#1
fatal: 'origin/develop/#1' does not appear to be a git repository
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
→出现错误
翻译后为:致命错误:’origin/develop/#1’似乎不是一个git仓库
致命错误:无法从远程仓库读取
请确保您拥有正确的访问权限
存储库存在。
验证结果:两个因素都发生错误,无法执行。
考察 – 审查、观察、调查、探究、研究、评估
在这个错误中,它似乎认为’origin’和’develop/#1’在git中不存在。难道它把疑问③中的’origin/branch name’识别为一个单独的分支名吗?
在第2个错误中,无法从远程存储库读取’origin/develop#1’。
→这意味着它在远程不存在?
因为我还不能接受,所以我开始寻找能让我接受的文章。
调查结果
我从下面的文章中得到了满意的解释。
以下是关于git checkout的相关信息:https://www-creators.com/archives/1388#git_checkout
以下是关于git fetch、merge和pull的说明:https://qiita.com/wann/items/688bc17460a457104d7d
以下是关于跟踪分支的说明:https://yu8mada.com/2018/08/11/how-to-confirm-and-set-up-tracking-branches-in-git/#content-1
下面是摘要。
基于Git的规范,不能直接切换工作分支并直接更新远程分支。
‘origin/分支名’并非远程分支,而是远程追踪分支,
我发现远程追踪分支(跟踪分支)是本地分支。
作为一个git初学者,我曾以为使用’git checkout origin/分支名’可以切换到远程分支,但实际上切换的是本地存在的远程跟踪分支。
如果知道了这个区别,我认为在执行命令时就不会因为’/’而困扰。
而且这次我也了解到了跟踪分支的存在。
我觉得需要进一步加深对这方面的知识的了解。