Demystify Git

Git雖然很時髦,可是很差學,很差用. 關鍵是很差理解. 本文用最通俗易懂又直觀的方式,幫助你們理解git, git的內部組織, 基本概念,還有經常使用 的工做流程.html

本文來自牆外. "貿易保護主義如同把本身關黑屋子,見不到陽光和空氣",可是,和網上長城gfw比起來,那算什麼?今天看到一個來自小黑屋外的視頻,以爲不錯,和你們分享一下。視頻地址:https://www.youtube.com/watch?v=GYnOwPl8yCEgit

 

 

Git workflowgithub

1. 簡單的,稱爲github workflow, 一個master線,每一個feature 或 developer本身一條線,短命,從master導出,經過github上的 pull request 進行團隊合做,好比把feature合併到master 上。github 上有不少團隊合做功能和 CI功能。優勢:簡單。參照:http://scottchacon.com/2011/08/31/github-flow.htmlpost

2. 複雜的,稱爲 git flow,兩個以上主線,一個是develop 線(或叫next 線),一個master。 develop線是集成線。全部的features (或稱爲topic 線) 線從develop導出,合併到此。develop線累積到必定程度後,先分出一條release 線,其名字根據當前的master tag 來定,好比 release-1.2,當穩定到能夠發佈後,將其合併到master (一般, dev 是master 的超集,因此,這個合併只會包括 fast-forward), 並tag master爲 master-1.3。因此 master 其實也是一個release 線,只不它包含最新的哪條release 線。在最新的release線(即master線)上的全部 fix都要合併回dev線,或許也合併到某些較舊的release 線,可是,在較舊的release線上的fix,不必定須要合併到dev線上,由於,dev線上可能已經沒有那個feature了。 參照:http://nvie.com/posts/a-successful-git-branching-model/ 。有點:高並行性高,適合大團隊,大項目。this

 

Git Squash Method:spa

1. >git rebase -i HEAD~5 #squash last 4 commit,orm

edit the file to choose pick or squash視頻

 

2. make sure index and working tree is cleanhtm

>git reset --soft HEAD~5 #head moved, index and working tree untouchedblog

>git commit --edit -m"$(git log --format=%B --reverse HEAD~5..HEAD)"

 

3. make sure all stuff commited

>git reset --hard HEAD~5

>git merge --squash HEAD@{1} # HEAD@{1} is the previous head before reset --hard

>git commit

 

Move git branch head around

>git checkout commit  #detached head

>git branch -f branch-name head #glitch: fail if current branch, the previous cmd avoid this.

 

Diff 控制

在 git diff --no-index 時, .gitignore 等的設置不起做用,有個解救,利用 .gitattributes 文件,例如, *.obj  -diff ,  

*.dll diff=nodiff
and
git config diff.nodiff.command /bin/true
or git config diff.nodiff.command echo

參 git manual gitattributes or config

注意,由於no-index 須要兩個path, 因此 pathspec 方法(參git help glossary)不行 。pathspec 方法例子:path/to/*.* :!*.obj 或等同的:path/to/*.* :(exclude)*.obj

相關文章
相關標籤/搜索