Git工作流指南(一)

一臭挽、集中式工作流

有兩個(gè)開(kāi)發(fā)者小明和小紅,看他們是如何開(kāi)發(fā)自己的功能并用git工作流來(lái)協(xié)作的

有人先初始化好中央倉(cāng)庫(kù)

所有人克隆(fork)中央倉(cāng)庫(kù)

下一步哩都,各個(gè)開(kāi)發(fā)者通過(guò)git clone命令創(chuàng)建整個(gè)項(xiàng)目的本地拷貝

小明開(kāi)發(fā)功能

在小明的本地倉(cāng)庫(kù)中贱枣,他使用標(biāo)準(zhǔn)的Git過(guò)程開(kāi)發(fā)功能:編輯典徊、暫存(Stage)和提交。

git status # 查看本地倉(cāng)庫(kù)的修改狀態(tài)
git add # 暫存文件
git commit # 提交文件
git diff #查看本地的所有修改
git checkout file/. ##撤銷文件更改

這些命令生成的是本地提交撵术,小明可以按自己需求反復(fù)操作多次背率,而不用擔(dān)心中央倉(cāng)庫(kù)上有了什么操作。

小紅開(kāi)發(fā)功能

與此同時(shí),小紅在自己的本地倉(cāng)庫(kù)中用相同的編輯退渗、暫存和提交過(guò)程開(kāi)發(fā)功能移稳。和小明一樣,她也不關(guān)心中央倉(cāng)庫(kù)有沒(méi)有新提交会油; 當(dāng)然更不關(guān)心小明在他的本地倉(cāng)庫(kù)中的操作个粱,因?yàn)樗斜镜貍}(cāng)庫(kù)都是私有的。

小明發(fā)布功能

一旦小明完成了他的功能開(kāi)發(fā)翻翩,會(huì)發(fā)布他的本地提交到中央倉(cāng)庫(kù)中都许,這樣其它團(tuán)隊(duì)成員可以看到他的修改。他可以用下面的[git push命令]:
git push origin master

注意嫂冻,origin是在小明克隆倉(cāng)庫(kù)時(shí)Git創(chuàng)建的遠(yuǎn)程中央倉(cāng)庫(kù)別名胶征。master參數(shù)告訴Git推送的分支。 由于中央倉(cāng)庫(kù)自從小明克隆以來(lái)還沒(méi)有被更新過(guò)桨仿,所以push操作不會(huì)有沖突睛低,成功完成。

小紅試著發(fā)布功能

一起來(lái)看看在小明發(fā)布修改后服傍,小紅push修改會(huì)怎么樣钱雷?她使用完全一樣的push
命令:
git push origin master

但她的本地歷史已經(jīng)和中央倉(cāng)庫(kù)有分岐了,Git拒絕操作并給出下面很長(zhǎng)的出錯(cuò)消息:

error: failed to push some refs to '/path/to/repo.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Merge the remote changes (e.g. 'git pull')
hint: before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

這避免了小紅覆寫(xiě)正式的提交吹零。她要先pull小明的更新到她的本地倉(cāng)庫(kù)合并上她的本地修改后罩抗,再重試。

小紅在小明的提交之上rebase

小紅用[git pull]合并上游的修改到自己的倉(cāng)庫(kù)中灿椅。 ——拉取所有上游提交命令到小紅的本地倉(cāng)庫(kù)套蒂,并嘗試和她的本地修改合并:
git pull --rebase origin master

--rebase選項(xiàng)告訴Git把小紅的提交移到同步了中央倉(cāng)庫(kù)修改后的master分支的頂部,如下圖所示:

如果你忘加了這個(gè)選項(xiàng)茫蛹,pull操作仍然可以完成操刀,但每次pull操作要同步中央倉(cāng)庫(kù)中別人修改時(shí),提交歷史會(huì)以一個(gè)多余的『合并提交』結(jié)尾婴洼。 對(duì)于集中式工作流骨坑,最好是使用rebase而不是生成一個(gè)合并提交。

小紅解決合并沖突

rebase操作過(guò)程是把本地提交一次一個(gè)地遷移到更新了的中央倉(cāng)庫(kù)master分支之上窃蹋。 這意味著可能要解決在遷移某個(gè)提交時(shí)出現(xiàn)的合并沖突卡啰,而不是解決包含了所有提交的大型合并時(shí)所出現(xiàn)的沖突。 這樣的方式讓你盡可能保持每個(gè)提交的聚焦和項(xiàng)目歷史的整潔警没。反過(guò)來(lái)匈辱,簡(jiǎn)化了哪里引入Bug的分析,如果有必要杀迹,回滾修改也可以做到對(duì)項(xiàng)目影響最小亡脸。

如果小紅和小明的功能是不相關(guān)的,不大可能在rebase過(guò)程中有沖突。如果有浅碾,Git
在合并有沖突的提交處暫停rebase過(guò)程大州,輸出下面的信息并帶上相關(guān)的指令:

CONFLICT (content): Merge conflict in <some-file>

Git很贊的一點(diǎn)是,任何人可以解決他自己的沖突垂谢。在這個(gè)例子中厦画,小紅可以簡(jiǎn)單的運(yùn)行[git status]命令來(lái)查看哪里有問(wèn)題。 沖突文件列在Unmerged paths(未合并路徑)一節(jié)中:

Unmerged paths:
(use "git reset HEAD <some-file>..." to unstage)
(use "git add/rm <some-file>..." as appropriate to mark resolution)

both modified: <some-file>

接著小紅編輯這些文件滥朱。修改完成后根暑,用老套路暫存這些文件,并讓[git rebase
]完成剩下的事:
git add <some-file> git rebase --continue

要做的就這些了徙邻。Git會(huì)繼續(xù)一個(gè)一個(gè)地合并后面的提交排嫌,如其它的提交有沖突就重復(fù)這個(gè)過(guò)程。
如果你碰到了沖突缰犁,但發(fā)現(xiàn)搞不定淳地,不要驚慌。只要執(zhí)行下面這條命令帅容,就可以回到你執(zhí)行[git pull --rebase]命令前的樣子:
git rebase --abort

小紅成功發(fā)布功能

小紅完成和中央倉(cāng)庫(kù)的同步后颇象,就能成功發(fā)布她的修改了:
git push origin master

更多請(qǐng)查看my-git

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市丰嘉,隨后出現(xiàn)的幾起案子夯到,更是在濱河造成了極大的恐慌嚷缭,老刑警劉巖饮亏,帶你破解...
    沈念sama閱讀 222,378評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異阅爽,居然都是意外死亡路幸,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門付翁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)简肴,“玉大人,你說(shuō)我怎么就攤上這事百侧∨槭叮” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,983評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵佣渴,是天一觀的道長(zhǎng)辫狼。 經(jīng)常有香客問(wèn)我,道長(zhǎng)辛润,這世上最難降的妖魔是什么膨处? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,938評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上真椿,老公的妹妹穿的比我還像新娘鹃答。我一直安慰自己,他們只是感情好突硝,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,955評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布测摔。 她就那樣靜靜地躺著,像睡著了一般解恰。 火紅的嫁衣襯著肌膚如雪避咆。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,549評(píng)論 1 312
  • 那天修噪,我揣著相機(jī)與錄音查库,去河邊找鬼。 笑死黄琼,一個(gè)胖子當(dāng)著我的面吹牛樊销,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播脏款,決...
    沈念sama閱讀 41,063評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼围苫,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了撤师?” 一聲冷哼從身側(cè)響起剂府,我...
    開(kāi)封第一講書(shū)人閱讀 39,991評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎剃盾,沒(méi)想到半個(gè)月后腺占,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,522評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡痒谴,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,604評(píng)論 3 342
  • 正文 我和宋清朗相戀三年衰伯,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片积蔚。...
    茶點(diǎn)故事閱讀 40,742評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡意鲸,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出尽爆,到底是詐尸還是另有隱情怎顾,我是刑警寧澤,帶...
    沈念sama閱讀 36,413評(píng)論 5 351
  • 正文 年R本政府宣布漱贱,位于F島的核電站槐雾,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏饱亿。R本人自食惡果不足惜蚜退,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,094評(píng)論 3 335
  • 文/蒙蒙 一闰靴、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧钻注,春花似錦蚂且、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,572評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至捆交,卻和暖如春淑翼,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背品追。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,671評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工玄括, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人肉瓦。 一個(gè)月前我還...
    沈念sama閱讀 49,159評(píng)論 3 378
  • 正文 我出身青樓遭京,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親泞莉。 傳聞我的和親對(duì)象是個(gè)殘疾皇子哪雕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,747評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • 多種多樣的工作流使得在項(xiàng)目中實(shí)施Git時(shí)變得難以選擇。這份教程提供了一個(gè)出發(fā)點(diǎn)鲫趁,調(diào)查企業(yè)團(tuán)隊(duì)最常見(jiàn)的Git工作流斯嚎。...
    JSErik閱讀 4,417評(píng)論 2 8
  • 集中式工作流 每個(gè)開(kāi)發(fā)可以有屬于自己的整個(gè)工程的本地拷貝。隔離的環(huán)境讓各個(gè)開(kāi)發(fā)者的工作和項(xiàng)目的其他部分(修改)獨(dú)立...
    yohn閱讀 474評(píng)論 0 0
  • 《舍得,靜心》—穿石—如雞肋也幽崩、食之無(wú)肉苦始、棄之余味寞钥、食欲蹶也慌申。當(dāng)沉其心、靜于達(dá)理郑、起于安蹄溉、發(fā)于將、思其往您炉、通乎哉柒爵、變...
    東方詩(shī)空閱讀 386評(píng)論 0 0
  • 2016年下半年,對(duì)于我來(lái)說(shuō)赚爵,是一個(gè)全新開(kāi)始的一年棉胀。 換了新的工作法瑟,到了新的崗位,并在此之后的每一天唁奢,都在以一顆保...
    豆媽不逗閱讀 648評(píng)論 0 0