git checkout -b 分支名称 与 git checkout 分支名称 的效果

Jor*_*ter 1 git

我不小心进入了

git checkout -b develop
Run Code Online (Sandbox Code Playgroud)

代替

git checkout develop
Run Code Online (Sandbox Code Playgroud)

尽管开发分支已经存在,但它说它已经创建了。

这是否影响了分支中的代码develop?我找不到任何关于此的明确文档。

Jak*_*uld 5

\n

这是否影响了开发分支中的代码?我找不到任何\n关于此的明确文档。

\n
\n

没有。你的develop分支位于幽冥世界,你的下一步选择将决定可能发生的事情。

\n

据我了解,情况如下:如果您develop之前已经签出,您将无法运行此命令:

\n
git checkout -b develop\n
Run Code Online (Sandbox Code Playgroud)\n

响应将是\xe2\x80\x94,我刚刚在本地计算机上进行测试以确认\xe2\x80\x94将是:

\n
fatal: A branch named 'develop' already exists.\n
Run Code Online (Sandbox Code Playgroud)\n

那么您的案例在git checkout -b develop运行时发生了什么?简单的。您之前没有结账develop。因此 git 正在执行该命令告诉它执行的操作:创建一个名为 的本地分支develop

\n

现在,如果您在那里做了一些事情,然后将其推送到原点。好吧,如果你强迫这种情况的话,那就会变得一团糟。请继续阅读。

\n

为了进一步澄清问题,如果您直接克隆 git 存储库而不执行任何其他操作,然后在该存储库目录中运行以下命令,如果运行以下命令,您将看到类似的内容git branch -a

\n
* master\n  remotes/origin/HEAD -> origin/master\n  remotes/origin/develop\n  remotes/origin/master\n
Run Code Online (Sandbox Code Playgroud)\n

请注意*主控及其remote/origin/后面的项目。这是理解你做了什么以及它为何能够发生的关键。您会看到,在您实际签出之前,它只是作为本地克隆中的develop远程引用(关键点)存在。但是,当您执行此操作后,如果您随后git checkout develop运行,结构将如下所示:git branch -a

\n
* develop\n  master\n  remotes/origin/HEAD -> origin/master\n  remotes/origin/develop\n  remotes/origin/master\n
Run Code Online (Sandbox Code Playgroud)\n

请注意,现在您已*连接到develop这意味着这是当前签出的分支。

\n

理解git的关键是有本地副本,也有远程引用。任何过去的内容都master不会\xe2\x80\x99 被检查,直到你真正检查它的那一刻。

\n

除此之外,让 \xe2\x80\x99s 说你在没有本地的情况下做了一个git checkout -b developfrom 。好的,太好了!现在对您的代码进行一些处理,然后执行. 您很可能会收到以下消息:masterdevelopgit pull

\n
There is no tracking information for the current branch.\nPlease specify which branch you want to merge with.\nSee git-pull(1) for details\n\n    git pull <remote> <branch>\n\nIf you wish to set tracking information for this branch you can do so with:\n\n    git branch --set-upstream-to=origin/<branch> develop\n
Run Code Online (Sandbox Code Playgroud)\n

这基本上意味着您的本地develop未连接到远程develop,因此 git 需要帮助来澄清问题。像这样的事情应该会提示您出现问题。

\n

可是等等!你还没有100%安全。如果您这样做,事情可能会变得可怕git push origin develop。如果您确实有一个develop在远程命名的分支,您很可能会用这个新分支覆盖它。因此,如果可以的话,请避免这种情况。但在某些情况下,响应可能是这样的:

\n
To git@github.com:CoolCoderDude4Life/The-Best-Repo.git\n ! [rejected]        develop -> develop (non-fast-forward)\nerror: failed to push some refs to 'git@github.com:CoolCoderDude4Life/The-Best-Repo.git\nhint: Updates were rejected because the tip of your current branch is behind\nhint: its remote counterpart. Integrate the remote changes (e.g.\nhint: 'git pull ...') before pushing again.\nhint: See the 'Note about fast-forwards' in 'git push --help' for details.\n
Run Code Online (Sandbox Code Playgroud)\n

此时您会看到,您确实收到了另一个警告,表明出现了问题。但与此同时,您可以简单地匆忙阅读本文并按照说明进行操作,BOOM工作就会以某种方式丢失。

\n

可能比您正在寻找的答案更长。这是关于版本控制系统如何成为安全网的一个不错的教学时刻,但安全网可能会崩溃。因此,良好的编码习惯需要成为工作流程的一部分。

\n