GIT – 基本概念(分支, 差異, 合併)

NO IMAGE

分支的命名規則:

可以使用 / 建立一個分層的命名方案,但是分支名不能以 / 結尾。不能以 – 開頭。不能寫成類似 feature/.features1(含.)的分支名。不能用連續兩個點..。不能包含空格和特殊含義的字元。

每個分支在一個特定的版本庫中必須有唯一的名字,這個名字始終指向該分支上最近提交的版本。

建立一個分支:git branch [new_branch_name],如果沒有starting-commit 引數跟在分支名後面,則預設是在你現在工作的分支上啟動一個新的分支。如果加上starting-commit, 例如:git branch new_branch db7de5fee..
(db7de5fee..是一個提交ID),則說明該分支基於指定的提交版本之上。

列出本地分支名:git branch, 列出所有分支名:git branch-a(包括遠端分支),-r:列出遠端分支名。

檢視分支:git show-branch 命令提供比git branch更詳細的輸出。

檢出分支:git checkout [branch_name], 有未提交的更改時進行檢出時,需要先add當前分支的更改檔案或目錄,然後commit(如果一個檔案的本地修改不同於新分支上的變更,checkout的時候會報錯。當然可以通過-f 強制checkout,但是這種做法會使得當前branch的更改內容丟失。)【這裡如果是checkout到master上,或者是從master上checkout到別的branch上,那麼不會報錯,只會標記為M】

在工作分支上檢視其它分支上的檔案,可以通過git show [other_branch]:[file_name],例如:git show wayne_test_0606: hello.txt。

刪除本地分支:git branch -d [branch_name], Git 不會讓你刪除當前分支,也不會讓你刪除一個 某個提交只包含在要被刪除的分支,也就是說Git防止你在不合併到當前分支的分支被刪除時,不小心丟失其內容。

刪除遠端分支:git push origin –delete [branch_name],或者git push origin :[branch_name]

差異(diff)

其實 git diff 和 UNIX diff差不多,diff -u [init_file] [final_file] //逐行比較兩個檔案內容的差異,-u選項表示產生一個合併格式的差異。—:原始檔案, :最新檔案;@@之間表示兩個不同檔案版本的上下文行號:-:第一個檔案,1表示第一行,4表示連續四行, :第二個檔案;以(-)開頭的行表示從原始檔案刪除該行以得到新檔案,( )開始的行表示從原始檔案中新增該行以產生新檔案。

git diff 命令

(1)git diff:顯示工作目錄和索引之間的差異

(2)git diff [commit]:顯示工作目錄和給定提交之間的差異

(3)git diff –cached [commit]:顯示索引中的變更和給定提交之間的差異

(4)git diff [commit1] [commit2]:顯示給定的兩個提交之間的差異。

命令列選項:–M:查詢重新命名並且生成一個簡化的輸出。-w/–ignore-all-space:忽略空白字元。–stat:顯示針對兩個樹狀態之間差異的統計資料,報告用簡潔的語法顯示有多少行發生了變化,多少行新增了,多少行刪除了。–color:輸出結果以多種顏色顯示。

合併 (merge)

合併兩個分支流程:在master上合併一個分支

git checkout master

git merge [another_branch]

git log –graph –pretty=oneline –abbrev-commit // git log –graph可以圖形化描述。

如果發生衝突,(1)使用git diff,可以看到衝突檔案之間的差異,然後解決衝突。(2)使用 git log –merge –left-right -p,通過日誌來檢視衝突。// –merge: 只顯示跟產生衝突的檔案相關的提交, –left-right:左邊顯示<,自己的branch一邊,右邊顯示>,要合併的branch一邊。-p:顯示提交資訊和每個提交的相關補丁。

終止或重新啟動合併:

在執行git merge 命令執行之前放棄,可以使用 git reset –hard HEAD//恢復到當前最新的提交。【注】HEAD相當於遊標。

在執行git merge 命令之後放棄,可以使用 git reset –hard ORIG_HEAD //恢復到上一個提交。