git 經常使用命令

注:本文不適合新手,只是方便查閱。新手能夠參考廖雪峯的教程:[www.liaoxuefeng.com/wiki/896043…]html

git log參數太多了,又很好用,這裏放上參數大全:[www.cnblogs.com/bellkosmos/…]git

方便起見,本文舉例文件名爲text.txt。若實際中文件名中有空格,請用引號包圍。github

首先了解下git維護的三塊內容:工做區-->緩存區stage-->當前版本HEAD。緩存

本地向經常使用命令(一個大體的分類):

  • 修改全局名稱:git config --global user.name "cm"
  • 修改全局郵箱:git config --global user.email "@example.com"
  • 建立本地倉庫:git init
  • 提交單個修改至緩存區(新增也算修改):git add text.txt,強制添加(ignore的也行):git add -f text.txt
  • 提交全部修改至緩存區:git add .
  • 從緩存區提交到HEAD:git commit -m "一些些說明",每次提交都有commit.id
  • 刪除文件:提交刪除文件至緩存區git rm text.txt-->提交到HEADgit commit -m "一些些說明"
  • 查看緩存區狀態:git status
  • 查看提交日誌:git log(版本回退以後,這裏的提交日誌也會減小哦),精簡版內容:git log --pretty=online,帶分支合併圖內容--graph
  • 顯示最後一次提交:git log -1
  • 把提交歷史整理成一條線:git rebase
  • 查看全部歷史命令:git reflog(要是遇到什麼奇奇怪怪的東西,按Q就退出了)
  • 撤銷工做區的修改或刪除:git checkout -- text.txt(本質是從HEAD拷貝了一份新的text.txt替換。不影響緩存區內容),撤銷所有git checkout -- *
  • 從緩存區放回工做區(回到git add text.txt命令前):git reset HEAD text.txt
  • 版本回退或前進(commit了沒辦法呀),同時更新工做區:
    • git reset --hard HEAD^HEAD^表示上個版本,HEAD^^表示上上個版本,以此類推。也可能夠簡寫:HEAD~100表示100個^
    • git reset --hard <commit.id> 根據commit.id選擇想到達的版本
    • 一些些提示:回退前能夠git log查看版本。回退完後悔了想前進,能夠用git reflog查看commit.id再前進;操做完,由於工做區和HEAD同步了嘛,因此緩存區很「乾淨
  • 查看當前工做區和HEAD中的區別:git diff HEAD -- text.txt

分支相關命令:

  • 建立分支名爲dev:git branch dev
  • 切換分支到dev:git switch dev或者git checkout dev
  • 建立+切換當前分支爲dev:git switch -c dev或者git checkout -b dev
  • 以遠程分支dev爲副本建立+切換分支:git checkout -b dev origin/dev
  • 查看分支:git branch(列出了全部分支,標記*爲當前分支),添加-vv參數能看到關聯的遠程分支
  • 把dev分支的內容合併到當前分支:git merge dev
  • 禁用fast forward合併:git merge --no-off dev,由於要進行一次commit,因此通常加上-m參數。
  • 解決衝突相關:能夠git status中看到衝突了。手動修改後提交至HEAD。提交後能夠用git log --graph看到分支合併圖。結合上條例子,dev不變。
  • 刪除dev分支:git branch -d dev,強行刪除沒被合併的分支,把小d換成大D
  • 保存工做現場(多用於切換分支前):git stash
  • 查看保存的工做現場:git stash list
  • 恢復工做現場:
    • git stash apply:恢復工做現場,但不刪除stash內容不刪除,須要經過git stash drop刪除stash。能夠查看git stash list後逐條恢復,如git stash apply stash@{0}
    • git stash pop:恢復並刪除stash
  • 複製特定的提交到當前分支再提交一遍:git cherry-pick <commit.id>

遠程倉庫相關命令:

  • 本地倉庫關聯遠程倉庫:git remote add <遠程倉庫名> <遠程倉庫地址>(通常遠程倉庫名取爲origin)
  • 推送到遠程倉庫origin對應的分支:git push origin master, master是本地分支名,push時git會把遠程同名分支關聯起來,因此遠程分支名也是master。 第一次帶上-u參數,之後操做就方便了,只須要在當前分支下git push就好了,可用git branch -vv查看默認推送狀況。(可能會出現SSH警告,輸入yes就行了)
  • 從遠程倉庫克隆倉庫到本地:git clone <遠程倉庫地址>(不須要本地額外建倉庫,直接推就好了)
  • 查看遠程倉庫信息:git remote,帶上-v參數顯示更詳細的信息
  • 獲取遠程分支的提交:git pull origin master,至關於git fetch origin/master+git merge origin/mastergit pull是拉取全部分支。 (若是出現no track information提示,能夠先用git branch --set-upstream-to <branch-name> origin/<branch-name>建議本地與遠程分支的連接)。
  • 刪除遠程倉庫關聯:git remote rm origin

標籤相關命令(標籤老是和commit掛鉤):

  • 新建默認標籤:git tag <標籤名>,默認標籤是打在最新一次的提交上的
  • 新建指定提交的標籤:git tag <標籤名> <commit.id>
  • 查看全部標籤:git tag,標籤是按字母排序的
  • 查看單個標籤具體信息:git show <標籤名>
  • 新建帶說明的標籤:git tag -a <標籤名> -m "一些些說明" <commit.id>
  • 刪除本地標籤:git tag -d <標籤名>
  • 推送標籤到遠程:git push origin <標籤名>
  • 推送全部標籤到遠程:git push origin --tags
  • 刪除已經推送到遠程的標籤:先刪本地git tag -d <標籤名>-->再刪遠程git push origin :refs/tags/<標籤名>

自定義git相關命令:

忽略特殊文件

  • 配置.gitignore模板:[github.com/github/giti…]
  • 查看被忽略文件在.gitignore文件哪一項:git check-ignore -v <文件名>

配置別名(偷懶必備)

  • 配置別名:git config --global alias.<別名> <現名>
  • 很少說了,上來先配置一個:git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

最後寫給本身的注意事項:

HEAD改變後會直接致使其它兩塊內容的改變。 工做區改變後須要一步步保存到HEAD。app

master是主分支;HEAD指向的是當前分支。注意這二者的關係。全部的操做默認在當前分支下進行。fetch

push時本地和遠程分支默認須要同名,git也會自動追蹤遠程同名分支。特意改爲不一樣名會很麻煩,不建議。日誌

相關文章
相關標籤/搜索