我們使用Feature Branch Workflow,基本上是我們創建分支機構的中央存儲庫。當我們在錯誤修正和小片的工作,我們將創建一個分支關老爺的:爲什麼我們的Git存儲庫中缺少代碼,是否可以通過rebase解決?
git checkout master
git pull
git merge master_bug123
git branch -d master_bug123
:
git checkout -b master_bug123 master
當我們正在與我們進行提交,我們下面將其在合併回
有時我們有大項目,我們需要所有的工作。例如,使得響應網站:
git checkout -b responsive master
git push -u origin responsive
團隊然後其他成員可以提出自己的特性分支像大師:
git pull
git checkout -b responsive_fixmenu responsive
目前,我們在這裏工作,然後到合併更改以供其他人使用:
git checkout responsive
git pull
git merge responsive_fixmenu
# possibly fix conflicts, add, commit, etc
git push -u origin responsive
有時我們發現代碼正在丟失。我最初的想法是,這可能歸咎於我們其中一人錯誤地解決衝突。但在調查時,我有點困惑。一個名爲core.js
的文件丟失了大量的代碼。在文件中包含一個字符串mb-search
,我想我可以用它作爲git show
和grep
的一部分,以查看它何時出現並被刪除。使用git log core.js
我給了一個提交列表,然後我使用該列表來執行諸如git show abc1234:path/to/core.js | grep -c 'mb-search'
之類的操作,以輸出該文件中出現該提交的次數,但是顯示給我的不是簡單的0,0,0,1 ,1,1,甚至是0,0,1,1,0(它指出它被錯誤地刪除了),而是一個非常隨機的0,0,1,0,1,0,0,1等等
這將我帶到我的問題的第一部分。難道我說得對,如果另一個用戶走來,並進行了更改,使得提交(姑且稱之爲abc1111),然後做了git pull
(在其他合併推動變化),它創建了一個合併提交(姑且稱之爲abc2222 - 其中MB-搜索已經合併了),然後提交abc1111將不包含mb-search
代碼,後來合併與abc2222,它一直推後?如果是這樣,如何可靠地判斷某些代碼是否被刪除?
這導致我到rebase
。在我們以與master
分支相同的方式使用responsive
分支之前,我們只是直接對responsive
進行更改,提交和推送。當時我們默認使用rebase
。在這一點上,我們發現我們遇到了很多問題,因爲我相信這是可以預料的。作爲使用git的初學者,試圖掌握基本知識,我們決定只使用merge
而不是rebase
,我們認爲我們沒有問題。但是現在我看到了上述問題,我想知道是否可以通過使用rebase
來解決上述問題,但只能在特定條件下解決(至少可以解決上述問題)。
我認爲在我們對主要responsive
存儲庫進行重新定義之前,所有提交都到處都是,代碼缺失等,一般來說,你期望從尚未正確掌握rebase規則的人那裏得到什麼。但是,這將是合法使用rebase,並且安全嗎?
git checkout -b responsive_somefeature responsive
# write code, make commits
git pull --rebase responsive
git checkout responsive
git merge responsive_somefeature
我說得對不對地說,這將基地responsive_somefeature
所有我的新作品上的responsive
的HEAD
,這樣,當我把它合併在這將是線性的?最後的merge
是否正確,或者應該/可能是rebase
也是?
太棒了,謝謝。順便說一下,當你說'base'時,你的意思是第一次出現? – LeonardChallis 2014-11-06 15:08:17
示例中的'base'只是您想要更改的共同祖先,以及功能分支。 – Useless 2014-11-06 15:53:34
謝謝@無用。你還介紹一下你提出的改版工作流程和我寫的內容之間的區別嗎? – LeonardChallis 2014-11-07 07:18:41