Git:Git常用操作

nooboy發表於2018-06-23

倉庫

  • git init:會在本地當前目錄下建立一個git倉庫
  • git clone https://github.com/username/a.git:下載遠端庫到本地
  • git remote add origin git@server-name:path/repo-name.git:關聯一個遠端倉庫,前提是已經在gitlab上建立了一個倉庫
  • git push -u origin master:第一次把本地工程推送到遠端倉庫,之後直接git push即可

檢視日誌

  • git log 檢視提交歷史,可確定回退到哪個版本
  • git log --pretty=oneline 檢視提交歷史,更好看而已
  • git reflog 檢視已執行的命令歷史,可確定回退到哪個版本

工作區與快取區

三種狀態+遠端庫:

圖片描述

執行 add 新增命令後:

圖片描述

執行 commit 提交命令後:

圖片描述

  • 工作區:修改或者新新增一個檔案,處於工作區(撤銷:git checkout -- fname
  • 暫存區:執行git add fname後,處於暫存區(撤銷:git reset HEAD fname
  • 分支:執行git commit -m "desc"後,提交到了分支(撤銷:git reset --hard commit_id
  • 遠端庫:執行git push後,程式碼就推到了遠端庫

撤銷操作

  • 在工作區修改後,並未add到暫存區:撤銷工作區的修改 git checkout -- fname,就回到了和版本號一樣的狀態
  • 在工作區新增了一行a,並add到快取區,但沒commit到分支上;然後又在工作區新增了一行b,並未add暫存區:執行git checkout -- fname就回到了新增到暫存區後的狀態a
  • 在工作區修改後,並add到了暫存區:執行git reset HEAD fname,就把暫存區的修改撤銷了,回退到工作區狀態;再執行git checkout -- fname就撤銷了工作區的修改,回到了和版本庫一樣的狀態
  • 已經commit到了分支上:執行git reset --hard commit_id就撤銷了提交,回退到了暫存區狀態

刪除操作

  • rm fname:從工作區刪除,撤銷刪除:git checkout -- fname
  • git rm fname:從版本庫中刪除檔案,徹底刪除:git commit;撤銷刪除:git reset HEAD fname,再git checkout -- b即可完全恢復
  • git checkout -- fname:把誤刪的檔案恢復到最新版本,其實是用版本庫裡的版本替換工作區的版本,無論工作區是修改還是刪除,都可以“一鍵還原”

分支管理

  • git branch dev:建立dev分支
  • git checkout dev:切換到dev分支
  • git checkout -b dev:建立並切換到dev分支(從當前分支複製出dev新分支,注意push後再切換其他分支)
  • git branch:檢視所有分支和當前分支
  • git checkout -- fname注意:是撤銷工作區的修改
  • git merge dev:把dev分支合併到當前分支(如當前是master分支)
  • git branch -d dev:刪除dev分支
  • git push --set-upstream origin dev:把本地分支push到遠端倉庫
  • git checkout -b 本地分支名 origin/遠端分支名:從遠端倉庫拉取一條本地不存在的分支

    ## 從當前分支拉新分支開發:

    1. 假設需要從當前的master分支建立新分支的dev2進行開發:

      git checkout -b dev2
    2. 把新分支dev2push到遠端

      git push origin dev2
    3. 拉取遠端分支dev2

      git pull
    4. 提示:

      There is no tracking information for the current branch.
      Please specify which branch you want to merge with.
      See git-pull(1) for details.
      
      git pull <remote> <branch>
      
      If you wish to set tracking information for this branch you can do so with:
      
      git branch --set-upstream-to=origin/<branch> dev2
      
      經過驗證,當前的分支並沒有和本地分支關聯,根據提示進行下一步:
    5. 關聯

      git branch --set-upstream-to=origin/dev2
    6. 再次拉取 驗證

      git pull

## 把遠端倉庫中的dev2分支拉到本地(本地之前沒有該分支)

git checkout -b dev2 origin/dev2

如果成功,就會在本地自動建立新分支dev2,並自動切換奧分支dev2

如果拉取不成功,需要執行 git fetch ;然後再執行上面的命令

參考:[git從已有分支拉新分支開發](http://www.cnblogs.com/lingear/p/6062093.html)

`注意:`在分支上修改並commit後,當切換到master分支後是看不到,必須合併分支後才可以。

# 子模組
- git submodule ...

參考:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000