倉庫操作
新建倉庫
git init
實質(zhì):新建一個.git目錄译仗,所有g(shù)it有關(guān)的信息都在里面碧查。
克隆倉庫
git clone
查看遠程倉庫
git remote -v
添加遠程倉庫
git remote add [name] [url]
name 通常為origin
刪除遠程倉庫
git remote rm [name]
修改遠程倉庫
git remote set-url --push [name] [newUrl]
拉取遠程倉庫
git pull [remoteName] [localBranchName]
推送遠程倉庫
git push [remoteName] [localBranchName]
本地分支操作
查看分支
git branch
創(chuàng)建分支
git branch branchName
切換分支
git checkout branchName
刪除分支
git branch -d branchName
合并分支
git checkout master
git merge dev
文件操作
查看狀態(tài)
git status
添加追蹤
git add filename
git add .
刪除文件
git rm
移動文件
git mv file the/new/path/
重命名文件
git mv file newfile
提交修改
git commit -m 'commit log'
遠程分支操作
獲取遠程分支
git checkout -b [name] [remoteName]
例如:
git checkout -b myNewBranch origin/dragon
git 1.6版本以后轧钓,有簡化的命令:
git checkout --track origin/[remoteName]
直接在本地檢出與遠程分支名字一致的分支趋箩。
跟蹤遠程分支
git branch --set-upstream-to=origin/<remoteBranchName> localBranchName
備注:如何查看跟蹤關(guān)系妒貌,使用如下命令
git config --list
拉取遠程分支到本地
git pull origin remoteBranchName:localBranchName
推送本地分支到遠程
git push origin localBranchName:remoteBranchName
如果remoteBranchName遠程分支不存在钞瀑,則在遠端自動創(chuàng)建俩垃。
推送當(dāng)前分支到遠程
git push origin remoteBranchName
同理励幼,如果remoteBranchName遠程分支不存在,則在遠端自動創(chuàng)建口柳。
備注:通常我們都直接用git push苹粟,不帶后面的參數(shù)(建立好了追蹤關(guān)系)。
刪除遠程分支
git push origin :remoteBranchName
git配置文件
用戶配置文件位置
~/.gitconfig
查看配置信息
git config --list
配置用戶名和密碼
git config --global user.name gzchenquanbin
git config --global user.email gzchenquanbin@corp.netease.com
開啟顏色顯示
git config --global corlor.ui true
配置編輯器
git config --glabal core.editor emacs #默認為vi或者vim
配置比較工具
git config --global merge.tool vimdiff
其它技巧
查看差異
git diff #顯示的是工作區(qū)和暫存區(qū)的差別
git diff --stat #只顯示差別的統(tǒng)計信息跃闹,不詳細顯示
git diff --cached/staged #顯示的是暫存區(qū)和倉庫的差別六水,也就是下次commit的內(nèi)容
git diff HEAD #顯示的是工作區(qū)和倉庫的差別
git diff HEAD file #顯示的是工作區(qū)和倉庫指定文件(目錄)的差別
git diff commitId file #顯示的是工作區(qū)
git diff commitId1 commitId2 #比較兩次commit之間的差異
git diff commitId1 commitId2 file #比較兩次commit之間某個文件的差異
git diff branch1 branch2 #比較兩個分支上的最新提交
git diff branch #比較當(dāng)前分支與指定分支的當(dāng)前目錄差異
git diff branch file #比較當(dāng)前分支與指定分支的指定文件(目錄)差異
查看提交日志
git log
git log -2 #查看最近兩次的提交日志
查看某次提交的詳細修改
git show commitId
修改撤銷
-
只在工作區(qū)修改,還沒有add到暫存區(qū)
git checkout -- file
-
已經(jīng)add到暫存區(qū)
git reset HEAD file
備注:之前的修改被回退到工作區(qū)
-
已經(jīng)commit到倉庫
git reset --hard HEAD^ #回退到上一個提交 git reset --hard HEAD^^ #回退到上上一個版本 git reset --hard HEAD~10 #往前回退10個版本 git reset --hard commitID #指向任意一個提交
-
已經(jīng)push到遠端
sorry,無能為力了
藏匿與恢復(fù)
git stash
git stash pop
.gitignore文件
項目中經(jīng)常會生成一些Git系統(tǒng)不需要追蹤(track)的文件辣卒。典型的是在編譯生成過程中 產(chǎn)生的文件或是編程器生成的臨時備份文件掷贾。
當(dāng)然,你不追蹤(track)這些文件荣茫,可以 平時不用"git add"去把它們加到索引中想帅。 但是這樣會很快變成一件煩人的事,你發(fā)現(xiàn) 項目中到處有未追蹤(untracked)的文件; 這樣也使"git add ." 和"git commit -a" 變得實際上沒有用處啡莉,同時"git status"命令的輸出也會有它們港准。
這時,你可以在你的頂層工作目錄中添加一個叫".gitignore"的文件咧欣,來告訴Git系統(tǒng)要忽略 掉哪些文件浅缸,下面是文件內(nèi)容的示例:
# 以'#' 開始的行,被視為注釋.
# 忽略掉所有文件名是 foo.txt 的文件.
foo.txt
# 忽略所有生成的 html 文件,
*.html
# foo.html是手工維護的魄咕,所以例外.
!foo.html
# 忽略所有.o 和 .a文件.
*.[oa]
#忽略文件夾(所有的.idea子目錄)
.idea/
# 如下的只忽略根目錄下的.idea目錄
/.idea/
.gitignore不生效怎么辦
有時候在項目開發(fā)過程中衩椒,突然心血來潮想把某些目錄或文件加入忽略規(guī)則,按照上述方法定義后發(fā)現(xiàn)并未生效,原因是.gitignore只能忽略那些原來沒有被track的文件毛萌,如果某些文件已經(jīng)被納入了版本管理中苟弛,則修改.gitignore是無效的。那么解決方法就是先把本地緩存刪除(改變成未track狀態(tài))阁将,然后再提交:
git rm -r --cached .
git add .
git commit -m 'update .gitignore'