1. Android開發,切換Git分支等操作,切換後再切回來,編譯時是否需要make clean
如果你當前的環境編譯過,會產生很多編譯過的文件(未提交)。低版本的git,想切分支想切不過去。高版本的git是可以切的,同時會把沒提交的那些文件也帶過去。不做make clean可能也會編譯過。但不一定是你想要的結果。特別是比較底層的東西,切過分支後有改變,但剛才已經編譯過,可能就不編了。編譯結果就跟當前分支的代碼不一致了
2. Git分支,為何以及如何使用分支
幾乎每一種版本控制系統都以某種形式支持分支。使用分支意味著你可以從開發主線上分離開來,然後在不影響主線的同時繼續工作。在很多版本控制系統中,這是個昂貴的過程,常常需要創建一個源代碼目錄的完整副本,對大型項目來說會花費很長時間。
有人把 Git 的分支模型稱為「必殺技特性」,而正是因為它,將 Git 從版本控制系統家族裡區分出來。Git 有何特別之處呢?Git 的分支可謂是難以置信的輕量級,它的新建操作幾乎可以在瞬間完成,並且在不同分支間切換起來也差不多一樣快。和許多其他版本控制系統不同,Git 鼓勵在工作流程中頻繁使用分支與合並,哪怕一天之內進行許多次都沒有關系。理解分支的概念並熟練運用後,你才會意識到為什麼 Git 是一個如此強大而獨特的工具,並從此真正改變你的開發方式。
為了理解 Git 分支的實現方式,我們需要回顧一下 Git 是如何儲存數據的。或許你還記得第一章的內容,Git 保存的不是文件差異或者變化量,而只是一系列文件快照。
在 Git 中提交時,會保存一個提交(commit)對象,該對象包含一個指向暫存內容快照的指針,包含本次提交的作者等相關附屬信息,包含零個或多個指向該提交對 象的父對象指針:首次提交是沒有直接祖先的,普通提交有一個祖先,由兩個或多個分支合並產生的提交則有多個祖先。
為直觀起見,我們假設在工作目錄中有三個文件,准備將它們暫存後提交。暫存操作會對每一個文件計算校驗和(即第一章中提到的 SHA-1 哈希字串),然後把當前版本的文件快照保存到 Git 倉庫中(Git 使用 blob 類型的對象存儲這些快照),並將校驗和加入暫存區域:
$ git add README test.rb LICENSE$ git commit -m 'initial commit of my project'
當使用git commit新建一個提交對象前,Git 會先計算每一個子目錄(本例中就是項目根目錄)的校驗和,然後在 Git 倉庫中將這些目錄保存為樹(tree)對象。之後 Git 創建的提交對象,除了包含相關提交信息以外,還包含著指向這個樹對象(項目根目錄)的指針,如此它就可以在將來需要的時候,重現此次快照的內容了。
現在,Git 倉庫中有五個對象:三個表示文件快照內容的 blob 對象;一個記錄著目錄樹內容及其中各個文件對應 blob 對象索引的 tree 對象;以及一個包含指向 tree 對象(根目錄)的索引和其他提交信息元數據的 commit 對象。概念上來說,倉庫中的各個對象保存的數據和相互關系看起來如圖 3-1 所示:
圖 3-8. HEAD 在一次 checkout 之後移動到了另一個分支
這條命令做了兩件事。它把 HEAD 指針移回到 master 分支,並把工作目錄中的文件換成了 master 分支所指向的快照內容。也就是說,現在開始所做的改動,將始於本項目中一個較老的版本。它的主要作用是將 testing 分支里作出的修改暫時取消,這樣你就可以向另一個方向進行開發。
3. 如何用git,在伺服器上面創建一個分支
1,從已有的分支創建新的分支(如從master分支),創建一個dev分支
git checkout -b dev
2,創建完可以查看一下,分支已經切換到dev
git branch
3,提交該分支到遠程倉庫
git push origin dev
4,測試從遠程獲取dev
git pull origin dev
或者:
如果用命令行,運行 git fetch,可以將遠程分支信息獲取到本地,再運行 git checkout -b local-branchname origin/remote_branchname 就可以將遠程分支映射到本地命名為local-branchname 的一分支
5,我覺得現在重要的就是設置git push,pull默認的提交獲取分支,這樣就很方便的使用git push 提交信息或git pull獲取信息
git branch --set-upstream-to=origin/dev
取消對master的跟蹤
git branch --unset-upstream master
6,現在隨便修改一下工程文件的內容,然後git commit ,git push,之後就可以直接提交到遠程的dev分支中,而不會是master
4. Git分支的創建以及分支沖突解決
在Git中的每次提交,Git都會把它們串成一條時間線,這條時間線就是一個分支,但是到目前為止,我們只有一條分支 master 分支,也就是我們的主分支,在實際的項目開發過程中,我們並不會在 master 分支上進行開發,而是會新創建一個分支,然後在這個新創建的分支上開發測試,全部沒有問題後,再合並到主分支上。比如我要開發一個項目中的一個功能,我就要新創建一個屬於我的分支,這個分支會拷貝主分支的一個完全的副本,我在這個分支上進行的各種操作,不會對其他人的開發造成影響,當我的功能開發測試完成後,就把我的分支合並到 master 主分支上。
在我們以前看到的, git log 中, HEAD 嚴格來說不是指向提交,而是指向 master , master 才是指向提交的,所以 HEAD 指向的就是當前的分支。
使用Git進行團隊開發的過程中,Git是鼓勵大量使用分支的:
查看分支: git branch ,*的意思是當前停留在哪個分支上。