git fetch, merge, pull, push須要注意的地方

Git操做中,咱們常常會用到fetch, merge, pull和push等命令,如下是一些咱們須要注意的地方。html

給你們準備了參考資料:git

1. Whatʼs a Fast Forward Merge?:https://sandofsky.com/images/fast_forward.pdf安全

2. Understanding the Git Workflow:https://sandofsky.com/blog/git-workflow.html編輯器

3. Understanding Git: Merging:http://www.sbf5.com/~cduan/technical/git/git-3.shtmlfetch

git pull = git fetch + git mergeui

在git倉庫中運行命令:git remote -v.net

能夠看到fetch和push命令能夠分別對遠程分支進行fetch和push操做,而pull不是直接跟遠程分支對話的。指針

fetch同pull的區別在於:git fetch:是從遠程獲取最新版本到本地,不會自動merge
  而git pull是從遠程獲取最新版本並merge到本地倉庫
  從安全角度出發,git fetch比git pull更安全,由於咱們能夠先比較本地與遠程的區別後,選擇性的合併。
  git push 默認推送到master,若是有多個分支,則多個分支一塊兒推送到遠程htm

git mergeblog

git merge其實有不少參數的哦,咱們來看看merge有哪些參數能夠供咱們選擇:

git merge -n <branch> 不會在合併後顯示合併先後的不一樣狀態

git merge –stat <branch> 跟上面的參數相反,它會在合併結束後顯示合併先後的不一樣狀態

git merge -e <branch> 在合併以前會調用配置的編輯器,您能夠本身編寫commit,不然的話commit的內容就是git自動生成的

git merge –no-commit <branch>至關於一次快進式合併,不會生成一次提交,以下圖所示:

git merge –stat <branch> 在合併後會顯示不一樣的狀態,以下圖紅色框中部分:

git merge –no-stat <branch> 合併後不會顯示不一樣的狀態,以下圖:

git merge –quiet <branch> 無聲的合併(不會輸出任何信息)

git merge –ff <branch> 當合並是快進式合併的時候,僅僅是更新了分支的指針,不會產生合併提交,這也是默認的合併行爲

git merge –no-ff <branch> 及時是快進式合併,也會建立一個合併提交

git merge –ff-only <branch> 只容許快進式合併

快進式合併和非快進式合併

何爲快進式合併??

若是當前的分支和另外一個分支沒有內容上的差別,就是說當前分支的每個提交(commit)都已經存在另外一個分支裏了,git 就會執行一個「快速向前」(fast forward)操做;git 不建立任何新的提交(commit),只是將當前分支指向合併進來的分支。

快進式和非快進式的區別

目前倉庫的狀態是,master分支上有了5次提交,而後基於master建立分支test,並在test上進行3次提交,接下來,我在master分支上對test分支分別進行快進式和非快進式合併。

先進行快進式合併, git merge test (默認爲–ff合併),以下圖所示,咱們看到一共是5+3=8個提交,分支的提交歷史也沒有「開叉」,即沒有多個父提交節點。

隨後,我回到master的第五次提交,而後對test進行非快進式合併,git merge –no-ff test

這時候,同快進式合併不一樣的是,在c5處產生了「開叉」,而後新生成了一個commit 「Merge branch 'test'」,即多了一個父提交。

如今,你們應該對這兩種合併有了一種直觀的瞭解了吧。

非快進式合併

非快進式合併會生成新的提交,並「開叉」,可讓咱們的提交歷史更加的清晰!

相關文章
相關標籤/搜索