git

WIP=work in progress 使用說明原文

文件狀態: untracked, unmodified(git commited), modified, staged/cached(git added)

HEAD: the head of the current branch. Last commit snapshot, next parent。“提交~”表示其父提交,後面可再加數字表示其前幾提交;類似的,^表示其原始提交。

Index: Proposed next commit snapshot ↑commit ↓reset --soft HEAD~

working tree: Sandbox ↑stage ↓(from Index) reset ↓(from HEAD) reset HEAD~

clean working tree: ↑modify ↓(from HEAD) reset --hard HEAD~

引自Git遠程操作詳解

 

^{reference}或--not {reference}表示非該引用

{reference}^{number} 表示指定引用後指定數目的提交,默認爲1. “引用”如HEAD或分支名。^能連續多次,連續兩次與~作用相同,^與~也能混合使用。

{reference}..{reference}表示兩個引用之間的所有提交,引用默認爲HEAD。

{reference}...{reference}表示兩個引用之一且非兩個同時的所有提交

 

簡要顯示狀態:git status -s

 

不統計不在庫中的文件,以加速狀態顯示:git status -uno

.gitignore:星號開始的行被忽略;目錄名以斜線結束;以歎號開始的行不被git忽略。

將staged與上次的提交比較:git diff --staged

與已經staged狀態比較:git diff --cached

git difftool 顯示圖形界面的git diff

# to use vim for diff
git config diff.tool vimdiff
# to edit all files in a row
git config --global difftool.prompt false
# git d to invoke git difftool
git config --global alias.d difftool

建立初始庫:git init

取庫:git clone 用戶名@地址[:端口]/路徑 [--mirror/reference=目錄]

mirror參數表示成爲遠端的鏡像,下次取時用reference指明之前的目錄,與遠端相同的代碼就會從本地取。

 

git add -i 顯示代碼狀態,並可選擇更新、添加、比較、回退、做補丁。回答序號時如果需要多選 ,則用逗號分隔,直接回車後才確認:如選擇更新,然後寫要更新的文件序號(多個可用逗號分隔)回車,然後可再繼續寫,最後直接回車,才確認操作。選擇差別後,先選擇文件,才顯示其差別。

add和reset 命令支持--patch參數,可選擇操作的具體內容。

 

git commit -m "標題"

 

git commit -a=git add; git commit,但是不增加新文件

git commit --amend

 

git rm,如果不想實際刪除本地的文件,則加--cached參數;可用通配符。

git mv

批量修改提交記錄

git rebase -i,將需要改的提交由pick改爲edit。對每個回滾的提交進行修改、git commit --amend、git rebase --continue

保存

保存當前狀態以便切換分支:git stash [save],如果也需要保存不在庫(index)中的(untracked)文件,加-u參數。加--patch參數則會逐個文件詢問是否保存。

顯示保存的狀態:git stash list

取回(重現)保存的狀態:git stash apply 名字形如stash@{0},默認爲最近的一個保存。然後,git stash --index,可繼續將之前已經stage的文件(git added)恢復狀態。

刪除保存的狀態:git stash drop

git stash pop=git stash apply; git stash drop

 

恢復

回退提交:git reset,後面寫提交(回退到該提交),可加文件名,默認爲HEAD,則與add相反,unstaging,修改Index;可加參數--soft或--hard,見本文開始處描述。

git revert,與commit相反,後面加提交號:是回退該提交,而非回退到該提交!失敗後,加參數:--continue繼續;--abort取消;--quit中止。

清空本地修改:git clean,參數-i表示需要提問確認

刪除不在庫中的文件:git clean -f -d,如果也要刪除在.gitignore中的文件,再加-x參數。

git checkout 如果寫提交號,而不寫文件名,則會移動當前HEAD,並處於分離分支狀態,可繼續以“git checkout -b 分支名”建立分支。
 

日誌

git log -數字 指定顯示修改的數目

git log -p 顯示所有修改詳情

git log --name-only 顯示修改的文件名,如果還要顯示各文件修改的行數,則改用--stat參數

限制顯示的提交的時間:git log --since=時間,since可換爲until或before或after。

git log --author,author亦可換爲commiter。

git log --grep 搜索提交的標題。如果同時使用grep與author,則還需要--all-match參數,否則爲滿足兩者條件的任一條件,而非其交集。

git log -S搜索提交的內容

git log --graph 顯示關係樹

git format-patch 根據提交生成補丁文件,其控制生成對象範圍的參數與log命令的類似。生成出的文件用git apply {文件名}使用

 

分支與遠端

 

 

  • 新建本地分支:git checkout -b 分支名 = git branch 分支名; git checkout 分支名
    新建對應指定遠端分支的本地分支:git checkout -b 本地分支名 遠端名/遠端分支名
  • 在本地分支間切換:git checkout 分支名
    當該分支名在遠端也存在時,則本地分支會對應該遠端分支
  • 切換本地分支對應的遠端分支:git branch -u 遠端名/遠端分支名
  • 合入所有修改:在需要合入的目標分支上,git merge 需要合入的源分支名
    或,在臨時分支上,git rebase 最終分支名,之後,最終分支上fast forward就能得到臨時分支上的修改
  • 刪除本地分支:git branch -d 分支名
  • 合入修改有衝突時:用git mergetool修改後commit
  • 列本地分支:git branch,第一列爲星號的是當前分支(HEAD),其它爲空格
    git branch -v還會顯示各分支最後一個提交的標題
    git branch -vv還會再顯示各對應的遠端分支名
    參數--merged和--no-merged控制只顯示已經(包括當前分支)或尚未(這些分支不允許直接用-d參數刪除,需要用-D)合併到當前分支的分支
  • origin是默認的遠端(服務器)的名字
    master是默認的分支名。所以本地分支默認是master,遠端是origin/master
  • 添加遠端名字:git remote add 名字 地址
  • 顯示遠端名:git remote,加參數-v可顯示地址;加參數show顯示詳情,後面可再加遠端名,默認是origin;加三個參數rename、原名、新名,可更改遠端名;加兩個參數rm、名,可刪除到遠端的關聯。
  • 獲取遠端修改(不合入):git fetch,後面可加遠端名(當非origin時)
    --all參數可將獲取所有遠端的修改
  • 合入遠端修改:git pull=git fetch;git merge或rebase
  • 提交到遠端:git push 遠端名 本地分支[:遠端分支],如果兩個名相同,則不用寫可選部分
  • 刪除遠端分支:git push 遠端名 --delete 分支名

 

標籤tag

 

輕量級lightweight標籤指向指定提交:添加標籤用git tag 標籤名。

註釋型annotated標籤包含打標籤人的信息等:添加標籤用git tag -a 標籤名,後面加加參數-m和標題字符串。

打標籤時可加提交號作爲參數對該提交打標籤。

顯示所有標籤: git tag, 結果按字母排序。加參數-l後加字符串可對結果進行過濾。

git show 後面可加標籤名

提交到遠端:git push 遠端名 標籤名或--tags表示所有標籤

獲取內容:如git checkout -b 分支名 標籤名

 

命令簡化

git config --global alias.簡化名 命令字符串

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