Git經常使用命令速查表

【名詞】

  • master :默認開發分區
  • origin :默認遠程版本庫
  • Index / Stage :暫存區
  • Workspace :工做區
  • Repository :倉庫區(本地倉庫)
  • Remote :遠程倉庫

1、新建代碼庫

# 在當前目錄新建一個 Git 代碼庫
$ git init
# 新建一個目錄,將其初始化爲 Git 代碼庫
$ git init [project-name]
# 下載一個項目和它的整個代碼歷史
$ git clone [url]

2、配置

Git 的配置文件爲 .gitconfig,它能夠自用戶主目錄(全局配置),也能夠在項目目錄下(項目配置)。git

# 顯示當前的 Git 配置
$ git config --list
# 編輯 Git 配置文件
$ git config -e [--global]
# 設置提交代碼時的用戶信息
$ git config [--global] user.name "[name]"
$ git config [--global] user.email "[email address]"

3、增長、刪除、修改文件

# 查看狀態
$ git status
# 查看變動內容
$ git diff
# 添加指定文件到暫存區
$ git add [file1] [file2] ...
# 添加指定目錄到暫存區,包括子目錄
$ git add [dir]
# 添加當前目錄的全部文件到暫存區
$ git add .
# 添加每一個變化前,都會要求確認
# 對於同一個文件的多處變化,能夠實現分次提交
$ git add -p
# 刪除工做區文件,而且將此次刪除放入暫存區
$ git rm [file1] [file2] ...
# 中止追蹤指定文件,但該文件會保留在工做區
$ git rm --cached [file]
# 更名文件,而且將這個更名放入暫存區
$ git mv [file-original] [file-renamed]

4、代碼提交

# 提交暫存區到倉庫區
$ git commit -m [message]
# 提交暫存區的指定文件到倉庫區
$ git commit [file1] [file2] ... -m [message]
# 提交工做區自上次 commit 以後的變化,直接到倉庫區
$ git commit -a
# 提交時顯示全部 diff 信息
$ git commit -v
# 使用一次新的 commit,替代上一次提交
# 若是代碼沒有任何新變化,則用來改寫上一次 commit 的提交信息
$ git commit --amend -m [message]
# 重作上一次 commit,幷包括指定文件的新變化
$ git commit --amend [file1] [file2]

5、分支

# 顯示全部本地分支
$ git branch
# 列出全部遠程分支
$ git branch -r
# 列出全部本地、遠程分支
$ git branch -a
# 新建一個分支,但依然停留在當前分支
$ git branch [branch-name]
# 新建一個分支,與指定的遠程分支創建追蹤關係
$ git branch --track [branch] [remote-branch]
# 刪除分支
$ git branch -d [branch-name]
# 刪除遠程分支
$ git push origin --delete [branch-name]
$ git branch -dr [remote/branch]
# 新建一個分支,並切換到該分支
$ git checkout -b [branch]
# 切換到指定分支,並更新工做區
$ git checkout [branch-name]
# 切換到上一個分支
$ git checkout -
# 創建追蹤關係,在現有分支與指定的遠程分支之間
$ git branch --set-upstream [branch] [remote-branch]
# 合併指定分支到當前分支
$ git merge [branch]
# 衍[yǎn] 合指定分支到當前分支
$ git rebase [branch]
# 選擇一個 commit,合併進當前分支
$ git rebase [branch]

【 merge 與 rebase 區別】

做者:Michaelliu_dev
來源:CSDN
原文:https://blog.csdn.net/liuxiao...
版權聲明:本文爲博主原創文章,轉載請附上博文連接!fetch

假設有以下圖所示倉庫,該倉庫有master和develop兩個分支,且develop是在(3.added merge.txt file)commit處從master拉出來的分支。
clipboard.png
merge,假設如今HEAD在(6.added hello.txt file)處,也就是在master分支最近的一次提交處,此時執行git merge develop, 結果以下圖所示。
clipboard.png
工做原理就是:git 會自動根據兩個分支的共同祖先即 (3.added merge.txt file)這個 commit 和兩個分支的最新提交即 (6.added hello.txt file) 和 (5.added test.txt file) 進行一個三方合併,而後將合併中修改的內容生成一個新的 commit,即圖二的(7.Merge branch ‘develop’)。
這是merge的效果,簡單來講就合併兩個分支並生成一個新的提交。
rebase,HEAD在(6.added hello.txt file)處,如今執行git rebase develop,結果以下圖所示。
clipboard.png
能夠看見develop分支分出來分叉不見了。
下面來解釋一下它的工做原理:
在執行git rebase develop以前,HEAD在(6.added hello.txt file)處,當執行rebase操做時,git 會從兩個分支的共同祖先 (3.added merge.txt file)開始提取 當前分支(此時是master分支)上的修改,即 (6.added hello.txt file)這個commit,再將 master 分支指向 目標分支的最新提交(此時是develop分支)即(5.added test.txt file) 處,而後將剛剛提取的修改應用到這個最新提交後面。若是提取的修改有多個,那git將依次應用到最新的提交後面,以下兩圖所示。

圖四爲初始狀態
clipboard.pngurl

圖五爲執行rebase後的狀態
clipboard.png
簡單來講,git rebase提取操做有點像git cherry-pick同樣,執行rebase後依次將當前的提交cherry-pick到目標分支上,而後將在原始分支上的已提取的commit刪除。spa

6、標籤

# 列出全部本地標籤
$ git tag
# 基於最新提交建立標籤
$ git tag <tagname>
# 刪除標籤
$ git tag -d <tagname>
# 刪除遠程tag
$ git push origin :refs/tags/[tagName]
# 查看標籤信息
$ git show [tag]
# 提交指定tag
$ git push [remote] [tag]
# 提交全部tag
$ git push [remote] --tags
# 新建一個分支,指向某個tag
$ git checkout -b [branch] [tag]

7、查看信息

# 顯示全部變動的文件
$ git status
# 顯示當前分支的版本歷史
$ git log
# 顯示 commit 歷史,以及每次 commit 發生變動的文件
$ git log --stat
# 搜索提交歷史
$ git log -S [keyword]
# 顯示某個 commit 以後的全部變更,每一個 commit 佔據一行
$ git log [tag] HEAD --pretty=format:%s
# 顯示某個 commit 以後的全部變更,其「提交說明」必須符合搜索條件
$ git log [tag] HEAD --grep feature
# 顯示某個文件的歷史版本,包括文件更名
$ git log --follow [file]
$ git whatchanged [file]
# 顯示指定文件相關的每一次diff
$ git log -p [file]
# 顯示過去5次提交
$ git log -5 --pretty --oneline
# 顯示全部提交過的用戶,按提交次數排序
$ git shortlog -sn
# 顯示指定文件是什麼人在什麼時間修改過
$ git blame [file]
# 顯示暫存區和工做區的差別
$ git diff
# 顯示暫存區和上一個 commit 的差別
$ git diff -cached [file]
# 顯示工做區與當前分支最新 commit 之間的差別
$ git diff HEAD
# 顯示兩次提交之間的差別
$ git diff [first-branch]...[second-branch]
# 顯示今天寫了多少行代碼
$ git diff --shortstat "@{0 day ago}"
# 顯示某次提交的元數據和內容變化
$ git show [commit]
# 顯示某次提交發生變化的文件
$ git show --name-only [commit]
# 顯示某次提交時,某個文件的內容
$ git show [commit]:[filename]
# 顯示當前分支的最近幾回提交
$ git reflog

8、遠程操做

# 下載遠程倉庫的全部變更
$ git fetch [remote]
# 取回遠程倉庫的變化,並與本地分支合併
$ git pull [remote] [branch]
# 顯示全部遠程倉庫
$ git remote -v
# 顯示某個遠程倉庫的信息
$ git remote show [remote]
# 顯示增長一個新的遠程倉庫,並命名
$ git remote add [shortname] [url]
# 上傳本地指定分支到遠程倉庫
$ git push [remote] [branch]
# 前行推送當前分支到遠程倉庫,即便有衝突
$ git push [remote] --force
# 推送全部分支到遠程倉庫
$ git push [remote] --all
# 刪除遠程分支或標籤
$ git push <remote> :<branch/tag-name>
# 上傳全部標籤
$ git push --tags

9、撤銷

# 撤銷工做目錄中全部 未提交文件的修改內容
$ git reset --hard HEAD
# 撤銷指定的 未提交文件的修改內容
$ git checkout HEAD <file>
# 撤銷指定的提交
$ git revert <commit>
# 退回到以前 1 天的版本
$ git log --before="1 days"
# 恢復暫存區的指定文件到工做區
$ git checkout [file]
# 恢復某個 commit 的指定文件到暫存區和工做區
$ git checkout [commit] [file]
# 恢復暫存區的全部文件到工做區
$ git checkout .
# 重置暫存區的指定文件,與上一次 commit 保持一致,但工做區不變
$ git reset [file]
# 重置暫存區與工做區,與上一次 commit 保持一致
$ git reset --hard
# 重置當前分支的指針爲指定commit,同時重置暫存區,當工做區不變
$ git reset [commit]

# 重置當前分支的 HEAD 爲指定 commit,同時重置暫存區和工做區,與指定 commit 一致
$ git reset --hard [commit] .net

# 重置當前分支的 HEAD 爲指定 commit,但保持暫存區和工做區不變
$ git reset --keep [commit]
# 新建一個 commit,用來撤銷指定commit
# 後者的全部變化都將被前者抵消,而且應用到當前分支
$ git revert [commit]
# 暫時將未提交的變化移除,隨後再移入
$ git stash
$ git stash pop

10、其餘

# 生成一個可供發佈的壓縮包
$ git archive
相關文章
相關標籤/搜索