官方地址git
Git 倉庫中的提交記錄保存的是你的目錄下全部文件的快照。條件容許的狀況下,它會將當前版本與倉庫的上一個版本進行對比,並把全部差別打包到一塊兒做爲一個提交記錄。
Git 還保存了提交的歷史記錄,因此大多數提交記錄上都有父節點。翻譯
Git 的分支很是輕量。他們只是簡單地指向某個提交記錄。 歌之頌之:早建分支!多用分支!建立再多的分支也不會形成存儲和內存上的開銷,而且按照邏輯分解工做到不一樣的分支要比維護那些臃腫的分支簡單多了。
再將分支和提交記錄結合起來後,咱們就能夠看到二者如何協做。如今只要記住使用分支其實就至關於再說:我想基於這個提交以及它全部的父提交進行新的工做。內存
分開操做:開發
建立一個新分支並切換到新建的分支:get
如今探討如何將兩個分支合併在一塊兒。如今遇到一個新的場景:新建了一個分支,在其上開發某個新功能,開發完成再合併會主線。it
在Git中合併兩個分支時會產生一個特殊的提交記錄,他有兩個父節點。翻譯成天然語言:我要把兩個父節點自己及他們全部的祖先都包含進來。
合併後的分支包含了對代碼庫的全部修改。ast
分支合併的第二種方法。Rebase 實際上就是取出一系列的提交記錄,「複製」它們,而後在另一個地方逐個的放下去。
Rebase的優點是能夠創造更線性的提交歷史。若是隻容許使用Rebase,代碼庫的提交歷史將會變得異常清晰。
總結:這兩條命令使用下來,感受主語有點不同, git merge 命令的主語是master, 做用是把記錄合併到master。git rebase 的主語是bugFix,意思是把bugFix上的提交記錄合併到master的將來節點,master 還要再 git rebase 這樣就至關於HEAD回到了master的最新記錄。基礎
HEAD 是一個對當前檢出記錄的符號引用,也就是指向你正在其基礎上進行工做的提交記錄。
HEAD 老是指向當前分支上最近一次提交記錄。大多數修改樹的 Git 命令都是從改變 HEAD 的指向開始的。
HEAD 一般狀況下是指向分支名的。在你提交時,改變了分支的狀態,這一變化經過HEAD變得可見。打包
使用相對引用的話,你就能夠從一個易於記憶的地方開始計算。引用
若是你想在提交樹中向上移動不少步的話,除了屢次使用操做符,可使用~操做符一次解決。~操做符後面能夠跟一個數字(可選,不跟數字時與相同,向上移動一次),指定向上移動多少次。
強制修改分支位置
撤銷變動由底層部分和上層部分組成。
git reset 經過把分支記錄回退幾個提交記錄來實現撤銷改動。 做用範圍:本地分支
雖然在你的本地分支中使用 git reset 很方便,可是這種「改變歷史」的方法對你們一塊兒使用的遠程分支是無效的。 因此,爲了撤銷更改並分享給別人,咱們須要使用 git revert .