1. 程式人生 > >Git 教程 -- 基於自己學習記錄

Git 教程 -- 基於自己學習記錄

教程 add reset eba 工作區 分享 實驗 ges 學習

Git 教程 -- 基於自己學習記錄

1. 引言

由於學校布置了一項熟悉 git 和 svn 操作的實驗,所以自己重新溫習了下 git,記錄過程在這。

2. 註冊登錄 GitHub。

技術分享圖片

3. 選擇一個倉庫克隆到本地,這裏以我自己的一個私人項目為例,克隆到本地。

git clone https://github.com/weixuqin/love_source.git   //克隆項目到本地

技術分享圖片

4. 創建dev 分支,並切換到dev分支。

git checkout -b dev     //創建dev分支
git branch      //查看當前分支

技術分享圖片

合並分支, 刪除分支。

vim README.md                   //修改操作
git add README.md               //提交
git commit -m "branch test"     //提交
git checkout master             //切回master分支
git merge dev                   //合並分支
git branch -d dev               //刪除dev分支
git branch                      //查看當前分支

技術分享圖片

衍合分支。

git rebase dev

技術分享圖片

合並(merge)和衍合的區別:

merge把兩個分支最新的快照以及兩者的共同祖先進行三方合並,合並的結果是產生一個新的提交對象。

衍合是把在一個分支裏發生的變化補丁在另一個分支重新打一遍。

衍合最後生成的快照,其實和普通的三方合並的快照內容一模一樣。雖然最後整合得到的結果沒有任何區別,

但是衍合能產生一個更為整潔的提交歷史。如果觀察一個衍合過的分支的歷史記錄,看起來會更清楚:仿佛所有修改都是在一跟線上先後進行的,盡管實際上他們原本是同時並行發生的。

5. 撤銷操作。

回退到上一個版本

reset 用法:

git reset --hard HEAD^

技術分享圖片

revert 用法:

git revert HEAD

git revert 和 git reset的區別

  1. git revert是用一次新的commit來回滾之前的commit,git reset是直接刪除指定的commit。
  2. 在回滾這一操作上看,效果差不多。但是在日後繼續merge以前的老版本時有區別。因為git revert是用一次逆向的commit“中和”之前的提交,因此日後合並老的branch時,導致這部分改變不會再次出現,但是git reset是之間把某些commit在某個branch上刪除,因而和老的branch再次merge時,這些被回滾的commit應該還會被引入。
  3. git reset 是把HEAD向後移動了一下,而git revert是HEAD繼續前進,只是新的commit的內容和要revert的內容正好相反,能夠抵消要被revert的內容。

丟棄工作區的修改:

我們在已經提交的test.txt文件中添加一句話:

真是愚蠢!

使用 git checkout -- test.txt 撤銷這句話的內容。
技術分享圖片

撤銷暫存區的修改:

我們在已經提交的test.txt文件中添加一句話:

真是愚蠢!

並將test.txt文件add到暫存區。

使用 git reset HEAD test.txt 將test.txt,重新放回工作區。
技術分享圖片

6. git標簽管理。

創建標簽:git tag <name>

git tag 查看所有標簽。

刪除標簽:git tag -d <tagname>
技術分享圖片

7. git fetch 和 push 用法。

fetch是將遠程分支下載下來,但不會進行合並,

push是將本地分支上傳到遠程分支。

這裏只進行fetch的演示,因為遠程的git倉庫我不想修改。
技術分享圖片

8. Git打補丁。

Git 提供了兩種補丁方案,一是用 git diff 生成的UNIX標準補丁 .diff 文件,二是 git format-patch 生成的 Git 專用 .patch 文件。
.diff 文件只是記錄文件改變的內容,不帶有 commit 記錄信息,多個 commit 可以合並成一個 .diff文件。
.patch 文件帶有記錄文件改變的內容,也帶有 commit 記錄信息,每個 commit 對應一個 .patch 文件。

a. 創建patch 文件的常用命令行。

某次提交(含)之前的幾次提交:

git format-patch [commit sha1 id]-n     //n指從sha1 id對應的commit開始算起n個提交。

技術分享圖片

某兩次提交之間的所有patch:

git format-patch [commit sha1 id]..[commit sha1 id]

技術分享圖片

b. 創建diff文件的常用方法。

git diff  [commit sha1 id] [commit sha1 id] >  [diff文件名]

技術分享圖片

Git 教程 -- 基於自己學習記錄