1. 程式人生 > >Git學習筆記---(3)

Git學習筆記---(3)

fix col pack read delta title url 基本 chang

一般的操作流程

1.pull

王小坤與另一個同事張大炮一起開發一個項目,張大炮昨天修改了數據庫讀寫的api,優化了執行速度,並把read()函數改名成了Read(),下午下班之前把這些代碼push到服務器上了。

王小坤一直在做設備驅動的相關工作,昨天也剛剛修改了driver.c文件中的幾個函數,加班太晚就只是commit了一下,沒push到服務器。今天早上聽說張大炮已經把數據庫讀寫的api改了,那麽現在王小坤直接推到服務器,是推送不上去的,因為張大炮修改的那部分代碼王小坤本地並沒有,而王小坤本地修改的driver.c服務器的倉庫也沒有,所有王小坤必須先從服務器上最新版本的代碼下載到自己本地的方庫中,合並兩人的代碼才能push到服務器。於是執行下面的命令:

git pull

2.merge

pull命令是下載與合並的雙重含義。如果沒什麽問題會自動合並,然而,事情沒這麽簡單:

remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From https://gitee.com/feipeng8848/Demo
   35da8e7..43f4744  master     -> origin/master
Auto
-merging Main.c CONFLICT (content): Merge conflict in Main.c Automatic merge failed; fix conflicts and then commit the result.

由於王小坤本地的代碼還是老版本的read(),所以與張大炮最新的代碼對比是同一文件的同一處修改,git會提示自動merge失敗(上面是pull命令執行之後的提示,最後一行提示自動合並失敗),因為有沖突,git沒法確定到底用哪一個,這就需要手動merge。由於王小坤已經按照Git學習筆記---(2)在本地配置了kdiff3軟件,那這樣就方便多了,直接輸入

git mergetool 

自動打開kdiff3手動合並有沖突的文件。關於kdiff3的一些基本操作請看上一章:Git學習筆記---(2)

當然,合並到這裏並沒有結束,因為萬惡的張大炮竟然覺得read()看起來不如Read()舒服,就把read()改成Read(),這可苦了王小坤,所有之前調用read()的地方都要改成Read()才不會導致系統出問題。

3.commit

當王小坤做完了所有的合並工作之後執行了下面的語句看看git是什麽進度了

On branch master
Your branch and origin/master have diverged,
and have 1 and 1 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)

All conflicts fixed but you are still merging.
  (use "git commit" to conclude merge)

Changes to be committed:

    add file:   serialport.c

很好,合並之後git都自動給add到暫存庫(stage或index)中了。然後commit一下,commit的說明就寫“合並張大炮對read函數的修改”,這個時候王小坤昨晚的commit和張大炮昨天的所有的commit就都合並在一起了。

4.push

最後push到服務器上去。

git push origin master

張大炮此時想要最新的代碼只需要再pull一下就可以了。

Git學習筆記---(3)