git的常見使用


git常用命令總結

git配置相關命令

配置相關的命令都使用git config開始。詳細請參看git config --help.常用到的git配置命令如下:

  1. 查看git所有配置項
    1. git config -lgit config --list
  2. 直接修改配置文件
    1. git config -e --global:此命令會調出配置文件。
  3. 郵箱和用戶名配置
    1. 配置全局的郵箱和用戶名
      1. git config --global user.name "user name"
      2. git config --global user.email "xxx@nnn.com"
    2. 為某個項目配置本地的郵箱和用戶名
      1. git config user.name "user name"
      2. git config user.email "xxx@nnn.com"
  4. 設置編輯器
    1. git config --global core.editor "path/\notepad++.exe -multiInst -notabbar -n"

git遠程倉庫相關的命令

遠程相關的命令都使用git remote開始。詳細請參看git remote --help.常用到的遠程命令如下:

當我們使用git clone克隆遠程倉庫時,git會自動創建一個遠程倉庫名origin.與遠程倉庫的URL連接。自動把本地的master分支和遠程的master分支對應起來了。

  1. 查看遠程庫的名字與信息
    1. git remote
    2. git remote -v:顯示更詳細的信息。包括URL
    3. git remote show <remote_name>:查看某個遠程倉庫詳細信息。包括跟蹤的分支信息。
  2. 添加遠程庫
    1. git remote add <name> <url>:name表示為遠程倉庫分配的名稱,url為遠程倉庫的地址。
  3. 遠程倉庫重命名
    1. git remote rename <oldname> <newname>:
  4. 刪除添加的遠程庫
    1. git remote remove name

git克隆相關命令

git使用git clone命令進行倉庫的克隆。常用命令參數如下:

  1. -o name:使用指定的name代替origin名。
  2. -b branch_name:克隆指定的分支。
  3. --single-branch:只克隆指定分支。配合-b選項使用
  4. --depth=n:克隆的深度,克隆最近n次的commit.

常用clone例程:

  1. git clone git@git.n.xxx.git:克隆遠程倉庫所有內容。
  2. git clone git@git.n.xxx.git newname:克隆遠程倉庫所有內容並指定新名稱。

git分支相關的命令

  1. 查看倉庫的分支信息
    1. git branch:查看所有本地分支.當前分支前面會標一個*。常用參數如下:
      1. -a:查看所有的分支,包括遠程分支
      2. -v:查看分支指向的commit
      3. -vv:查看本地分支與遠程分支的匹配關系
      4. --merged:查看合並的分支
      5. --no-merged:查看沒有合並的分支
  2. 創建分支
    1. git branch <branch name>:在當前提交上創建一個分支
    2. git branch <branch name> <base_name>:基於指定的某個commit或者分支創建分支。base_name為commit號或分支名。
  3. 切換分支
    1. git checkout <branch name>
    2. git checkout -b <branch name>:創建並切換(當分支已經存在時切換不了)
    3. git checkout -b dev origin/dev:創建本地的dev分支並與遠程的origin/dev分支連接。
  4. 刪除分支
    1. git branch -d <branch name>:刪除指定分支.-D為強制刪除
  5. 如果您已經有一個本地分支,並希望將其設置為剛剛下拉的遠程分支,或者希望更改正在跟蹤的上游分支
    1. git branch --set-upstream-to=origin/<branch> dev
      1. --set-upstream-to-u同義。

git提交相關的命令

  1. 查看倉庫文件的狀態
    1. git status:查看詳細狀態,有下面一些描述狀態。
      1. nothing to commit, working tree clean:所有的更改都已經提交到本地倉庫了。
      2. no changes added to commit:更改了文件,但沒有存放到暫存區(沒有執行git add命令)
      3. Changes to be committed:對更改文件做了緩存,但沒有提交。
    2. git status -s,git status -short
      1. ??:未跟蹤
      2. a :未跟蹤文件使用git add命令添加到暫存區時標記此狀態。
      3. M :修改。即對文件進行了修改,但未使用git add命令添加到暫存區。
      4. MM:同時處於修改階段和暫存階段。即已經使用git add命令添加到暫存區,然后又進行了修改。
  2. 將文件添加到暫存區
    1. git add filename。filename 可以是.,代表所有文件。也可以是表達式如*.c,代表所有的c文件。
  3. 將文件提交到本地倉庫。命令為git commit,常用選項如下:
    1. -m "message".message為提交時的說明信息。可以使用"message. Ref #xxx"格式綁定issue。
    2. -v:提交時可以查看詳細的修改信息。
    3. -a:自動將工作區中的內容添加到暫存區,然后提交。
    4. -s:提交時添加提交者信息。
    5. --amend:修改本地某次的提交信息.

git對比文件相關的命令

git diff命令用於比較文件之間的不同。常見選項如下

  1. 直接使用git diff:比較工作區與暫存區的各個文件區別
  2. 比較暫存區與最后一次提交的區別
    1. git diff --staged
  3. 比較兩次提交之間的差異
    1. git diff [commit1]...[commit2]

git log日志相關的命令

git log用於查看提交日志

  1. 直接使用git log:列出所有歷史記錄,最近的排在最上方.q退出。
    1. -p:(patch)列出每個commit不同的詳細信息。
    2. -n:顯示前n條.
    3. -stat:查看概要
    4. --no-merges:防止顯示合並提交
    5. --since:指定查看時間。如兩天前的提交歷史git log --since=2.days
    6. --author:指定作者。如指定作者為"BeginMan"的所有提交git log --author=BeginMan
    7. --grep:指定關鍵字。如指定關鍵字為“init”的所有提交git log --grep=init
    8. --committer:指定提交者。如指定提交者為"Jack"的所有提交git log --committer=Jack
    9. --pretty:指定顯示格式。如每個提交信息顯示一行。git log --pretty=oneline
      1. 選項可以是oneline,short,medium,full,fuller,email,raw以及format。詳見progit文檔。34頁。
    10. -S:通過查詢文件的變更內容來檢索出指定提交日志.如git log -S xxx
  2. git log [-option] filename:查看指定文件的log日志。filename也可以是分支名。如果分支名與文件名相同,系統會提示錯誤,可通過選項來指定給定的參數是分支名還是文件名
  3. git log --oneline --decorate:查看分支與commit的關系

回退/撤銷等操作命令

git reset用於回退相關操作。reset的三種方式:
介紹詳見:https://www.jianshu.com/p/c2ec5f06cf1a

  1. git reset --hard HEAD^:將工作區,暫存區、倉庫全都恢復到上一個版本。主要用於放棄本地所有的修改。

  2. git reset --soft HEAD^:只將倉庫恢復到上一個版本,工作區和暫存區的內容不變。這個功能主要用來合並多個commit.

  3. git reset --mixed HEAD^:(reset的默認方式)。將倉庫和暫存區恢復到上一個版本,工作區內容不變。

  4. git reset HEAD^:回退所有內容到上一個版本

  5. git reset HEAD^ a.py:回退a.py這個文件的版本到上一個版本

  6. git reset –soft HEAD~3:向前回退到第3個版本

  7. git reset –hard origin/master:將本地的狀態回退到和遠程的一樣

  8. git reset 057dcc:回退到某個版本

  9. git revert HEAD:回退到上一次提交的狀態,按照某一次的commit完全反向的進行一次commit

  10. git reset HEAD CONTRIBUTING.md:將緩沖區的內容撤回到工作區

  11. git checkout -- filename:撤銷工作區中被修改的內容.用於文件還沒有執行git add之前的修改。

git向遠程倉庫提交相關命令

  1. 向遠程分支推送.git push <遠程倉庫名> <本地分支名>:<遠程分支名>:這里的:前后是必須沒有空格的。

    1. 如果省略遠程分支名,則表示將本地分支推送與之存在"追蹤關系"的遠程分支(通常兩者同名),如果該遠程分支不存在,則會被新建.如git push origin master.
    2. 如果省略本地分支名,則表示刪除指定的遠程分支,因為這等同於推送一個空的本地分支到遠程分支。如git push origin :master.它等同於git push origin --delete master
    3. 常見選項如下:
      1. -u remote_name:如果當前分支與多個主機存在追蹤關系,則可以使用 -u 參數指定一個默認主機,這樣后面就可以不加任何參數使用git push.
      2. --force:強制推送。
      3. --force-with-lease:沒有人在上游更新分支內容,時才可以強制推送。
      4. --all:不管是否存在對應的遠程分支,將本地的所有分支都推送到遠程主機.
      5. --delete:用於刪除某個遠程分支。如git push origin --delete <branch_name>
    4. 默認只推送當前分支.
  2. 從遠程分支拉取

    1. git fetch <remote> <branch>:將遠程倉庫拉取到本地。如git fetch origin master
    2. git pull <remote> <branch>:從遠程獲取最新版本並merge到本地。如git pull origin master

使用--force--force-with-lease強制向master分支推送時可能依然會報錯(You are not allowed to force push code to a protected branch on this project.)這是由於gitlab等服務器設置了主分支保護造成的。可以在"Settings" -> “Repository” -> scroll down to “Protected branches”.取消。

如果使用http url推送,每次提交時都會要求輸入用戶名和密碼,為了方便,可以使用git config --global credential.helper cache來緩存。

git合並相關的命令

  1. 合並:git merge --no-ff -m "merged bug fix 101" issue-101
    1. –no-ff:表示普通合並。

git merge --abort:終止合並

合並流程:以A分支向B分支合並為例。

  1. 切換到B分支目錄。git checkout B.
  2. 確保B分支是干凈的。
  3. 合並git merge A
  4. 如果有沖突需要解決沖突。然后commit.
  5. 使用git log查看合並結果

rebase(變基)

變基使得提交歷史更加整潔。你在查看一個經過變基的分支的歷史記錄時會發現,盡管實際的開發工作是並行的,但它們看上去就像是先后串行的一樣,提交歷史是一條直線沒有分叉。

git rebase master:將當前分支變基到maser分支上
git rebase -i HEAD~3

git雜項命令

  1. git help <cmd>:獲取命令的詳細幫助
  2. git add -h:獲取add命令的簡單幫助
  3. git rm filename:刪除某個文件。filename可以是表達式。如
    //*前必須要有\
    git rm log/\*.log
    • 1
    • 2
  4. git rm --cached filename將某個文件從暫存區踢出。使其不受版本管理,這個文件仍然存在於工作區。
  5. git mv file_from file_to:移動文件

git 將修改內容暫存

  1. git stash:把當前工作現場“儲藏”起來,等以后恢復現場后繼續工作.
  2. git stash pop:恢復的同時把stash內容也刪了.
  3. git stash list

git子模塊的使用

子模塊簡單的說就是項目需要包含並使用另一個項目。子模塊允許你將一個git倉庫作為另一個git倉庫的子目錄。它能讓你將另一個倉庫克隆到自己的項目中,同時還保持提交的獨立。

將一個已存在的git倉庫添加為正在工作的倉庫的子模塊:

  1. git submodule add myproject_url.git
    1. 默認情況下,子模塊會將子項目放到一個與倉庫同名的目錄中。如果你想要放到其他地方,那么可以在命令結尾添加一個不同的路徑。如:``.
    2. 執行此命令后,會生成一個.gitmodules的文件,保存着模塊的相關信息。

克隆含有子模塊的倉庫:

  1. 如果我們已經clone了項目,但沒有包含子模塊內容時,使用如下命令:
    1. git submodule init
    2. git submodule update
  2. 當然,可以選擇在clone項目同時clone子模塊,如下
    1. git clone --recurse-submodules myproject_url.git

tag標簽

git tag:查看所有標簽(默認為按字母順序排序)
git tag -l "v1.8.5*":查看感興趣的分支
git tag -a v1.4 -m "my version 1.4":創建標簽
-a:表示帶注釋的標簽
git支持兩種類型的tag:

  1. lightweight:類似分支,不能修改
  2. annotated:帶注釋的tag
    git push origin --tags:推送標簽到remote
    git checkout tag:檢出標簽
    git checkout -b version2 v2.0.0:基於某個標簽創建分支
    git運行外部命令,用別名包裝,外部命令用!修飾
    git config --global alias.visual '!gitk'

git相關文件介紹

每個倉庫都有一個.git的文件,用來管理倉庫。

config文件

config文件:存儲倉庫的配置信息,里面包含了倉庫的遠程地址,分支等信息。

gitignore文件

.gitignore文件可以有多個,每個此文件只負責它一個它的子目錄。

支持正則表達式
[abc]:匹配括號中的任何字符。如a,b,c.
?:匹配單個任意字符
*:跨多個路徑
**:匹配多個任意字符
[0~9]:匹配一個范圍
!:不包括某個文件

eg:

*.a
!lib.a
/TODO
build/
doc/*.txt
doc/**/*.pdf
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM