将分离的头固定在重命名的git分支上

时间:2019-03-07 02:50:17

标签: git github

这里是git的新手。我有一个功能分支(feature/123),该分支最初是从develop切下的,可以使用,然后推送到GitHub。

我刚刚开始对该分支进行一些本地更改,然后我决定要保留所做的更改(而不是将其完全丢弃),并从GitHub当前提供的分支版本重新开始。

所以我决定:

  1. 提交我的更改(我想保留并可能-尽管不太可能-返回)
  2. 重命名我的功能分支
  3. 拉起原点(GitHub)上的feature/123分支

所以我:

git add .
git commit -m "Saving changes made thus far"
git branch -m feature/123-OLD
git checkout origin/feature/123

当我这样做时,我看到了:

$ git checkout origin/feature/123
Note: checking out 'origin/feature/123'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b <new-branch-name>

HEAD is now at 8877c28... 123: did some stuff

现在现在当我查看当前分支时,我看到:

$ git branch
* (HEAD detached at origin/feature/123)

开发

所有这些“头顶分离”的东西都让我毛骨悚然!

我想要做的就是拥有一个名为feature/123的本地分支,该分支与GitHub的状态完全相同。 我该怎么做?

2 个答案:

答案 0 :(得分:2)

这里的前三个命令都很不错:

  
git add .
git commit -m "Saving changes made thus far"
git branch -m feature/123-OLD
  

最后一个将名称feature/123更改为名称feature/123-OLD(当然,首先假设您在名为feature/123的分支上)。

最后一个命令不是错误,它不是您想要的命令:

  
git checkout origin/feature/123
  

您想要的是:

git checkout feature/123

这会环顾您(本地)的分支名称,找到名为feature/123的任何东西(它已经不存在了-feature/123-OLD存在,但是那不是相同),然后调用git checkout的“执行我的意思”功能。

此功能说:嗯,我找不到您想要的分支。我想也许您对我来说意味着要创建一个分支!我能找到一个像origin/feature/123的远程跟踪名称,例如feature/123吗?如果找不到任何一个或两个或更多,我将抱怨并失败。但是,如果我能找到恰好一个,我将创建一个 feature/123,指向与远程跟踪名称相同的提交!

当然,它只会找到一个,因此它将创建feature/123。当它完成创建feature/123时,它将默认将其上游设置为origin/feature/123。这就是checkout执行我的意思或DWIM模式,实际上就是您的意思。

答案 1 :(得分:0)

您可以只签出所需的分支

git checkout feature/123