標籤:

我的git筆記

轉眼間加入git的陣營已經快兩年了,結識git,緣起github,2年前在尋找代碼託管網站,當時還是用svn,起初使用google code,可是google的服務雖好,在天朝你懂得,後來發現了github,多虧了蔣鑫老師的《GotGitHub》將我帶入github的大門,如果你是個github新手,那我強烈建議你閱讀這篇文章,裡面講了很多東西。

起初的時候我是用github for windows這個客戶端,在切換到多分支的時候被,自動轉換換行符坑的不淺,後來越來閱讀了《Pro Git》第一版,對git的了解深入了一步,並開始轉到命令行上來,如今我在github上開源了70幾個庫,藉助git,可自由在這些項目之間穿梭,同時還維護了github家園的微博和Q群(193091696),如果你想獲取關於git和github的最新消息可以關注微博,如果你有什麼疑問或者問題,歡迎加群一起討論。

這篇文章記錄個人常用的一些命令,和記不住的一些命令。

安裝

在 Windows 上安裝 Git 同樣輕鬆,有個叫做 msysGit 的項目提供了安裝包:

http://msysgit.github.io/n

完成安裝之後,就可以使用命令行的 git 工具(已經自帶了 ssh 客戶端)了,另外還有一個圖形界面的 Git 項目管理工具。

配置

首先是配置帳號信息

git config -e [--global] # 編輯Git配置文件nngit config --global user.name yanhaijingngit config --global user.email yanhaijing@yeah.netnngit config --list #查看配置的信息nngit help config #獲取幫助信息n

配置自動換行(自動轉換坑太大)

git config --global core.autocrlf input #提交到git是自動將換行符轉換為lfn

配置密鑰

ssh-keygen -t rsa -C yanhaijing@yeah.net #生成密鑰nnssh -T git@github.com #測試是否成功n

配置別名,git的命令沒有自動完成功能,有點坑哈,別名派上了用場

git config --global alias.st status #git stngit config --global alias.co checkout #git congit config --global alias.br branch #git brngit config --global alias.ci commit #git cin

筆者一般只配置配置這幾個,你也可以配置其他命令。

新建倉庫

git init #初始化ngit status #獲取狀態ngit add [file1] [file2] ... #.或*代表全部添加ngit commit -m "message" #此處注意亂碼ngit remote add origin git@github.com:yanhaijing/test.git #添加源ngit push -u origin master #push同事設置默認跟蹤分支n

從現有倉庫克隆

git clone git://github.com/yanhaijing/data.js.gittngit clone git://github.com/schacon/grit.git mypro#克隆到自定義文件夾n

本地

git add * # 跟蹤新文件ngit add -u [path] # 添加[指定路徑下]已跟蹤文件nnrm *&git rm * # 移除文件ngit rm -f * # 移除文件ngit rm --cached * # 停止追蹤指定文件,但該文件會保留在工作區ngit mv file_from file_to # 重命名跟蹤文件nngit log # 查看提交記錄nngit commit # 提交更新tngit commit [file1] [file2] ... # 提交指定文件tngit commit -m messagengit commit -a # 跳過使用暫存區域,把所有已經跟蹤過的文件暫存起來一併提交ngit commit --amend#修改最後一次提交ngit commit -v # 提交時顯示所有diff信息nngit reset HEAD *#取消已經暫存的文件ngit reset --mixed HEAD *#同上ngit reset --soft HEAD *#重置到指定狀態,不會修改索引區和工作樹ngit reset --hard HEAD *#重置到指定狀態,會修改索引區和工作樹ngit reset -- files#重置index區文件nngit revert HEAD #撤銷前一次操作ngit revert HEAD~ #撤銷前前一次操作ngit revert commit ## 撤銷指定操作nngit checkout -- file#取消對文件的修改(從暫存區——覆蓋worktree file)ngit checkout branch|tag|commit -- file_name#從倉庫取出file覆蓋當前分支ngit checkout -- .#從暫存區取出文件覆蓋工作區nngit diff file #查看指定文件的差異ngit diff --stat #查看簡單的diff結果ngit diff #比較Worktree和Index之間的差異ngit diff --cached #比較Index和HEAD之間的差異ngit diff HEAD #比較Worktree和HEAD之間的差異ngit diff branch #比較Worktree和branch之間的差異ngit diff branch1 branch2 #比較兩次分支之間的差異ngit diff commit commit #比較兩次提交之間的差異nnngit log #查看最近的提交日誌ngit log --pretty=oneline #單行顯示提交日誌ngit log --graph # 圖形化顯示ngit log --abbrev-commit # 顯示log id的縮寫ngit log -num #顯示第幾條log(倒數)ngit log --stat # 顯示commit歷史,以及每次commit發生變更的文件ngit log --follow [file] # 顯示某個文件的版本歷史,包括文件改名ngit log -p [file] # 顯示指定文件相關的每一次diffnngit stash #將工作區現場(已跟蹤文件)儲藏起來,等以後恢復後繼續工作。ngit stash list #查看保存的工作現場ngit stash apply #恢復工作現場ngit stash drop #刪除stash內容ngit stash pop #恢復的同時直接刪除stash內容ngit stash apply stash@{0} #恢復指定的工作現場,當你保存了不只一份工作現場時。n

分支

git branch#列出本地分支ngit branch -r#列出遠端分支ngit branch -a#列出所有分支ngit branch -v#查看各個分支最後一個提交對象的信息ngit branch --merge#查看已經合併到當前分支的分支ngit branch --no-merge#查看為合併到當前分支的分支ngit branch test#新建test分支ngit branch branch [branch|commit|tag] # 從指定位置出新建分支ngit branch --track branch remote-branch # 新建一個分支,與指定的遠程分支建立追蹤關係ngit branch -m old new #重命名分支ngit branch -d test#刪除test分支ngit branch -D test#強制刪除test分支ngit branch --set-upstream dev origin/dev #將本地dev分支與遠程dev分支之間建立鏈接nngit checkout test#切換到test分支ngit checkout -b test#新建+切換到test分支ngit checkout -b test dev#基於dev新建test分支,並切換nngit merge test#將test分支合併到當前分支ngit merge --squash test ## 合併壓縮,將test上的commit壓縮為一條nngit cherry-pick commit #揀選合併,將commit合併到當前分支ngit cherry-pick -n commit #揀選多個提交,合併完後可以繼續揀選下一個提交nngit rebase master#將master分之上超前的提交,變基到當前分支ngit rebase --onto master 169a6 #限制回滾範圍,rebase當前分支從169a6以後的提交ngit rebase --interactive #交互模式tngit rebase --continue# 處理完衝突繼續合併tngit rebase --skip# 跳過tngit rebase --abort# 取消合併n

遠端

git fetch origin remotebranch[:localbranch]# 從遠端拉去分支[到本地指定分支]nngit merge origin/branch#合併遠端上指定分支nngit pull origin remotebranch:localbranch# 拉去遠端分支到本地分支nngit push origin branch#將當前分支,推送到遠端上指定分支ngit push origin localbranch:remotebranch#推送本地指定分支,到遠端上指定分支ngit push origin :remotebranch # 刪除遠端指定分支ngit push origin remotebranch --delete # 刪除遠程分支ngit branch -dr branch # 刪除本地和遠程分支ngit checkout -b [--track] test origin/dev#基於遠端dev分支,新建本地test分支[同時設置跟蹤]n

git是一個分散式代碼管理工具,所以可以支持多個倉庫,在git里,伺服器上的倉庫在本地稱之為remote。

個人開發時,多源用的可能不多,但多源其實非常有用。

git remote add origin1 git@github.com:yanhaijing/data.js.gitnngit remote#顯示全部源ngit remote -v#顯示全部源+詳細信息nngit remote rename origin1 origin2#重命名nngit remote rm origin#刪除nngit remote show origin#查看指定源的全部信息n

標籤

當開發到一定階段時,給程序打標籤是非常棒的功能。

git tag#列出現有標籤tnngit tag v0.1 [branch|commit] # [從指定位置]新建標籤ngit tag -a v0.1 -m my version 1.4#新建帶注釋標籤nngit checkout tagname#切換到標籤nngit push origin v1.5#推送分支到源上ngit push origin --tags#一次性推送所有分支nngit tag -d v0.1#刪除標籤ngit push origin :refs/tags/v0.1#刪除遠程標籤n

總結

啊哈!終於總結完了,以後不會的時候,再也不用到處去找了。

其實還有兩個最有用的命令還未提到。

git help *#獲取命令的幫助信息ngit status#獲取當前的狀態,非常有用,因為git會提示接下來的能做的操作n

最後再補一個救命的命令吧,如果你不小心刪錯了東西,就用下面的命令,可以看到你之前操作的id,大部分情況下是可以恢復的,記住git幾乎不會刪除東西。

git reflog # 顯示最近操作的commit idn

參考資料

  • Git參考手冊
  • git-簡明指南
  • 圖解Git
  • Pro Git
  • Git Magic
  • learnGitBranching
  • 讓 EmEditor 成為 Git 的編輯器

原文網址:我的git筆記

微信公眾號

關注微信公眾號:顏海鏡,最新博文優先推送,不再錯過精彩內容。
推薦閱讀:

【Git操作系列】Git由淺入深之基本原理
GitHub & Bitbucket & GitLab & Coding 的對比分析

TAG:Git |