Git配置和一些經常使用命令

Git:經常使用命令....
  • git clone <repo>
  • git config –list
  • git diff –staged
  • add後,commit前的撤銷:git rm –cached
  • commit後的回滾:git reset –hard commit-id,好比:git reset –hard HEAD

Git是一個分佈式版本控制/軟件配置管理軟件,原來是linux內核開發者林納斯·託瓦茲(Linus Torvalds)爲了更好地管理linux內核開發而創立的。html

Git配置

git config --global user.name "javachen"
git config --global user.email "june.chan@foxmail.com"
git config --global color.ui true
git config --global alias.co checkout
git config --global alias.ci commit
git config --global alias.st status
git config --global alias.br branch
git config -l # 列舉全部配置

用戶的git配置文件在~/.gitconfig,個人配置:java

june@june-mint ~/workspace/snippets/dotfiles $ cat .gitconfig
[user]
email = june.chan@foxmail.com
name = javachen
[color]
ui = auto
[color "branch"]
current = yellow reverse
local = yellow
remote = green
[color "diff"]
meta = yellow bold
frag = magenta bold
old = red bold
new = green bold
[color "status"]
added = yellow
changed = green
untracked = cyan
[alias]
st = "status"
co = checkout
ls = "ls-files"
ci = commit
br = branch
rt = reset --hard
unstage = reset HEAD
uncommit = reset --soft HEAD^
l = log --pretty=oneline --abbrev-commit --graph --decorate
amend = commit --amend
who = shortlog -n -s --no-merges
g = grep -n --color -E
cp = cherry-pick -x
cb = checkout -b
[core]
filemode = true

Git經常使用命令

查看、幫助命令

git help <command> # 顯示command的help
git show # 顯示某次提交的內容
git show $id

查看提交記錄

git log
git log <file> # 查看該文件每次提交記錄
git log -p <file> # 顯示版本歷史,以及版本間的內容差別
git log -p -2 # 查看最近兩次詳細修改內容的diff
git log --stat # 查看提交統計信息
git log --since="6 hours" # 顯示最近6小時提交
git log --before="2 days" # 顯示2天前提交
git log -1 HEAD~3 # 顯示比HEAD早3個提交的那個提交
git log -1 HEAD^^^
git reflog # 查看操做記錄

添加、提交、刪除、找回,重置修改文件

git add <file> # 將工做文件修改提交到本地暫存區
git add . # 將全部修改過的工做文件提交暫存區
git co -- <file> # 拋棄工做區修改
git co . # 拋棄工做區修改
git co HEAD <file> # 拋棄工做目錄區中文件的修改
git co HEAD~3 # 回退三個版本
git ci <file>
git ci .
git ci -a # 將git add, git rm和git ci等操做都合併在一塊兒作
git ci -am "some comments"
git ci --amend # 修改最後一次提交記錄
git rm <file> # 從版本庫中刪除文件
git rm <file> --cached # 從版本庫中刪除文件,但不刪除文件
git mv <file1> <file2> # 重命名文件
git reset --hard HEAD^ # 恢復最近一次提交過的狀態,即放棄上次提交後的全部本次修改
git reset --hard <commit id> # 恢復到某一次提交的狀態
git reset HEAD <file> # 拋棄暫存區中文件的修改
git reset <file> # 從暫存區恢復到工做文件
git reset -- . # 從暫存區恢復到工做文件
git revert <$id> # 恢復某次提交的狀態,恢復動做自己也建立了一次提交對象
git revert HEAD # 恢復最後一次提交的狀態

查看文件diff

git diff <file> # 比較當前文件和暫存區文件差別
git diff
git diff <$id1> <$id2> # 比較兩次提交之間的差別
git diff <branch1> <branch2> # 在兩個分支之間比較
git diff --staged # 比較暫存區和版本庫差別
git diff --cached # 比較暫存區和版本庫差別
git diff --stat # 僅僅比較統計信息
git diff "@{yesterday}" # 查看昨天的改變
git diff 1b6d "master~2" # 查看一個特定版本與倒數第二個變動之間的改變

Git 本地分支管理

查看、切換、建立和刪除分支

git br -r # 查看遠程分支
git br -v # 查看各個分支最後提交信息
git br -a # 列出全部分支
git br --merged # 查看已經被合併到當前分支的分支
git br --no-merged # 查看還沒有被合併到當前分支的分支
git br <new_branch> # 基於當前分支建立新的分支
git br <new_branch> <start_point> # 基於另外一個起點(分支名稱,提交名稱或則標籤名稱),建立新的分支
git br -f <existing_branch> <start_point>	# 建立同名新分支,覆蓋已有分支
git br -d <branch> # 刪除某個分支
git br -D <branch> # 強制刪除某個分支 (未被合併的分支被刪除的時候須要強制)
git co <branch> # 切換到某個分支
git co -b <new_branch> # 建立新的分支,而且切換過去
git co -b <new_branch> <branch> # 基於branch建立新的new_branch
git co -m <existing_branch> <new_branch> # 移動或重命名分支,當新分支不存在時
git co -M <existing_branch> <new_branch> # 移動或重命名分支,當新分支存在時就覆蓋
git co $id # 把某次歷史提交記錄checkout出來,但無分支信息,切換到其餘分支會自動刪除
git co $id -b <new_branch> # 把某次歷史提交記錄checkout出來,建立成一個分支

分支合併和rebase

git merge <branch> # 將branch分支合併到當前分支
git merge origin/master --no-ff # 不要Fast-Foward合併,這樣能夠生成merge提交
git merge --no-commit <branch> # 合併但不提交
git merge --squash <branch> # 把一條分支上的內容合併到另外一個分支上的一個提交
git rebase master <branch> # 將master rebase到branch,至關於:
git co <branch> && git rebase master && git co master && git merge <branch>

Git補丁管理

git diff > ../sync.patch # 生成補丁
git apply ../sync.patch # 打補丁
git apply --check ../sync.patch # 測試補丁可否成功
git format-patch -X # 根據提交的log生成patch,X爲數字,表示最近的幾個日誌

Git暫存管理

git stash # 暫存
git stash list # 列全部stash
git stash apply # 恢復暫存的內容
git stash drop # 刪除暫存區

Git遠程分支管理

git pull # 抓取遠程倉庫全部分支更新併合併到本地
git pull --no-ff # 抓取遠程倉庫全部分支更新併合併到本地,不要快進合併
git fetch origin # 抓取遠程倉庫全部更新
git fetch origin remote-branch:local-branch #抓取remote-branch分支的更新
git fetch origin --tags # 抓取遠程上的全部分支
git checkout -b <new-branch> <remote_tag> # 抓取遠程上的分支
git merge origin/master # 將遠程主分支合併到本地當前分支
git co --track origin/branch # 跟蹤某個遠程分支建立相應的本地分支
git co -b <local_branch> origin/<remote_branch> # 基於遠程分支建立本地分支,功能同上
git push # push全部分支
git push origin master # 將本地主分支推到遠程主分支
git push -u origin master # 將本地主分支推到遠程(如無遠程主分支則建立,用於初始化遠程倉庫)
git push origin <local_branch> # 建立遠程分支, origin是遠程倉庫名
git push origin <local_branch>:<remote_branch> # 建立遠程分支
git push origin :<remote_branch> #先刪除本地分支(git br -d <branch>),而後再push刪除遠程分支

Git遠程倉庫管理

git remote -v # 查看遠程服務器地址和倉庫名稱
git remote show origin # 查看遠程服務器倉庫狀態
git remote add origin git@github:XXX/test.git # 添加遠程倉庫地址
git remote set-url origin git@github.com:XXX/test.git # 設置遠程倉庫地址(用於修改遠程倉庫地址)
git remote rm <repository> # 刪除遠程倉庫
git remote set-head origin master # 設置遠程倉庫的HEAD指向master分支
git branch --set-upstream master origin/master 根據遠程分支 新建本地分支 並關聯相應的分支名
git branch --set-upstream develop origin/develop

實例

## 打patch過程linux

git add .
git status
git diff --cached >XXX.patch
git ci -m 'add patch'

分支策略

在實際開發中,咱們應該按照幾個基本原則進行分支管理:git

首先,master分支應該是很是穩定的,也就是僅用來發布新版本,平時不能在上面幹活;github

那在哪幹活呢?幹活都在dev分支上,也就是說,dev分支是不穩定的,到某個時候,好比1.0版本發佈時,再把dev分支合併到master上,在master分支發佈1.0版本;shell

你和你的小夥伴們每一個人都在dev分支上幹活,每一個人都有本身的分支,時不時地往dev分支上合併就能夠了。緩存


  

轉載自 http://blog.csdn.net/we_shell/article/details/36079679服務器


1. 初始化配置

  1. #配置用戶信息  
  2. $ git config --global user.name "your name"  
  3. $ git config --global user.email you@yourdomain.com  
  4.   
  5. #配置到緩存(默認15分鐘)  
  6. $ git config --global credential.helper cache  
  7. #修改緩存時間    
  8. $ git config --global credential.helper 'cache --timeout=3600'  
  9.   
  10. #開啓顏色顯示  
  11. $ git config --global color.ui true  
  12.   
  13. #設置別名  
  14. $ git config --global alias.co checkout  
  15. $ git config --global alias.ci commit  
  16. $ git config --global alias.st status  
  17. $ git config --global alias.br branch  
  18.   
  19. #設置默認使用的文本編輯器  
  20. $ git config --global core.editor emacs  
  21.   
  22. #列舉全部配置    
  23. $ git config -l   

2. 基本命令

  1. git branch brname master/cid/tag  # 基於某次提交、分支或標籤建立新分支  
  2. git branch -r                     # 顯示遠程分支  
  3. git branch -a                     # 列出全部分支  
  4. git branch -m master mymaster     # 分支重命名 -M 大寫M會覆蓋同名的分支  
  5. git branch  -v                    # 查看各個分支最後提交信息  
  6. git branch  --merged              # 查看已經被合併到當前分支的分支  
  7. git branch  --no-merged           # 查看還沒有被合併到當前分支的分支  
  8. <pre code_snippet_id="412536" snippet_file_name="blog_20140701_2_7193467" name="code" class="plain">git branch -d <span style="font-family: Arial, Helvetica, sans-serif;"><branch>                      </span><span style="font-family: Arial, Helvetica, sans-serif;"># 刪除分支</span>  
  9. git br -D <branch>       # 強制刪除某個分支 (未被合併的分支被刪除的時候須要強制)  
  10.   
  11. git checkout brname            # 切換分支  
  12. git checkout -b brname         # 建立並切換分支  
  13.   
  14. git add <file>      # 將工做文件修改提交到暫存區  
  15. git add .           # 將當前目錄中全部修改過的工做文件提交暫存區  
  16.      
  17. git rm <file>       # 將文件從倉庫中移除,而且從當前目錄中刪除  
  18. git rm <file> --cached  # 將文件從倉庫中移除,但仍然保留在當前目錄中  
  19.   
  20. git mv FileName NewFileName  # 文件重命名  
  21.   
  22. git checkout  -- <file>    # 用暫存區中filename文件來覆蓋工做區中的filename文件  
  23. git checkout <commit> -- <file>  # 用<commit>所指向的提交中filename替換暫存區和工做區中相應的文件  
  24. git checkout -- .     # 或者git checkout . 用暫存區的全部文件直接覆蓋本地文件  
  25.   
  26.   
  27. #重置的默認值是HEAD,而檢出的默認值是暫存區  
  28. git reset <file>    # 將文件的改動撤出暫存區,至關於命令git add <file>的反射操做  
  29. git reset --hard <commit> # 替換引用的指向,替換暫存區,替換工做區  
  30. git reset --soft <commit> # 更改引用的指向(復位版本庫),不改變暫存區和工做區  
  31. git reset --mixed <commit> # (默認)更改引用的指向及重置暫存區,可是不改變工做區  
  32. git reset # 重置暫存區,工做區不會受到影響,引用也未改變,由於引用重置到HEAD至關於沒有重置  
  33. git reset --soft HEAD^ # 工做區和暫存區不改變,可是引用向前回退一次,撤銷最新的提交以便從新提交  
  34. git reset --hard HEAD^ # 完全撤銷最近的提交  
  35.    
  36. git commit -m 「something」 someFile # 提交指定文件  
  37. git commit -a           # 把全部已經跟蹤過的文件暫存,並提交  
  38. git commit -c           # 打開編輯器在已有的提交基礎上編輯修改  
  39. git commit --amend      # 增補提交  
  40. git commit -C HEAD -a —amend # 複用HEAD留言,增補提交(修改小錯誤,而不增長提交記錄,掩蓋本身的小馬虎)  


3. git clean清除未跟蹤的文件

  1. git clean -dn  # 列出那些文件將被清除  
  2. git clean -f   # 清除未跟蹤的文件  
  3. git clean -df  # 清除未跟蹤的文件和目錄  
  4. git clean -dfx # 清除包括.gitignore忽略的全部文件  
  5. git clean -X   # Remove only files ignored by git  
 
   

4. Git倉庫管理

  1. git init  #初始化一個版本倉庫    
  2. git clone git@git:test.git  #Clone遠程版本庫  
  3.   
  4. git remote -v                    # 查看遠程服務器地址和倉庫名稱  
  5. git remote show origin           # 查看遠程服務器倉庫狀態  
  6. git remote add origin git@git:test.git      # 添加遠程倉庫origin  
  7. git remote set-url origin git@git:test.git  # 設置遠程倉庫地址(用於修改遠程倉庫地址)  
  8. git remote rm <repository>          # 刪除遠程倉庫    
  9. git remote set-head origin master   # 設置遠程倉庫的HEAD指向master分支  

5. Git分支管理

  1. git pull                         # 抓取遠程倉庫全部分支更新併合併到本地    
  2. git pull --no-ff                 # 抓取遠程倉庫全部分支更新併合併到本地,不要快進合併    
  3. git fetch origin                 # 抓取遠程倉庫更新    
  4. git merge origin/master          # 將遠程主分支合併到本地當前分支    
  5. git co --track origin/branch     # 跟蹤某個遠程分支建立相應的本地分支    
  6. git co -b <local_branch> origin/<remote_branch>  # 基於遠程分支建立本地分支,功能同上    
  7.      
  8. git push                         # push全部分支    
  9. git push origin master           # 將本地主分支推到遠程主分支    
  10. git push -u origin master        # 將本地主分支推到遠程(如無遠程主分支則建立,用於初始化遠程倉庫)    
  11. git push origin <local_branch>   # 建立遠程分支, origin是遠程倉庫名    
  12. git push origin <local_branch>:<remote_branch>  # 建立遠程分支    
  13. git push origin :<remote_branch>  #先刪除本地分支(git br -d <branch>),而後再push刪除遠程分支  
  14.   
  15. git merge <branch>               # 將branch分支合併到當前分支    
  16. git merge origin/master --no-ff  # 不要Fast-Foward合併,這樣能夠生成merge提交    
  17. git rebase master <branch>  # 將master rebase到branch,至關於git co <branch> && git rebase master && git co master && git merge <branch>  

6. 查看文件diff和log

  1. git diff <file>     # 比較當前文件和暫存區文件差別    
  2. git diff    
  3. git diff <$id1> <$id2> # 比較兩次提交之間的差別    
  4. git diff <branch1>..<branch2> # 在兩個分支之間比較    
  5. git diff --staged   # 比較暫存區和版本庫差別    
  6. git diff --cached   # 比較暫存區和版本庫差別    
  7. git diff --stat     # 僅僅比較統計信息   
  8.   
  9. git log    
  10. git log <file>      # 查看該文件每次提交記錄    
  11. git log -p <file>   # 查看每次詳細修改內容的diff    
  12. git log -p -2       # 查看最近兩次詳細修改內容的diff    
  13. git log --stat      #查看提交統計信息  

7. Git暫存和補丁管理

  1. git stash # 保存當前的工做進度,會分別對暫存區和工做區的狀態進行保存  
  2. git stash [save [--patch] [-k|--[no]keep-index] [-q|--quiet] [<message>]] # 是第一條git stash命令的完整版,使用參數--patch會顯示工做區和HEAD的差別, 使用-k或者--keep-index參數,在保存進度後不會將暫存區重置,默認會將暫存區和工做區強制重置。  
  3. git stash list # 顯示進度列表  
  4. git stash pop [--index] [<stash>] # 默認恢復最新保存的進度,並從stash list中清除; 提供<stash>參數,則從該<stash>中恢復; 選項--index除了恢復工做區的文件外,還嘗試恢復暫存區  
  5. git stash apply [--index] [<stash>] # 除了不刪除恢復的進度以外,其他和git stash pop 命令同樣  
  6. git stash drop [<stash>] #刪除一個存儲的進度,默認刪除最新的進度  
  7. git stash clear  # 刪除全部存儲的進度  
  8. git stash branch <branchname> <stash> # 基於進度建立分支  
  9.   
  10. git diff > ../sync.patch         # 生成補丁      
  11. git apply ../sync.patch          # 打補丁      
  12. git apply --check ../sync.patch  #測試補丁可否成功  




http://git-scm.com/book/zh
相關文章
相關標籤/搜索