git checkout -b branchname vs git checkout branchname的影响

时间:2014-05-02 20:16:26

标签: git

我不小心进入了

git checkout -b develop

而不是

git checkout develop

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

是否影响了develop分支中的代码?我无法找到任何明确的文件。

3 个答案:

答案 0 :(得分:4)

  

是否影响了开发分支中的代码?我找不到任何东西   清楚的文件。

不。您的develop分支机构位于地下世界,您的下一个选择将确定可能发生的情况。

以下是我理解的交易:如果您之前已经签出develop,则无法运行此命令:

git checkout -b develop

响应将是 - 我刚刚在我的本地机器上测试确认 - 将是:

fatal: A branch named 'develop' already exists.

那么在git checkout -b develop运行时你的情况发生了什么?简单。您之前没有签出develop。所以git正在执行该命令所做的事情:创建一个名为develop本地分支。

现在如果你做了什么&然后把它推到原点。好吧,如果你强迫这种情况,那将是一团糟。请继续阅读。

为了进一步澄清事情,如果你直接克隆git存储库而不做任何其他事情&然后,您在该存储库目录中运行以下命令,如果运行git branch -a

,您将看到类似这样的内容
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/develop
  remotes/origin/master

请注意*主文件和后面的remote/origin/项。这是理解你所做的事情的关键。为什么它能够发生。您会看到,在实际结帐develop之前,它只是作为本地克隆中的远程引用(关键点)存在。但是当你执行git checkout develop时,如果之后运行git branch -a,结构会是这样的:

* develop
  master
  remotes/origin/HEAD -> origin/master
  remotes/origin/develop
  remotes/origin/master

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

理解git的关键是有本地副本&有远程引用。任何超过master的内容在您实际查看之前都不会被检出。

过去,让我们假设您git checkout -b develop来自master而没有本地develop。好,太棒了!现在就你的代码做一些工作&然后做一个git pull。您很可能会收到此消息:

There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details

    git pull <remote> <branch>

If you wish to set tracking information for this branch you can do so with:

    git branch --set-upstream-to=origin/<branch> develop

这基本上意味着您的本地develop未连接到远程develop,因此git需要帮助澄清事情。这样的事情应该让你感到有些不对劲。

但是等等!你还不是100%安全。如果您执行git push origin develop,这可能会让您感到害怕。如果你确实在遥控器上有一个名为develop的分支,你很可能会用这个新分支覆盖它。如果可以,请避免这样做。但在某些情况下,这可能是回应:

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

在这一点上,您会看到另一个警告,即某些事情已经消失。但与此同时,你可以简单地在匆忙中读到这个。按照指示&amp; BOOM 工作以某种方式丢失。

可能比你想要的答案更长。但关于版本控制系统如何成为一个安全网,但安全网可以破解的一个可观的教育时刻。因此,良好的编码习惯需要成为工作流程的一部分。

答案 1 :(得分:2)

最重要的问题是,分支机构是存在于本地还是远程。

我的猜测是它本地不存在,因为你应该收到错误

  

致命:名为'develop'的分支已经存在。

如果确实

如果确实在本地没有必要担心,因为你所做的是从当时活跃的分支创建一个新的本地分支(我猜主人)

只要你不推(我不认为git会允许)你可以毫无问题地删除你的本地分支。

但我总是喜欢安全,所以每当我在git中做一些奇怪的事情并想要撤消它时,我会复制一份我当地的回购“以防万一”。

答案 2 :(得分:1)

  

是否影响了开发分支中的代码?

不,尤其是当该分支位于remotes/origin命名空间(origin/develop)时 您可以通过以下方式检查:

git branch -avvv

您可以使用以下方法将其重置为正确的原点:

git checkout -B develop origin/develop