轉眼間加入git的陣營已經快兩年了,結識git,緣起github,2年前在尋找代碼託管網站,當時還是用svn,起初使用google code,可是google的服務雖好,在天朝你懂得,後來發現了github,多虧了蔣鑫老師的《GotGitHub》將我帶入github的大門,如果你是個github新手,那我強烈建議你閱讀這篇文章,裏面講了很多東西。
起初的時候我是用github for windows這個客戶端,在切換到多分支的時候被,自動轉換換行符坑的不淺,後來越來閱讀了《git詳解》系列文章,對git的瞭解深入了一步,並開始轉到命令行上來,如今我在github上開源了60幾個庫,藉助git,可自由在這些項目之間穿梭,同時還維護了github家園的微博和Q羣(193091696),如果你想獲取關於git和github的最新消息可以關注微博,如果你有什麼疑問或者問題,歡迎加羣一起討論。
這篇文章記錄個人常用的一些命令,和記不住的一些命令。
安裝
在 Windows 上安裝 Git 同樣輕鬆,有個叫做 msysGit 的項目提供了安裝包:
http://msysgit.github.io/
完成安裝之後,就可以使用命令行的 git 工具(已經自帶了 ssh 客戶端)了,另外還有一個圖形界面的 Git 項目管理工具。
配置
首先是配置帳號信息
git config --global user.name yanhaijing git config --global user.email [email protected] git config --list#查看配置的信息 git help config#獲取幫助信息
配置自動換行(自動轉換坑太大)
git config --global core.autocrlf input #提交到git是自動將換行符轉換爲lf
配置密鑰
ssh-keygen -t rsa -C [email protected] #生成密鑰 ssh -T [email protected] #測試是否成功
配置別名,git的命令沒有自動完成功能,有點坑哈,別名派上了用場
git config --global alias.st status #git st git config --global alias.co checkout #git co git config --global alias.br branch #git br git config --global alias.ci commit #git ci
筆者一般只配置第一個,因爲git status使用的頻率實在太多。
新建倉庫
git init#初始化 git status#獲取狀態 git add file#.或*代表全部添加 git commit -m "message"#此處注意亂碼 git remote add origin [email protected]:yanhaijing/test.git#添加源 git push -u origin master#push同事設置默認跟蹤分支
從現有倉庫克隆
git clone git://github.com/yanhaijing/data.js.git git clone git://github.com/schacon/grit.git mypro#克隆到自定義文件夾
本地
git add *#跟蹤新文件 git add -u [path]#添加[指定路徑下]已跟蹤文件 rm *&git rm *#移除文件 git rm -f *#移除文件 git rm --cached *#取消跟蹤 git mv file_from file_to#重命名跟蹤文件 git log#查看提交記錄 git commit#提交更新 git commit -m 'message' git commit -a#跳過使用暫存區域,把所有已經跟蹤過的文件暫存起來一併提交 git commit --amend#修改最後一次提交 git reset HEAD *#取消已經暫存的文件 git reset --mixed HEAD *#同上 git reset --soft HEAD *#重置到指定狀態,不會修改索引區和工作樹 git reset --hard HEAD *#重置到指定狀態,會修改索引區和工作樹 git reset -- files#重置index區文件 git revert HEAD #撤銷前一次操作 git revert HEAD~ #撤銷前前一次操作 git revert commit ##撤銷指定操作 git checkout -- file#取消對文件的修改(從暫存區——覆蓋worktree file) git checkout branch|tag|commit -- file_name#從倉庫取出file覆蓋當前分支 git checkout -- .#從暫存區取出文件覆蓋工作區 git diff file #查看指定文件的差異 git diff --stat #查看簡單的diff結果 git diff #比較Worktree和Index之間的差異 git diff --cached #比較Index和HEAD之間的差異 git diff HEAD #比較Worktree和HEAD之間的差異 git diff branch #比較Worktree和branch之間的差異 git diff branch1 branch2 #比較兩次分支之間的差異 git diff commit commit #比較兩次提交之間的差異 git log #查看最近的提交日誌 git log --pretty=oneline #單行顯示提交日誌 git log --graph --pretty=oneline --abbrev-commit git log -num #顯示第幾條log(倒數) git stash #將工作區現場(已跟蹤文件)儲藏起來,等以後恢復後繼續工作。 git stash list #查看保存的工作現場 git stash apply #恢復工作現場 git stash drop #刪除stash內容 git stash pop #恢復的同時直接刪除stash內容 git stash apply stash@{0} #恢復指定的工作現場,當你保存了不只一份工作現場時。
分支
git branch#列出本地分支 git branch -r#列出遠端分支 git branch -a#列出所有分支 git branch -v#查看各個分支最後一個提交對象的信息 git branch --merge#查看已經合併到當前分支的分支 git branch --no-merge#查看爲合併到當前分支的分支 git branch test#新建test分支 git branch -m old new #重命名分支 git branch -d test#刪除test分支 git branch -D test#強制刪除test分支 git branch --set-upstream dev origin/dev #將本地dev分支與遠程dev分支之間建立鏈接 git checkout test#切換到test分支 git checkout -b test#新建+切換到test分支 git checkout -b test dev#基於dev新建test分支,並切換 git merge test#將test分支合併到當前分支 git merge --squash test ##合併壓縮,將test上的commit壓縮爲一條 git cherry-pick commit #揀選合併,將commit合併到當前分支 git cherry-pick -n commit #揀選多個提交,合併完後可以繼續揀選下一個提交 git rebase master#將master分之上超前的提交,變基到當前分支 git rebase --onto master 169a6 #限制回滾範圍,rebase當前分支從169a6以後的提交 git rebase --interactive #交互模式 git rebase --continue# 處理完衝突繼續合併 git rebase --skip# 跳過 git rebase --abort# 取消合併
遠端
git fetch origin remotebranch[:localbranch]# 從遠端拉去分支[到本地指定分支] git merge origin/branch#合併遠端上指定分支 git pull origin remotebranch:localbranch# 拉去遠端分支到本地分支 git push origin branch#將當前分支,推送到遠端上指定分支 git push origin localbranch:remotebranch#推送本地指定分支,到遠端上指定分支 git push origin :remotebranch#刪除遠端指定分支 git checkout -b [--track] test origin/dev#基於遠端dev分支,新建本地test分支[同時設置跟蹤]
源
git是一個分佈式代碼管理工具,所以可以支持多個倉庫,在git裏,服務器上的倉庫在本地稱之爲remote。
個人開發時,多源用的可能不多,但多源其實非常有用。
git remote add origin1 [email protected]:yanhaijing/data.js.git git remote#顯示全部源 git remote -v#顯示全部源+詳細信息 git remote rename origin1 origin2#重命名 git remote rm origin#刪除 git remote show origin#查看指定源的全部信息
標籤
當開發到一定階段時,給程序打標籤是非常棒的功能。
git tag#列出現有標籤 git tag v0.1#新建標籤 git tag -a v0.1 -m 'my version 1.4'#新建帶註釋標籤 git checkout tagname#切換到標籤 git push origin v1.5#推送分支到源上 git push origin --tags#一次性推送所有分支 git tag -d v0.1#刪除標籤 git push origin :refs/tags/v0.1#刪除遠程標籤
總結
啊哈!終於總結完了,以後不會的時候,再也不用到處去找了。
其實還有兩個最有用的命令還未提到。
git help *#獲取命令的幫助信息 git status#獲取當前的狀態,非常有用,因爲git會提示接下來的能做的操作