這是我的場景:有兩個用戶,他們都克隆了同一個存儲庫(所以這意味着他們有相同的遠程)。 一個在本地創建分支,假設'branch1'開始一些開發/提交,最後希望將分支推送到遠程。 這是可能的。兩個用戶試圖推動兩個分支同名
但是,第二個創建一個同名的分支('branch1'),提交了一些內容並最終推送; 這可能嗎?他應該運行哪些命令才能工作?在推動之前這足夠拉動了嗎?
謝謝。
這是我的場景:有兩個用戶,他們都克隆了同一個存儲庫(所以這意味着他們有相同的遠程)。 一個在本地創建分支,假設'branch1'開始一些開發/提交,最後希望將分支推送到遠程。 這是可能的。兩個用戶試圖推動兩個分支同名
但是,第二個創建一個同名的分支('branch1'),提交了一些內容並最終推送; 這可能嗎?他應該運行哪些命令才能工作?在推動之前這足夠拉動了嗎?
謝謝。
首先,這聽起來很冒險,可能會導致意外刪除或合併代碼。我認爲一個更好的場景是第一個人創建分支並推動它,然後第二個人將分支拉下並開始工作。
不過,我想一種方式做到這一點的是,第二個人能取下來的歷史,然後在遠程分支合併到自己的本地分支,然後把他們的分支了。
git fetch
git checkout branch1
git merge origin/branch1
git branch -u origin/branch1
git push
從這一刻起,第二個人應該讓他們的本地分支跟蹤相同的遠程分支並完全合併和集成。
這兩個用戶實際上在同一個分支上工作,所以所有的限制都應該適用。
這種合作的最佳實踐有點主觀。什麼我就像重新啓動我的工作在遠程,然後將一些提交的補丁推到遠程。
一般來說,這應該沒問題,因爲無論爲了用戶一個和b推入,其他的可以拉,並把它們合併起來。這:
usera$ git push
userb$ git pull
userb$ git push
會導致類似:
C1 -- C2 -- ... <master
|\
| a1 -- a2 -- a3 <user a branch
\ >- ab4 <remote branch (merge commit)
b1 -- b2 -- b3 <user b branch
這真的給用戶一個和b工作主的本地副本,然後不得不合並的結果沒有什麼不同。
第二個用戶的推送被拒絕,因爲該分支不是最新的。當他們檢查他們的狀態時,他們的狀態會說分支已經發生分化,他們在x提交之前,在y提交之後。 x提交將是自兩個分支共同合併基礎以來提交的數量。 y提交將是第二個用戶分支上不在推送分支上的分支。
第二個用戶需要進行合併/重新分配操作才能在推送之前同步分支。這不應該是一個問題。
沒有要求推送到遠程的本地分支名稱和分支名稱相同。這對於這種情況非常有用,尤其是與「命名空間」分支結合使用時。您的用戶可以做這樣的事情:
git push origin branch1:<username>/branch1
,這將導致在origin
遠程兩個不同的分支,即使他們本地分配的分支名稱是相同的。然後,這將允許每個用戶git fetch
其他用戶分支也進行比較。除了一些特定的「知名」分支名稱(master
,dev
,test
,...等),做這樣的事情實際上是一個非常有用的工作流程...