經常使用Git命令彙總

經常使用Git命令彙總

跟着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中3種狀態的一些操做

#將工做區的修改提交到暫存區
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時常常用到

文件直接比較差別Diff

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

相關文章
相關標籤/搜索