这里是git的新手。我有一个功能分支(feature/123
),该分支最初是从develop
切下的,可以使用,然后推送到GitHub。
我刚刚开始对该分支进行一些本地更改,然后我决定要保留所做的更改(而不是将其完全丢弃),并从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的状态完全相同。 我该怎么做?
答案 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