简答
有时。如果branch_name
已存在,则git checkout -B <branch_name>
执行重置。
详细
为什么会这样,到底是什么?
正如你所指出的,git checkout -B <shared>
复位shared
到HEAD
承诺,并签出shared
。这到底是什么呢?你当前HEAD
- 点
shared
提交。 (这回答你的第一个问题)。 - 清空您最近添加的索引中的所有内容。
- 结帐
shared
。
换句话说,您将shared
重置为匹配feature
。下面是展示你是如何前checkout -B
一个例子:
> git log --oneline --decorate --all --graph
* d0d0d0d (HEAD, feature) Some commit message.
* e0e0e0e Some commit message.
* f0f0f0f Some commit message.
* g0g0g0g Some commit message.
* h0h0h0h Some commit message.
* i0i0i0i Some commit message.
| * z0z0z0z (origin/shared) Some commit message.
| * y0y0y0y (origin/shared) Some commit message.
| * x0x0x0x (origin/shared) Some commit message.
| ---- 120 more commits ----
| * w0w0w0w (origin/shared) Some commit message.
| * v0v0v0v (origin/shared) Some commit message.
| * u0u0u0u (origin/shared) Some commit message.
| /
|/
* a0a0a0a (shared) Some commit message.
* b0b0b0b Some commit message.
* c0c0c0c Some commit message.
下面是你怎么样了checkout -B
后:
> git checkout -B shared
> git log --oneline --decorate --all --graph
* d0d0d0d (HEAD, feature, shared) Some commit message.
* e0e0e0e Some commit message.
* f0f0f0f Some commit message.
* g0g0g0g Some commit message.
* h0h0h0h Some commit message.
* i0i0i0i Some commit message.
| * z0z0z0z (origin/shared) Some commit message.
| * y0y0y0y (origin/shared) Some commit message.
| * x0x0x0x (origin/shared) Some commit message.
| ---- 120 more commits ----
| * w0w0w0w (origin/shared) Some commit message.
| * v0v0v0v (origin/shared) Some commit message.
| * u0u0u0u (origin/shared) Some commit message.
| /
|/
* a0a0a0a Some commit message.
* b0b0b0b Some commit message.
* c0c0c0c Some commit message.
shared
现在都从feature
的变化,你的shared will have 6 different commits that
产地/共享`,同样它将有126个不同的提交比你的。
在这种情况下,'重置'具有不同的含义吗?
重置的含义与以往一样。你基本上做了以下内容:
git checkout shared
git reset --mixed feature
一个良好的修复
所有我想做的就是拉下共享和功能合并。有没有办法解决这个问题?
@ kdopen的评论暗示了一个很好的解决方法。尽管reset
上的fetch
和--hard
选项都是可选的(请参阅有关该问题的评论以获取详细信息)。这是我修改的修复程序。
git checkout shared
git reset origin/shared
这应该让你处于这个位置,你可以按照你的意愿合并你的feature
分支。
* d0d0d0d (feature) Some commit message.
* e0e0e0e Some commit message.
* f0f0f0f Some commit message.
* g0g0g0g Some commit message.
* h0h0h0h Some commit message.
* i0i0i0i Some commit message.
| * z0z0z0z (HEAD, shared, origin/shared) Some commit message.
| * y0y0y0y (origin/shared) Some commit message.
| * x0x0x0x (origin/shared) Some commit message.
| ---- 120 more commits ----
| * w0w0w0w (origin/shared) Some commit message.
| * v0v0v0v (origin/shared) Some commit message.
| * u0u0u0u (origin/shared) Some commit message.
| /
|/
* a0a0a0a Some commit message.
* b0b0b0b Some commit message.
* c0c0c0c Some commit message.
你基本上强制更新'共享'指向'功能',进一步修改它。通过reflog恢复似乎是适当的。 – 2015-02-18 00:05:19
如果你只想让你的'共享'分支符合'origin/shared',只要做'git checkout shared && git fetch && git reset --hard origin/master' – kdopen 2015-02-18 00:28:08
@kdopen你上面的建议只是使我的本地''共享''分支匹配远程。然后我可以像正常一样在''feature'中合并?最后一个命令是''git reset --hard origin/shared'' – Jeff 2015-02-18 01:24:04