git 命令行的使用

Git 的優勢

  1. 離線工作:每個人的電腦都是一個完整的版本庫,即使不連接服務器,也可以在本地進行版本管理;
  2. 強大的分支管理;

創建倉庫

clone 一個已存在的倉庫

git clone ssh://user@domain.com/repo.git

創建一個新的本地倉庫

git init

git 本地工作流程.jpg

本地倉庫和遠程倉庫:

本地倉庫以一個隱藏的文件夾(.git)的形式存儲在項目的根目錄下;
遠程倉庫沒有工作目錄,完全由 .git 倉庫目錄組成。開發團隊使用遠程倉庫進行數據共享和交換。

本地修改

查看工作副本的狀態:git status

查看與上次版本文件的不同:git diff

添加所有修改到暫存區,等待下次提交:git add .

提交暫存區的文件到本地倉庫:git commit -m "commit comment"

修改上次的提交(請勿修改已經推送到遠程的提交記錄):git commit --amend

或者,直接帶上要修改的注釋:git commit --amend -m "This is the correct message"

也可以添加更多的改動到上次的提交中:

  1. git add file.txt
  2. git commit --amend -m "commit message"

查看日志

查看所有的提交記錄:git log

指定顯示 log 的數目:git log -<num>

查看提交時文件的變化:git log -p

顯示指定文件的所有修改:git log -p <file>

誰,在什么時間,修改了文件的什么內容:git blame <file>

只看某人的提交:git log --author=<name>

每條日志單行顯示:git log --pretty=oneline

查看每一次操作,包括回退:git reflog

查看分支合并圖:git log --graph --pretty=oneline --abbrev-commit

查看遠程倉庫的日志:git log origin/master

分支操作

創建、合并和刪除分支非常快,所以 Git 鼓勵使用分支完成某個任務,合并后再刪掉分支,這和直接在 master 分支上工作效果是一樣的,但過程更安全。

創建新分支(基于當前分支):git branch <new-branch>

創建新的可追溯的分支(基于遠程分支):git checkout --track <remote/branch-name>

創建并切換分支:git checkout -b dev

切換分支:git checkout <branch>

查看分支:git branch

查看所有分支(包括遠程),并顯示最后一次的提交記錄:git branch -av

合并分支:git merge <branch>

刪除分支:git branch -d <branch>

刪除一個沒有被合并的分支:git branch -D dev

刪除遠程倉庫的分支:git branch -dr <remote/branch>

下載遠程的 dev 分支 :git checkout -b dev origin/dev

設置本地分支 dev 和遠程分支 origin/dev 的關聯:git branch --set-upstream-to=origin/dev dev

標簽操作

Git 標簽其實是一個指向某個 commit 的指針,所以創建和刪除標簽都是瞬間完成的。

給當前的提交打標簽:git tag <tag-name>

指定給某次的提交打標簽:git tag <tag-name> <commit-id>

-a 指定標簽名,用 -m 指定說明文字 :git tag -a <tag-name> -m <message> <commit-id>

查看標簽:git tag

查看某個標簽的信息 :git show <tagname>

推送某個標簽:git push origin v1.0

推送所有標簽:git push --tags

刪除本地標簽:git tag -d <tag-name>

刪除遠程標簽:

  1. 先刪除本地標簽;
  2. 然后推送:git push origin :refs/tags/<tag-name>

遠程倉庫

添加遠程倉庫(一般把 remote 命令為 origin,可以添加多個遠程倉庫):git remote add <remote> <url>

列出當前配置的遠程倉庫:git remote -v

查看遠程倉庫的信息:git remote show <remote>

刪除遠程倉庫:git remote rm <remote>

修改遠程倉庫的地址:git remote set-url <remote> <url>

更新/下載

下載遠程倉庫的所有改動到本地,不會自動合并到當前:git fetch <remote>

下載遠程倉庫的所有改動到本地,自動合并到當前:git pull <remote> <branch>

將本地版本發布到遠程倉庫:git push <remote> <branch>

第一次推送 master 分支到 origin:git push -u origin master,添加 -u,會把本地的 master 分支和遠程的 master 分支關聯起來,以后推送可以直接使用 git push

比較操作

查看當前工作副本中所有未提交的變化:git diff

指定要查看的文件:git diff <filename>

與版本庫的任意版本比較文件:git diff <commitID> -- <file>

比較任意兩個版本之間的內容:git diff <commitID> <commitID>

比較兩個分支之間的內容:git diff master dev

保存/恢復工作區

不要提交還未完成的工作。

臨時需要修改一個bug,當前的任務又沒有完成,不能提交。執行 git stash,可以把當前工作現場“儲藏”起來,等以后恢復現場后繼續工作。

改完 bug 之后,要恢復工作區,繼續之前的工作:

查看 stash:git stash list

恢復:git stash apply,恢復之后,stash 內容沒有刪除,用 git stash drop 來刪除;

恢復并刪除:git stash pop

可以執行多次 git stash 保存工作區,恢復的時候,指定 stash id:git stash apply stash@{0}

儲藏功能可以幫助我們得到一個干凈的工作副本。當然,它還可以應用在很多不同的流程中,強烈推薦在下列情況中儲藏你的本地改動:

  • 在切換到不同分支之前。
  • 在獲取(pulling)遠程改動之前。
  • 在合并(merging)或者衍合(rebasing)一個分支之前。

撤銷

在 Git 中,用 HEAD 表示當前版本,上一個版本就是 HEAD^,上上一個版本就是HEAD^^,往上100個版本寫100個^比較容易數不過來,所以寫成HEAD~100

放棄工作副本中的所有修改(回退到當前版本):git reset --hard HEAD

回退到指定版本,放棄之后的修改(查看 git log,已經回退到之前的提交)

git reset --hard <commit-id>

(不使用 --hard 會保留之前的修改,放在工作副本中)

回退之后又想回去了:

先使用 git reflog 查看所有的操作,找到 commitID 再進行回退。

使用 revert 進行回退(查看 git log,創建了一個新的提交):git revert <comit-id>

修改了文件,還沒有執行 add,此時文件在工作區,回退到之前的版本:git checkout -- <file>

修改了文件,執行了 add ,此時文件在暫存區,回退:git reset HEAD <file>

配置

使用.giignore 文件,忽略不想要管理的文件。這里有模版 https://github.com/github/gitignore

文件別忽略了,也可以強制添加:git add -f target/

檢查 .gitignore 是否有問題:git check-ignore -v .gitignore

配置別名:git config --global alias.st status

然后就可以使用 git st 代替 git status 了。

當前倉庫的配置文件在 .git/config 文件中,全局的 git 配置文件在用戶目錄下的 .gitconfig

使用 git

  1. 一次提交僅僅對應一個相關的改動,不要把那些互相毫無關聯的改動打包在同一次提交中。
  2. 不要提交不完整的改動,保存當前的工作用 git stash
  3. 每次提交都要詳細的注釋,說清楚:為什么要改?改了什么?。
  4. 養成頻繁提交的習慣,避免很龐大的提交,這樣也容易避免沖突的發生。
  5. 使用強大的分支,比如:開發新功能,修改 bug 等。
  6. 遵循一致的工作流程,比如:長期分支,特性分支,merge 還是 rebase 等。
  7. 使用幫助文檔:git help <command>

參考網站

  1. Git 官網
  2. 廖雪峰 git 教程
  3. Learn Version Control with Git
  4. git pro 中文版

可視化工具

SourceTree,跨平臺,免費。
Tower,Mac 上非常出名的 git 工具,目前已經有 windows 版本,收費。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,786評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,656評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,697評論 0 379
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,098評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,855評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,254評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,322評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,473評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,014評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,833評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,016評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,568評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,273評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,680評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,946評論 1 288
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,730評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,006評論 2 374

推薦閱讀更多精彩內容

  • Git 基礎 基本原理 客戶端并不是只提取最新版本的文件快照,而是把代碼倉庫完整的鏡像下來。這樣一來,任何一處協同...
    __silhouette閱讀 15,928評論 5 147
  • Git 命令行學習筆記 Git 基礎 基本原理 客戶端并不是只提取最新版本的文件快照,而是把代碼倉庫完整的鏡像下來...
    sunnyghx閱讀 3,944評論 0 11
  • 1.git的安裝 1.1 在Windows上安裝Git msysgit是Windows版的Git,從https:/...
    落魂灬閱讀 12,686評論 4 54
  • git常用命令 GIT常用命令備忘:http://stormzhang.com/git/2014/01/27/gi...
    新篇章閱讀 8,529評論 1 26
  • 成長是一首詩 寫出來也罷,唱出來也罷 總要有適合的語詞去堆砌 填充詩歌的顏色 赤橙黃綠青藍紫 總有一種顏色屬于自己...
    石默_語閱讀 848評論 0 7