Git基礎與命令小結

前言


使用Git也有幾年了吊说,涉及場景較多的是:

  1. 學習開源庫治笨。從GitHub上克隆代碼
$ git clone ...
  1. 公司開發(fā)
// 分支相關
$ git branch
$ git checkout -b dev
$ git checkout dev

// 提交代碼
$ git status
$ git add .
$ git commit -m "..."
$ git pull
$ git push origin dev

其他情況使用命令行如git merge等較少秉扑,多用IDE(如 Android Studio)自帶的版本控制GUI工具。一般情況下所刀,記得上面幾個命令就足以應付日常工作了嫡霞,如果需要使用其他的命令瓶埋,網上搜一下即可。

最近開始管理小團隊秒际,需要管理分支的創(chuàng)建悬赏、代碼審核狡汉、分支合并娄徊、刪除、沖突解決等等盾戴,開發(fā)的人數開始增多寄锐,以前不常用的命令,現在也要常用了,因此有必要全面的總結下Git的使用橄仆。

可能有人會問剩膘,為什么要學習命令行,熟悉GUI不就可以了嗎盆顾?答案是不可以的怠褐。

只有在命令行模式下你才能執(zhí)行 Git 的 所有 命令,而大多數的 GUI 軟件只實現了 Git 所有功能的一個子集以降低操作難度您宪。 如果你學會了在命令行下如何操作奈懒,那么你在操作 GUI 軟件時應該也不會遇到什么困難,但是宪巨,反之則不成立磷杏。 此外,由于每個人的想法與側重點不同捏卓,不同的人常常會安裝不同的GUI 軟件极祸,但所有人一定會有命令行工具。

本文主要資料參考Git官網-Pro Git教程廖雪峰的Git教程怠晴。廖寫的東西通俗易懂遥金,非常值得一讀。我的總結盡可能精簡蒜田,初學者可以看廖的教程汰规,了解更詳細的可以看Git官網-Pro Git教程,說的非常詳細物邑,里面有中文文檔溜哮。

Git基礎


三個工作區(qū)域
一個Git項目包括:工作目錄、暫存區(qū)(stage或index)和倉庫目錄色解∶ぃ基本的 Git 工作流程如下:

  1. 在工作目錄中修改文件。如通過$ git clone命令將項目克隆到本地科阎,然后做一些修改述吸。
  2. 暫存文件,將文件的快照放入暫存區(qū)域锣笨。如通過$ git add .命令進行操作蝌矛。
  3. 提交更新,找到暫存區(qū)域的文件错英,將快照永久性存儲到 Git 倉庫目錄入撒。如通過$ git commit命令進行操作。
來源Git官網

三種狀態(tài)
工作目錄下的文件分為兩種狀態(tài):已跟蹤或未跟蹤椭岩。

  1. 未跟蹤茅逮。沒有納入版本控制的文件璃赡。
  2. 已跟蹤。已跟蹤的文件是指那些被納入了版本控制的文件献雅,在上一次快照中有它們的記錄碉考,在工作一段時間后,它們的狀態(tài)可能處于未修改挺身,已修改或已放入暫存區(qū)侯谁。

已跟蹤的文件分為三種:

  1. 已提交(committed)。表示數據已經安全的保存在本地倉庫目錄中章钾。
  2. 已修改(modified)良蒸。表示修改了文件,但還沒保存到暫存區(qū)中伍玖。
  3. 已暫存(staged)嫩痰。表示對一個已修改文件的當前版本做了標記,即已經放到了暫存區(qū)窍箍,使之包含在下次提交的快照中串纺。
Git項目文件生命周期

分支結構變更示意
master指向自己分支的最新提交
HEAD指向當前分支

  1. 只有一個主分支時


    只有一個主分支master
  2. 創(chuàng)建并切換到分支dev。即創(chuàng)建一個dev指針指向當前提交椰棘,同時HEAD也指向dev分支


    創(chuàng)建并切換分支dev
  3. 修改并提交分支dev


    修改并提交分支dev
  4. 合并分支dev到master(默認的快速模式)


    合并分支-ff

    合并分支-no-ff
  5. 刪除分支dev

    刪除分支dev


常用命令


使用較多的6個命令

日常使用的命令

創(chuàng)建

# 創(chuàng)建版本庫纺棺。在當前文件件創(chuàng)建版本庫。
$ git init
# 添加文件邪狞。修改文件后祷蝌,需要把修改后內容添加到暫存區(qū)以備提交》浚“.” 代表所有文件巨朦,也可以添加指定的文件。
$ git add .
# 提交到本地版本庫剑令。
$ git commit -m "本次提交的信息"

# 關聯遠程服務器
$ git remote add origin "遠程倉庫鏈接"
# 推送當前分支信息到遠程服務器糊啡。“origin”代表默認的遠程服務吁津,“master”代表分支棚蓄。
$ git push -u origin master

查看

# 查看狀態(tài)。當前版本目錄的狀態(tài)
$ git status

# 查看提交歷史
$ git log
$ git log --pretty=oneline
$ git log --graph

# 查看命令歷史:checkout碍脏、commit梭依、reset等
$ git reflog

回退、撤銷與刪除

# 版本回退典尾∫鬯回退到歷史版本
# 其中“HEAD^”表示上一個版本,“HEAD^^”表示上上個版本
$ git reset --hard HEAD^
# 版本切換急黎≡回退到歷史版本或跳到最新版本。
# “1094a”表示指定commit id的版本
# 可以通過“git log”命令查看歷史版本commit id
# 或通過通過“git reflog”查看提交記錄
$ git reset --hard 1094a

# 撤銷已修改的文件勃教∮倩鳎恢復到最近一次git commit或git add時的狀態(tài)
$ git checkout -- <file>

# 撤銷已暫存的文件」试矗恢復到已修改狀態(tài)污抬。
# 然后通過“git checkout -- <file>”,恢復到最近一次git commit或git add時的狀態(tài)
$ git reset HEAD <file>

# 刪除文件绳军。在工作區(qū)刪除文件后印机,git add <file> 與 rm <file>效果一致,都可以將變更添加到暫存區(qū)门驾。
# 如果在工作區(qū)誤刪射赛,可以使用“git checkout -- <file>”恢復。
$ git rm <file>

分支管理

命令-創(chuàng)建和切換

# 創(chuàng)建并切換分支
$ git checkout -b dev
# 查看本地分支
$ git branch
# 查看遠程分支
$ git branch -a
# 切換分支
$ git checkout dev

命令-合并

# 在其他分支上合并dev分支
# 默認是Fast-forward模式奶是,直接把master指向dev的當前提交楣责,這種模式下,刪除分支后聂沙,會丟掉分支信息
$ git merge dev
# no-ff模式秆麸,合并后會保存分支信息
$ git merge dev --no-ff

命令-保存和恢復工作現場

# 保存當前工作現場。不提交情況下及汉,可保存當前工作現場沮趣,再并切換到其他分支。
$ git stash

# 查看保存的當前工作現場
$ git stash list

# 恢復并刪除當前工作現場坷随。如果stash有很多房铭,則默認操作最新的一個。
$ git stash pop
# 恢復當前工作現場温眉。僅恢復育叁,不刪除
$ git stash apply
# 刪除工作現場
$ git stash drop

命令-刪除分支

# 刪除本地分支`dev`。
$ git branch -d dev
# 刪除本地分支芍殖。強行刪除沒有合并的分支
$ git branch -D dev
# 刪除遠程分支`dev`豪嗽。
$ git push origin --delete dev

標簽管理

# 增加標簽。默認為HEAD
$ git tag v1.0
# 增加標簽豌骏。針對歷史版本
$ git tag v1.0 <commit id>
# 增加標簽龟梦。附帶說明
$ git tag -a v1.0 -m "version 1.0 release" <commit id>

# 查看所有標簽
$ git tag
# 查看某個標簽
$ git show v1.0

# 推送標簽。增加標簽存儲在本地窃躲,如有必要可以推送到遠程计贰。
$ git push origin v1.0
# 推送所有標簽。
$ git push origin --tags


# 刪除本地標簽
$ git tag -d v1.0
# 刪除遠程標簽蒂窒。先從本地刪除躁倒,再推送到遠程荞怒。
$ git push origin :refs/tags/v1.0

遠程倉庫

# 克隆遠程庫。本地沒有建立項目時秧秉,使用這個
$ git clone <遠程倉庫地址>

# 關聯本地項目到遠程服務褐桌。本地有Git項目時,使用這個象迎。
$ git remote add origin <遠程倉庫地址>

# 從遠程庫更新本地庫荧嵌。多人協(xié)作,遠程有更新時
# 會自動合并
$ git pull
# 不會自動合并
$ git fetch

# 推動本地內容到遠程
$ git push -u origin master

配置信息

# 配置別名
$ git config --global alias.st status
$ git config --global alias.co checkout
$ git config --global alias.ci commit
$ git config --global alias.br branch
$ git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

# 配置顏色
$ git config --global color.ui true

# 配置用戶名和郵件
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"

# 查看配置
$ git config --list

Git配置信息存儲在配置文件中砾淌,可以在配置文件中直接修改或刪除配置信息啦撮。

  1. 當期倉庫的配置信息在.git/config
  2. --global的配置信息在用戶主目錄下的.gitconfig
  3. --system的配置信息在/etc/gitconfig

其中,每一個級別覆蓋上一級別的配置

其他實用命令

# 查看使用手冊汪厨。<verb>表示要查看的命令名
$ git help <verb>
$ git <verb> --help
$ man git-<verb>


常見場景


創(chuàng)建赃春、提交、推送

# 本地沒有項目劫乱,遠程有Git項目
$ git clone <遠程倉庫地址>
$ git add .
$ git commit -m "初始化"
$ git push origin master

# 本地有項目聘鳞,遠程新創(chuàng)建空Git項目
$ git init
# 修改.gitignore文件
$ git add .
$ git commit -m ""
$ git remote add origin <遠程倉庫地址>
$ git push -u origin master

多人協(xié)作

# 合并他人分支、解決沖突
# 新建一個分支要拂,與指定的遠程分支建立追蹤關系
$ git branch --track dev origin/dev
$ git checkout dev
$ git pull
$ git checkout master
$ git merge dev --no-ff

# 如果沒有沖突抠璃,直接就合并好了,如果有沖突脱惰,先解決沖突搏嗡,然后提交
# 如果沖突沒有解決好,希望撤銷這次合并
$ git merge --abort

# 其他待續(xù)


參考


  1. 說明拉一。圖中圖片皆來自參考鏈接
  2. 廖雪峰Git教程
  3. Git官網-Pro Git教程
  4. 阮一峰-常用Git命令清單
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末采盒,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子蔚润,更是在濱河造成了極大的恐慌磅氨,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嫡纠,死亡現場離奇詭異烦租,居然都是意外死亡,警方通過查閱死者的電腦和手機除盏,發(fā)現死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進店門叉橱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人者蠕,你說我怎么就攤上這事窃祝。” “怎么了踱侣?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵粪小,是天一觀的道長大磺。 經常有香客問我,道長探膊,這世上最難降的妖魔是什么杠愧? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮突想,結果婚禮上殴蹄,老公的妹妹穿的比我還像新娘究抓。我一直安慰自己猾担,他們只是感情好,可當我...
    茶點故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布刺下。 她就那樣靜靜地躺著绑嘹,像睡著了一般。 火紅的嫁衣襯著肌膚如雪橘茉。 梳的紋絲不亂的頭發(fā)上工腋,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天,我揣著相機與錄音畅卓,去河邊找鬼擅腰。 笑死,一個胖子當著我的面吹牛翁潘,可吹牛的內容都是我干的趁冈。 我是一名探鬼主播,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼拜马,長吁一口氣:“原來是場噩夢啊……” “哼渗勘!你這毒婦竟也來了?” 一聲冷哼從身側響起俩莽,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤旺坠,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后扮超,有當地人在樹林里發(fā)現了一具尸體取刃,經...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年出刷,在試婚紗的時候發(fā)現自己被綠了蝉衣。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡巷蚪,死狀恐怖病毡,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情屁柏,我是刑警寧澤啦膜,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布有送,位于F島的核電站,受9級特大地震影響僧家,放射性物質發(fā)生泄漏雀摘。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一八拱、第九天 我趴在偏房一處隱蔽的房頂上張望阵赠。 院中可真熱鬧,春花似錦肌稻、人聲如沸清蚀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽枷邪。三九已至,卻和暖如春诺凡,著一層夾襖步出監(jiān)牢的瞬間东揣,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工腹泌, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留嘶卧,地道東北人。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓凉袱,卻偏偏與公主長得像芥吟,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子绑蔫,可洞房花燭夜當晚...
    茶點故事閱讀 43,697評論 2 351

推薦閱讀更多精彩內容

  • Git 基礎 基本原理 客戶端并不是只提取最新版本的文件快照运沦,而是把代碼倉庫完整的鏡像下來。這樣一來配深,任何一處協(xié)同...
    __silhouette閱讀 15,860評論 5 147
  • Git常用語法 [TOC] Git簡介 描述 ? Git(讀音為/g?t/携添。)是一個開源的分布式版本控制系統(tǒng),...
    君惜丶閱讀 3,500評論 0 13
  • 1篓叶,查看所有遠程分支:%git branch -r 2, 拉取遠程分支并創(chuàng)建本地分支git checkout -...
    will666閱讀 2,061評論 0 18
  • git branch 查看本地所有分支 git status 查看當前狀態(tài) git commit 提交 git b...
    猿萬閱讀 5,046評論 1 45
  • 最近一直頹烈掠,永遠沒有時間永遠一身懶骨,列個清單也算迎接2016的下半年了缸托。 未完勛蟮小: 絕命毒師——第三季 權力的游...
    Sarah9264閱讀 194評論 0 0