GIT分享收集

一、簡介

          概況:2005年Linux之父Linus兩週時間用C語言開發。目前,最先進的分佈式版本控制系統。

          優勢:①速度快;②完全分佈式;③輕量級;④社區成熟活躍。

二、基礎知識

          與傳統VCS工具的對比

  (1)基礎知識-第一次COMMIT

   (2)基礎知識-多次COMMIT

   (3)基礎知識--分支

  • 分支本質是指向單個commit的可變指針;
  • master分支不是特殊分支,只是約定的默認分支;
  • HEAD是一個特殊指針,指向當前活動分支的最新一次提交。

 

    (4)基礎知識--標籤(TAG)

  • 標籤本質上是也是指向某個commit的指針,但是這個指針不能移動;
  • 標籤可以方便的標記版本。

   (5)基礎知識--區域劃分

   

  • stash:儲存區;
  • workspace/Working Directory:工作區;
  • Index/Stage:暫存區;
  • local repository:倉庫區/本地倉庫;
  • remote repository:遠程倉庫。

三、常見場景

編號 場景 命令
1 本地丟棄工作區修改 git checkout--<file>
2 將修改從暫存區回退到工作區

git reset HEAD<file>

git reset HEAD .//所有文件

3 push之前,撤銷某一次commit

git reset commit-id //撤銷此次commit修改還在

git reset --hard commit-id //撤銷後放棄此次commit的修改

4 停止追蹤文件

git rm --cached <file> //解除被追蹤狀態,但是工作目錄中還會保存文件

git rm <file>-f //解除被追蹤狀態並且在工作目錄中刪除該文件

5 push之後回退

git revert commit-id //只撤銷某次操作,不影響之前和之後的

commit,revert會把撤銷作爲新的commit提交,版本會遞增

git reset commit-id //撤銷某次提交,此後的修改都會被回退到暫存區。

三種模式:

--hard徹底撤銷,不保留修改。暫存區和工作目錄都會重置到你指定的提交;

--mixed回退版本庫,暫存區。工作目錄不會被改變;

--soft只撤銷commit,暫存區和工作目錄都不會被改變。例:git reset--hard commit-id

6 分支管理

git checkout-b hotfix //從當前分支創建hotfix分支,並切換到hotfix分支

git checkout-b hotfix master  //從master分支創建hotfix分支,並切換到hotfix分支

git branch  //查看所有的分支,帶*號的是當前所在分支

git branch-d hotfix   //刪除hotfix分支

git branch-D hotfix  //強制刪除hotfix分支

git branch--merged //查看與當前分支合併過的分支,只要合併過的分支即使刪掉也不用擔心;

git branch--no-merged  //查看與當前分支合併過的分支,只要合併過的分支即使刪掉也不用擔心

git branch--no-merged  //查看與當前分支沒有合併過的分支

7 分支合併

git merge hotfix  //合併hotfix分支到當前分支,使當前分支擁有hotfix分支的改動

git merege origin/master   //合併遠程的master分支到當前分支

8

衝突解決

  • git merge時產生
  • git pull時會產生

git diff //查看暫存區和工作區的文件差異

<<<<<<<當前分支之前的本地文件內容========遠程倉庫的內容========>>>>>>>

對上述內容進行判斷,人工判斷需要保留的代碼,刪除多餘的<<<<<<<和======即可

git add .//將解決衝突後的文件提交到暫存區

git commit-m  '解決衝突'

 

9 合併某個commit到其他分支

git cherry-pick commit-id1 commit-id2 //合併commit-id1和commit-id2到當前分支,自動commit

git cherry-pick -n commit-id1 commit-id2 //合併commit-id1和commit-id2到當前分支,不自動commit

10 儲存區操作

git stash save 'my-stash' //添加當前暫存區和工作區的內容到儲存區,併爲儲藏添加標記。執行以後暫存區和工作區會恢復到修改前的狀態

git stash list //查看儲存區的內容列表

git stash show stash@{0}   //查看id爲0的儲藏詳情

git  stash pop stash@{0}   //將id爲0 的儲藏恢復到工作區。如果恢復以後沒有衝突,儲藏將被刪除

git stash apply stash@{0}  //將id爲0的儲藏恢復到工作區。如果儲藏將不會被刪除

git stash drop stash@{0}  //刪除id爲0 的儲藏

git stash clear   //刪除所有儲藏

 

11 本地更新remote倉庫的信息 git fetch
12 日誌查看

git log

git log --oneline  //將每條日誌輸出爲一行(只顯示哈希值和提交說明)

git log -2 //顯示2條日誌

git log --author Tom  //只查看Tom的提交記錄

git log-p-checkout.js //只查看checkout.js的提交日誌

git log --since=2.weeks //只查看2周內的提交記錄

git log --after="2018-11-01"-before"2018-11-02"  //查看2018-11-01到2018-11-02d的日誌

git log --pretty=format:"%h-%an,%ar:%s"

 //格式化日誌內容。查看簡寫comit-id,作者,提交日期及提交說明

git log --graph //查看帶點線圖的日誌

13 幫助命令  

(1)MERGE(合併)

 

四、GIT工作流

  • 中心化工作流
  • 基於功能分支的工作流
  • Gitflow工作流
  • Fork工作流

   (1)中心化工作流

  • 類似使用SVN,所有的更改都被提交到master分支,不創建其他分支

   (2)基於功能分支的工作流

  • 開發人員創建各自的feature分支。feature分支應該包含描述性的名稱,比如animated-menu-items(菜單項動畫)或issue-#1061。每個分支都應該有一個清晰、高度集中的目的。
  • 通過pull request將feature分支合併到master分支。

  (3)GITFOLW工作流

    master發佈歷史分支。可以打Tag develop開發分支。功能分佈發父分支,用於整合功能分支release branches發佈分支hotfixes緊急修復分支(維護分支)。

   

   (4)Fork工作流

     參見Github

  • Fork是服務端的clone(在服務端創建一份項目副本);
  • 修改後先push到副本倉庫,然後向主倉庫發起pull request;
  • 項目維護者將貢獻者的修改合併到主倉庫中。

五、其他補充

        (1)rebase和merge的區別

          Git社區圖書中文版 http://gitbook.liuhui998.com/4_2.html

        (2)rebase和merge的區別

         Git教程 https://www.atlassian.com/git/tutorials/resetting-checking-out-and-reverting

         git remote prune origin,該命令可以刪除本地版本上那些失效的遠程追蹤分支,具體用法是,假如你的遠程版本庫名是origin,則使用如下命令先查看哪些分支需要清理:

        git remote prune origin--dry--run

六、參考文獻

          git--everything-是本地 https://git-scm.com/book/zh/v2

          常用Git命令清單 http://www.ruanyifeng.com/blog/2015/12/git-cheat-sheet.html

         Git教程  https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

          學習Git分支 https://learngitbranching.js.org/?NODEMO

          Git菜單 https://github.com/geeeeeeeeek/git-recipes

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章