gitHub 常用命令 與 合併衝突問題
git branch 檢視所在當前分支(倉庫)
git pull 重新整理當前分支(倉庫)檔案到本機
git status 檢視狀態提示On branch master Your branch is up to date with 'origin/master'.nothing to commit, working tree clean,在分支大師,您的分支是最新的'origin / master'。什麼都沒有,工作樹幹淨
git checkout master 切換到分支master 如果切換到分支dev1 git checkout dev1
git merge dev2
git commit -am '註釋說明' 將本地修改過的檔案提交到本地倉庫(當前分支),並寫上說明
git push 推送當前分支(倉庫)檔案到gitHub
git merge 用來做分支合併,將其他分支中的內容合併到當前分支中。比如分支結構如下:
master / C0 ---- C1 ---- C2 ---- C4 \ C3 ---- C5 \ issueFix
當前分支是master
$ git checkout master
把issueFix中的內容Merge進來:
$ git merge issueFix
如果沒有衝突的話,merge完成。有衝突的話,git會提示那個檔案中有衝突,比如有如下衝突:
<<<<<<< HEAD:test.c
printf (“test1″);
=======
printf (“test2″);
>>>>>>> issueFix:test.c
可以看到 ======= 隔開的上半部分,是 HEAD(即 master 分支,在執行 merge 命令時檢出的分支)中的內容,下半部分是在 issueFix 分支中的內容。解決衝突的辦法無非是二者選其一或者由你親自整合到一起。比如你可以通過把這段內容替換為下面這樣來解決:
printf (“test2″);
這個解決方案各採納了兩個分支中的一部分內容,而且刪除了 <<<<<<<,=======,和>>>>>>> 這些行。在解決了所有檔案裡的所有衝突後,執行 git add 將把它們標記為已解決(resolved)。因為一旦暫存,就表示衝突已經解決。如果你想用一個有圖形介面的工具來解決這些問題,不妨執行 git mergetool,它會呼叫一個視覺化的合併工具並引導你解決所有衝突:
$ git mergetool
merge tool candidates: kdiff3 tkdiff xxdiff meld gvimdiff opendiff emerge vimdiff
Merging the files: index.html
Normal merge conflict for ‘test.c’:
{local}: modified
{remote}: modified
Hit return to start merge resolution tool (kdiff3):
合併後的分支圖如下:
master / C0 ---- C1 ---- C2 ---- C4 ---- C6 \ / C3 ----C5 \ issueFix
注意,這次合併的實現,由於當前 master 分支所指向的 commit (C4)並非想要併入分支(issueFix)的直接祖先,Git 不得不進行一些處理。就此例而言,Git 會用兩個分支的末端(C4 和 C5)和它們的共同祖先(C2)進行一次簡單的三方合併。對三方合併的結果作一新的快照,並自動建立一個指向它的 commit(C6)
退出合併工具以後,Git 會詢問你合併是否成功。如果回答是,它會為你把相關檔案暫存起來,以表明狀態為已解決。然後可以用 git commit 來完成這次合併提交。