創建版本庫
通過git init
命令把這個目錄變成Git可以管理的倉庫
把文件添加到版本庫
git add
把文件提交到倉庫
git add .
則是將該目錄下的所有的文件或文件夾遞歸地提交到倉庫
git status
命令可以讓我們時刻掌握倉庫當前的狀態
git diff
顧名思義就是查看difference,顯示的格式正是Unix通用的diff格式
git commit
提交修改到版本庫
git log
查看提交的歷史記錄
分支管理
git checkout
命令加上-b參數表示創建并切換,相當于以下兩條命令:
git branch dev
創建分支
git checkout dev
切換分支
git branch
命令查看當前分支,該命令會列出所有分支,當前分支前面會標一個*號。
遠程倉庫(GitHub)
創建SSH Key。
在用戶主目錄下,看看有沒有.ssh
目錄,如果有,再看看這個目錄下有沒有id_rsa
和id_rsa.pub
這兩個文件,如果已經有了,可直接跳到下一步。如果沒有,打開Shell(Windows下打開Git Bash),創建SSH Key:
$ ssh-keygen -t rsa -C "youremail@example.com"
你需要把郵件地址換成你自己的郵件地址,然后一路回車,使用默認值即可,由于這個Key也不是用于軍事目的,所以也無需設置密碼。
如果一切順利的話,可以在用戶主目錄里找到.ssh目錄,里面有id_rsa
和id_rsa.pub
兩個文件,這兩個就是SSH Key的秘鑰對,id_rsa
是私鑰,不能泄露出去,id_rsa.pub
是公鑰,可以放心地告訴任何人。
在GitHub中添加SSH Key
登陸GitHub,打開“Account settings”,“SSH Keys”頁面,然后,點“Add SSH Key”,填上任意Title,在Key文本框里粘貼id_rsa.pub
文件的內容點“Add Key”,你就應該看到已經添加的Key。
遠程倉庫的推送和抓取
git remote add origin git@github.com:alanice/learngit.git
添加遠程倉庫
git push -u origin master
第一次推送master分支的所有內容
git push origin master
把本地master分支的最新修改推送至GitHub
git clone
克隆一個本地庫
git pull
和git fetch
的區別
git fetch
相當于是從遠程獲取最新版本到本地,不會自動merge
git fetch origin master
git log -p master..origin/master
git merge origin/master
以上命令的含義:
首先從遠程的origin
的master
主分支下載最新的版本到origin/master
分支上
然后比較本地的master
分支和origin/master
分支的差別,最后進行合并
上述過程其實可以用以下更清晰的方式來進行:
git fetch origin master:tmp
git diff tmp
git merge tmp
從遠程獲取最新的版本到本地的tmp分支上,之后再進行比較合并
git pull
相當于是從遠程獲取最新版本并merge到本地
git pull origin master
上述命令其實相當于git fetch
和git merge
在實際使用中,git fetch
更安全一些,因為在merge前,我們可以查看更新情況,然后再決定是否合并
新建、刪除遠程分支
git push origin <branch-name>
可以把本地分支推送到遠程分支
git push --delete origin <branch-name>
可以刪除指定的遠程分支
bug分支
git stash
可以把當前工作現場“儲藏”起來,等以后恢復現場后繼續工作
git stash list
命令看看剛才的工作現場
git stash apply
恢復工作現場,但是恢復后stash內容并不刪除,需要用git stash drop來刪除
git stash pop
恢復的同時把stash內容也刪了
只提交一次的文件
git update-index --assume-unchanged FILENAME
忽略已經提交的文件
git update-index --no-assume-unchanged FILENAME
重新track相關文件
刪除遠程分支和tag
在Git v1.7.0 之后,可以使用這種語法刪除遠程分支:
git push origin --delete <branchname>
可以使用這種語法,推送一個空分支到遠程分支,其實就相當于刪除遠程分支:
git push origin :<branchname>
刪除tag的方法,推送一個空tag到遠程tag,兩種語法作用完全相同。:
git push origin --delete tag <tagname>
git tag -d <tagname>
git push origin :refs/tags/<tagname>
刪除不存在對應遠程分支的本地分支
使用git remote prune origin
可以將其從本地版本庫中去除。
更簡單的方法是使用這個命令,它在fetch之后刪除掉沒有與遠程分支對應的本地分支git fetch -p
重命名遠程分支
在git中重命名遠程分支,其實就是先刪除遠程分支,然后重命名本地分支,再重新提交一個遠程分支。
例如下面的例子中,我需要把devel
分支重命名為develop
分支:
刪除遠程分支:git push --delete origin devel
重命名本地分支:git branch -m devel develop
推送本地分支:git push origin develop
把本地tag推送到遠程
git push --tags
獲取遠程tag
git fetch origin tag <tagname>