簡答
有時。如果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