2016-12-03 157 views
0

我以Git開始,我不完全理解分支如何工作。 我開始了基本的項目,我做了以下內容:試圖瞭解Git分支

  1. 開始在 '' 地方分支,創建2個文件:的1.txt2.txt。添加這些文件。提交和推送。 => origin/master現在有2個文件。
  2. 創建從 '本地/主=頭/主' 正在進行的分支(WIP)一個工作=> wip_12_pushed(它應具有文件1 & 2)
  3. 仍然在本地主,創建兩個文件(3, 4))但甚至不添加它們。
  4. 創建從「本地/主」 =>wip_34_not_added分公司(我想這應該還是剛剛文件1,2,...,3,4-尚未添加)在本地主
  5. ,創建兩個文件(5,6),添加它們,提交它們並且將它們推送
  6. 創建從 '本地/主'=>wip_files_56_pushed分支(所以這應該具有文件-1,2,5,6-推動)在本地主
  7. ,創建兩個文件(7,8),添加他們,提交他們,但不要推他們
  8. 創建本地分支從'本地/主= wip_78_committed_only(所以這應該有文件1,2,5,6(所有推),不知道約5, 6.他們是否應該出現在承諾的新分支?)

問題我'我必須明白的是,當我切換到這些不同的分支時,我不能在我的Windows命令行上看到任何區別嗎?甚至去我的Windows文件夾,所有文件仍然存在,所以我怎麼知道哪個文件屬於哪個分支?

更有甚者,我切換到分支「wip_56_pushed」,這是做什麼用的文件7和8,然後我的確從該分支git push --set-upstream origin wip_56_pushed不知何故之前創建的文件7,8這是在狀態只提交到本地/主機和'wip78_committed'被推送到遠程原點/主?我期待這個'wip_56_pushed'分支不知道新文件嗎?

+0

請提供您發出的確切命令。 – Vampire

+0

我唯一使用'git push --set-upstream origin wip_56_pushed'的命令。所有其他操作都是在Windows UI中使用TortoiseGit完成的。基本上,我不知道哪些文件屬於哪個分支(因爲它們都在同一個窗口文件夾中)。我不明白爲什麼當我使用上面的命令將分支'wip_56_pushed'推送到我的原始/主文件接收到的文件7和8(它們已提交但僅在其他分支中)? – mickael

+0

啊,我想我現在知道你的問題了。 – Vampire

回答

0

git push --set-upstream origin wip_56_pushed不推動wip_56_pushedorigin/master,但是到origin/wip_56_pushed。由於您之前已將文件7和8添加到主文件中,並且可能將其推送,當然它們存在於origin/master中。如果你想推動你的本地wip_56_pushedorigin/master,請做git push --set-upstream origin wip_56_pushed:master

至於哪些文件屬於哪個分支,這很簡單。如果檢出分支X,則所有未被跟蹤的文件(git status)都是您檢出的分支的一部分。

+0

謝謝,我一直在練習和理解更多。還有兩個疑問:1 - 在哪裏爲不同的分支存儲本地文件(因爲它們可能不同)? 2-我保留了origin/master,並且創建了一個新的origin/78_branch(在這個分支中,我推送了兩個新文件-7,8)。如果我現在在本地/主服務器上,我如何才能從origin/78_branch中取出和合並更改?我正在做'git merge origin/78_branch master',我得到'已經是最新的'(但我沒有得到新的文件7,8)。如果我做'git pull origin 78_branch',我已經得到了最好的結果。分支 - > FETCH_HEAD.But沒有新文件 – mickael

+0

** 1 **'.git'內部Git非常高效地存儲文件在'objects'中的所有差異。這就是VCS的意義,如果所有分支的所有文件都會立即在那裏,那麼這個意義不大。 ;-) ** 2 **如果沒有命令來重現您的情況或回購,很難回答。尤其像你之前說過的,你已經添加了7和8來掌握。 – Vampire

+0

1.我明白了,謝謝。 2-我在第一次解釋後從頭開始一個新項目。在這一個中,我創建了一個主文件,添加了一些文件(1到4),然後我從那裏創建了一個分支,在新分支中保留添加更多文件(5-8),我將所有這些文件推送到一個新的遠程分支(78_remote)。而現在,我在本地檢出了原來的主人(有文件1-4)。我正在嘗試將origin/78_remote與local/master合併並獲取新文件(5-8),但我所做的命令只是說local/master是最新的,這是不正確的,因爲那裏缺少文件... – mickael

0

如何從一個分支切換到另一個分支?你用了很多次..這可能不是在這一點是必要的,但沒有提到結帳甚至單一的時間,這主要是用於分支之間切換..可以共享以下

1)git reflog

2)git ls-tree --name-only master

的輸出

3)git ls-tree --name-only < branch name >(分享每個分支的結果)

+0

我當時在正確的分支上進行推送。我通過烏龜前端切換它們,但是這是在引擎蓋下進行'git分支結賬'。當我嘗試合併時,在某些分支中仍然存在缺失的問題,但現在,我並未嘗試創建許多分支,直到我完全理解爲止。 – mickael

+0

oh..ok,請使用'git rev-list remote_name/master^$(git rev-list master --all)'獲得2遠程和本地...之間的差異,這總是會導致問題..使用遠程分支'git branch -r'的名字 – Girish

+0

乾杯的人,我會記下來比較下一次我看到奇怪的問題。 – mickael