跟着R哥來到了新公司(一個從硬件向互聯網轉型中的公司),新公司之前的代碼基本是使用SVN作版本控制,甚至有些代碼沒有作版本控制,因此R哥叫HG作了一次Git分享,準備把公司全部的代碼用Git做版本控制。平時本身雖然每天使用Git,可是總感受知識有些零散,因而彙總了一些經常使用的Git命令。git
--system #系統級別 --global #用戶全局 --local #單獨一個項目 git config --global user.name "xxxx" #用戶名 git config --global user.email "xxxx@xxx.com" #郵箱 git config --global core.editor vim #編輯器 git config --global alias.st status #按這種方法,配置別名 git config -l #列舉全部配置
#將工做區的修改提交到暫存區 git add <file> git add . #------------------------------------------ #將暫存區的內容提交到版本庫 git commit <file> git commit . git commit -a #包括git add/ git rm /git commint 這三個操做,全部通常在操做工做區的時候,直接刪除了文件,而不是使用git rm的,最後提交是能夠用這個,以下 #git commit -am "提交信息" git commit -amend #修改最後一次提交的信息 #------------------------------------------ # 拋棄工做區修改(使用當前暫存區的內容狀態去覆蓋工做區,從而達到拋棄工做區修改的做用) git checkout <file> git checkout . #------------------------------------------ #改變暫存區的修改(實際上是重置HEAD,將指定版本庫的內容狀態去覆蓋暫存區,從而達到暫存區的改變) git reset <file> #從暫存區恢復到工做區(不指定版本id,則默認爲最後一次提交的版本id) git reset . #從暫存區恢復到工做區 git reset $id # 恢復到指定的提交版本,該$id以後的版本提交都恢復到工做區 git reset --hard $id #恢復到指定的提交版本,該$id以後的版本提交所有會被拋棄,將不出如今工做區 #注:若是不當心使用了錯誤的HEAD重置,會發現HEAD指向了重置的版本id,該版本以後的版本提交都不見了,使用git log也沒法找到,那麼怎麼恢復呢?使用下面兩個命令 git reflog show master | head #會顯示全部的版本記錄 git reset --hard $id #從新重置,至於--hard,請根據你時候將改變的內容放到工做區仍是直接拋棄進行選擇 #------------------------------------------ #恢復某次提交(實際上是某提提交的回滾操做,不影響其餘的提交,所產生的效果建立一個新版本提交去回滾將指定的提交刪除,包括產生的差別文件不會出如今工做區,而是直接被拋棄) git revert <$id> git revert HEAD #這裏有一個很好的講解revert與reset的差別:git reset 是把HEAD向後移動了一下,而git revert是HEAD繼續前進,只是新的commit的內容和要revert的內容正好相反,可以抵消要被revert的內容。 #------------------------------------------ #刪除文件的幾種方法(貌似Git2.0後有了變化) #第一種直接在工做區刪除 rm your_file #直接在工做區刪除文件 git add -u . #將有改動的都提交到暫存區(包括修改的,刪除的等操做),貌似git2.0 不加 -u 參數也能夠 git commint -m "message" #提交版本庫 #第二種方法直接在工做區刪除 rm your_file #直接在工做區刪除文件 git commit -am "message" #這個在前面提過,直接能夠提交版本庫,-a會包括包括git add/ git rm /git commint 這三個操做 #第三種方法使用git rm git rm <file> #不只在工做區將文件刪除,同時將該刪除操做提交到暫存區 git commint -m "message" #提交版本庫 #關於git rm的其餘補充 git rm --cached <file> #從暫存區中除去該文件,git將再也不跟蹤該文件的變動,但仍然在工做區內,在須要.gitignore時常常用到
git diff git diff <file> #比較工做區與暫存區文件的差別 git diff --cached # 比較暫存區和版本庫差別 git diff <$id1> <$id2> # 比較兩次提交之間的差別 git diff <branch1>..<branch2> # 在兩個分支之間比較
git branch -r #查看遠程分支 git branch new_branch_name #新建一個分支 git branch --merged #查看已經被合併到當前分支的分支 git branch --no-merged #查看未被合併到當前分支的分支 git checkout branch_name #切換分支 git checkout -b branch_name #建立分支並切換 git branch -d branch_name #刪除分支 git branch -D branch_name #強制刪除分支 git push origin :branch-name #刪除遠程分支(先在本地刪除該分支),原理是把一個空分支push到server上,至關於刪除該分支。 #從遠程clone一個項目,雖然遠程上該項目是有分支的,但clone下來後發現只有master分支,解決: git checkout -b not_master_branch origin/not_master_branch #本地建立一個分支,指向對應的遠程分支 git pull origin not_master_branch #將遠程的not_master_branch分支pull下來 git push origin not_master_branch #將修改後的not_master_branch分支push到遠程的not_master_branch
git remote -v # 查看遠程服務器地址和倉庫名稱 git remote show origin # 查看遠程服務器倉庫狀態 git remote add origin git@github:robbin/robbin_site.git # 添加遠程倉庫地址 git remote set-url origin git@github.com:robbin/robbin #修改遠程地址 git remote rm #刪除遠程創庫地址
git pull #=git fetch + git merge git fetch #拉取 git merge #合併 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 stash #將工做區作的修改暫存到一個git棧中 git stash list #查看棧中全部暫存 git stash apply <暫存編號> #回覆對應編號暫存到工做區,若是不指定編號爲棧頂的,注意:這些暫存還在棧中 git stash pop #將棧頂的暫存,恢復到工做區,並從棧中彈出 git stash clear #清空暫存棧
git clone --bare git_url_path #clone的時候,將其建立成遠程創庫 git --bare init #初始化項目的時候,建立成遠程創庫
部分參考Robbin Fan大神的博客《Git經常使用命令備忘》github
參考http://www.jianshu.com/p/0f2ffa404ac1#vim