git 是一個版本控制系統。
《看日記學git》非常不錯
這是根據《看日記學git》的一些總結:
git diff –cached是用來查看index file和倉庫之間代碼的區別的
而如果省略–cached選項的話,就是比較working tree和index file的區別
使用git diff瞭解了不同之後,還可以使用git status命令來獲取整體改動的信息
如果修改了項目代碼,先git add你修改過的文件,再git diff並git status查看確認,然後git commit提交,然後輸入你的開發日誌,最後git log再次確認。
git commit -a,這個命令可以直接提交所有修改,省去了你git add和git diff和git commit的工序;但是,此處有一點應該注意,那就是git commit -a無 法把新增文件或文件夾加入進來,所以,如果你新增了文件或文件夾,那麼就要老老實實的先git add .,再git commit嘍。
針對開發日誌,要說一句:切記寫開發日誌的時候,第一行一定要是少於50字的開發概括信息,而且第二行務必是空行,第三行開始纔可以開始細緻描述開發信息。這是因爲很多版本服務系統中的email機制都會選取log中的第一行爲郵件題目。
git log -p,這樣git不但會給出開發日誌,而且會顯示每個開發版本的代碼區別所在。
分支功能:
git branch * ("*" is the name of branch)
git branch show the branchs exit;
git checkout name ("name" is the name of a branch)change main branch
git merge branchname ("HAEDname" 是分支的名字)自動將分支併入主支
git branch -d branchname delete branch,在這裏使用的是小寫的-d,表示“在分支已經合併到主幹後刪除分支”;如果使用大寫的-D的話,則表 示“不論如何都刪除分支”,-D當然使用在“分支被證明失敗”的情況下
總結:
1
任何人在使用git之前,都要提交簡單的個人信息,以便git區分不同的提交者身份。
#git config –global user.name “your name”
#git config –global user.email [email protected]
獲得幫助可以使用類似man git-****的命令格式:
想獲得關於commit命令的幫助,則man git-commit
想獲得關於pull命令的幫助,則man git-pull
想獲得關於merge命令的幫助,則man git-merge
以此類推
3想新開啓一個項目,應該先建立一個目錄,例如名爲myproject,然後所有的項目開發內容都在此目錄下進行。
#cd myproject
#git init
#git add .
#git commit //這個步驟會自動進入編輯狀態,要求提交者輸入有關本次提交的“開發信息”
至此,一個新項目就誕生了,第一個開發信息(開發日誌)也隨之誕生。
如果改進了項目源代碼,並且到了開發者認爲“應該再次記錄開發信息”的時候,則提交“工作成果”。
#git commit -a //這是一個偷懶的命令,相當於git add .; git commit;
但是,此處有一點應該注意,那就是git commit -a無法把新增文件或文件夾加入進來,所以,如果你新增了文件或文件夾,那麼就要老老實實的先git add .,再git commit
5想檢查到目前爲止對源碼都做了哪些修改(相對於本次工作剛開始之時):
#git diff //這個命令只在git add之前使用有效。如果已經add了,那麼此命令輸出爲空
#git diff –cached //這個命令在git add之後在git commit之前有效。
#git status //這個命令在git commit之前有效,表示都有哪些文件發生了改動
6想查看自項目開啓到現在的所有開發日誌
#git log
#git log -p //會輸出非常詳細的日誌內容,包括了每次都做了哪些源碼的修改
7開啓一個試驗分支(experimental),如果分支開發成功則合併到主分支(master),否則放棄該試驗分支。
#git branch experimental //創建一個試驗分支,名稱叫experimental
#git branch //顯示當前都有哪些分支,其中標註*爲當前所在分支
#git checkout experimental //轉移到experimental分支
(省略數小時在此分支上的開發過程)…
如果分支開發成功:
#git commit -a //在experimental分支改進完代碼之後用commit在此分支中進行提交
#git checkout master //轉移回master分支
#git merge experimental //經證實分支開發成功,將exerimental分支合併到主分支
#git commit -a //徹底完成此次分支合併,即提交master分支
#git branch -d experimental //因爲experimental分支已提交,所以可安全刪除此分支
如果分支開發失敗:
#git checkout master
#git branch -D experimental //由於分支被證明失敗,因此使用-D來放棄並刪除該分支
8
隨時查看圖形化分支信息。
#gitk
9當合作伙伴bob希望改進我(rocrocket)的工作成果,則:
bob$git clone /home/rocrocket/project myrepo //此命令用於克隆我的工作到bob的myrepo目錄下。請注意,此命令有可能會因爲/home/rocrocket的目錄權限問題而被拒絕,解決方法是chmod o+rx /home/rocrocket。
(省略bob數小時的開發過程)…
bob$git commit -a //bob提交自己的改進成果到自己的git倉庫中,並口頭告知我(rocrocket)他已經完成了工作。
我如果非常非常信任bob的開發能力:
$ cd /home/rocrocket/project
$ git pull /home/bob/myrepo //pull命令的意思是從遠端git倉庫中取出(git-fetch)修改的代碼,然後合併(git-merge)到我(rocrocket)的項目中去。讀者要記住一個小技巧,那就是“git pull .”命令,它和git merge的功能是一樣的,以後完全可以用git pull .來代替git merge哦!請注意,git-pull命令有可能會因爲/home/bob的目錄權限問題而被拒絕,解決方法是chmod o+rx /home/bob。
如果我不是很信任bob的開發能力:
$ cd /home/rocrocket/project
$ git fetch /home/bob/myrepo master:bobworks //此命令意思是提取出bob修改的代碼內容,然後放到我(rocrocket)工作目錄下的bobworks分支中。之所以要放到分支中,而不是master中,就是要我先仔仔細細看看bob的開發成果,如果我覺得滿意,我再merge到master中,如果不滿意,我完全可以直接git branch -D掉。
$git whatchanged -p master..bobworks //用來查看bob都做了什麼
$git checkout master //切換到master分區
$git pull . bobworks //如果我檢查了bob的工作後很滿意,就可以用pull來將bobworks分支合併到我的項目中了
$git branch -D bobworks //如果我檢查了bob的工作後很不滿意,就可以用-D來放棄這個分支就可以了
過了幾天,bob如果想繼續幫助我開發,他需要先同步一下我這幾天的工作成果,只要在其當初clone的myrepo目錄下執行git pull即可:
#git pull //不用加任何參數,因爲當初clone的時候,git已經記住了我(rocrocket)的工作目錄,它會直接找到我的目錄來取。