GIT操作 之 常用指令(入門級)

小葉哥github庫里,已詳細對每個git操作做出分析(還包含了很多原理級別的)碎绎。而我自己當初,在要接觸git時抗果,也是徘徊在門外兜兜轉轉筋帖,最后因為工作需要,天天摸索冤馏,才總算入了門幕随。
所以,“熟能生巧”真的一點沒錯宿接。
之前把一些常用的操作記錄在紙質筆記本上,平時偶爾忘記指令可以回翻≡迹現(xiàn)在我把這些操作總結出來睦霎,希望對大家有所幫助。主要還是給自己做個電子檔備份走诞。O(∩_∩)O哈哈~

概述

Git的整個操作要素副女,可以用下圖的流程概括:

git-flow. 來源:阮大大博客

幾個主要的結構體有:

  1. Workspace 工作區(qū):git init后,當前文件夾(自己電腦上蚣旱,眼睛看得見的那個和平常文件夾一毛一樣的文件存儲區(qū)域)就是工作區(qū)碑幅。
  2. Index 暫存區(qū):一個臨時放置工作區(qū)編輯后文件的區(qū)域。git add后塞绿,有變動的文件會跑到這里來沟涨。
  3. Repository 本地倉庫:相當于是在自己電腦上的一個倉庫。git init后异吻,你會發(fā)現(xiàn)當前文件夾多了一個.git的隱形文件夾裹赴,這里就存放著本地倉庫的版本相關內容。
  4. Remote 遠程倉庫:這個是一個聯(lián)網的在某個服務器上的庫诀浪,我們一般使用github或者gitlab等棋返。若希望別人能遠程下載clone你的文件,就必須放到遠程倉庫雷猪。

接下來睛竣,我們簡單捋一捋這個過程:
下行路程:作為小前端的我在本地電腦(工作區(qū))上的一個文件夾下進行初始化git init,緊接著馬不停蹄的擼了一把代碼求摇,保存為file.html ------------> 通過 add 射沟,把file.html放到了暫存區(qū) ------------> 然后又通過 commit殊者,把file.html送到了本地倉庫 ------------> 最后通過 push,把file.html推送到了遠程倉庫躏惋。

上行路程:這個月拿到激勵金的我買了臺筆記本幽污,想把之前擼過的file.html工程下載到這臺電腦上。先獲得遠程庫里對應工程的地址(一個xxx.git的下載地址)------------> 通過 clone 簿姨,把file.html所在工程下載到了本地倉庫(操作指令的文件路徑下距误,會自動初始化為本地倉庫)。------------> 通過 checkout 扁位,把file.html檢出到了工作區(qū)准潭。

常用指令說明

我的入門參考過阮大大博客,也入手過圖靈的教材域仇。但真正比較有感知的還是廖雪峰大大的git教程系列刑然。這個教程雖然有一點點年代了,但作為入門一點都不過時暇务。只要按照步驟一步一步的走一遍泼掠,就能大體體味Git操作到底是什么個鬼東西了。
此處我是精煉出指令來垦细,以備查閱择镇。

1 創(chuàng)建版本庫

#初始化版本庫
git init

#添加工作區(qū)變動到暫存區(qū)
git add

#添加暫存區(qū)內容到本地倉庫
git commit

#查看倉庫狀態(tài)(工作區(qū)的變動文件是紅色,暫存區(qū)的文件是綠色括改,也會有相關提示操作的語句)
git status

#查看文件修改(本地倉庫和工作區(qū)比較)
git diff file1.txt

2 版本回退

#查看提交日志(`git commit` 時腻豌,附錄的說明)
git log

#查看提交日志(單行顯示,看起來會更簡潔)
git log --pretty=oneline

#回退上一個版本
git reset --hard HEAD^

# HEAD     當前版本
# HEAD^    上一個版本
# HEAD^^   上上一個版本
# HEAD~100 往上100個版本

#查看每一次命令(可以查看commit id嘱能,用以查找版本)
git reflog

#指定到commit id為3628164版本(實際的commit id數字串很長吝梅,可以不寫全)
git reset --hard 368164

3 撤銷修改

#把工作區(qū)的修改撤銷(丟棄工作區(qū)修改)
git checkout -- file1.txt

# 注意:
# 1. 若file1.txt沒有add,上面的指令會讓工作區(qū)回到版本庫相同的狀態(tài)惹骂;
# 2. 若file1.txt已經add到了暫存區(qū)苏携,上面的指令會讓工作區(qū)回到暫存區(qū)狀態(tài)上
# 補充說明:checkout 是檢出的意思,也就是從本地倉庫提取指定文件來覆蓋工作區(qū)的文件析苫。
#           暫存區(qū)是工作區(qū)和本地倉庫中間的一個橋梁兜叨,所以檢出時候會先到暫存區(qū)去探究下,若沒有再到本地倉庫取衩侥。

#把暫存區(qū)的修改撤銷国旷,修改只保留在了工作區(qū)
git reset HEAD file1.txt

#若希望把已添加暫存區(qū)的修改丟棄,就得分別執(zhí)行兩步: 先撤銷暫存區(qū)的修改(此時修改還在工作區(qū))茫死,再撤銷工作區(qū)的修改跪但。
git reset HEAD file1.txt
git checkout -- file1.txt

# 注意:以上兩行代碼會讓臨時修改的代碼徹底消失,謹慎操作。

4 刪文件

#1. 直接在工作區(qū)的文件夾把文件刪除(右鍵-刪除)

#2. 若確定要刪除屡久,繼續(xù)執(zhí)行以下指令
git rm file2.txt
git commit 

#3. 若誤刪了忆首,可以使用撤銷修改
git checkout -- file2.txt

5 遠程庫 origin

5.1 添加遠程庫

#1. 關聯(lián)
git remote add origin git@server:path/repo.git

#2. 第一次推送 -u:是對本地master與遠程master分支進行關聯(lián)
git push -u origin master

#3. 以后的推送
git push origin master

# 或者
git push

5.2克隆遠程庫

#1. 關聯(lián)
git clone git@server:path/repo.git

#也支持https協(xié)議,但速度會偏慢

5.3查看遠程庫

# 列出遠程庫被环,遠程庫默認名稱origin
git remote

#顯示遠程庫信息
git remote -v

#查看遠程庫詳細信息
git remote show [origin]

5.4 向遠程庫推送分支

# 推送 master 分支
git push origin master

# 推送 dev 分支
git push origin dev

5.5從遠程庫拉取分支

# 方法一
# 獲取遠程所有分支
git fetch

# 查看所有遠程分支
git branch -r

# 在本地新建一個同名分支糙及,并與該遠程分支關聯(lián)
git checkout same_name_origin
#注意:不要使用 git checkout origin/mybranch ,會進入detached head狀態(tài)筛欢,不會在本地新建分支浸锨。



# 方法二
# 語法
git checkout -b 本地分支名 origin/遠程分支名

# 比如
git checkout -b dev2 origin/dev2

6 分支管理 branch

6.1 創(chuàng)建、合并分支

# 創(chuàng)建并切換到分支dev
git checkout -b dev

# 上面的指令等于下面兩條指令的集合

# 創(chuàng)建分支
git branch dev

# 切換分支
git checkout dev

# 查看當前所有分支
git branch

# 查看當前所有分支版姑,包括遠程分支
git branch -a

# 推送分支:把dev分支推送到遠程庫
git push origin dev


# ... 在dev分支上做編輯柱搜,并add、commit等操作后

# 切回master分支
git checkout master

# ... dev分支上的修改不會出現(xiàn)在master分支上


# 把dev分支合并到master分支:可以把dev上的修改同步到master
git merge dev

# 刪除dev分支(注意:不能在dev分支上刪除dev分支)
git branch -d dev

6.2 查看兩個分支區(qū)別

# 查看兩個分支區(qū)別剥险,將結果輸出到指定文件
#1. 覆蓋方式:若執(zhí)行指令的路徑下已經有file1.diff聪蘸,會進行覆蓋
git diff [branchA] [branchB] > file1.diff

#2. 追加方式
git diff [branchA] [branchB] >> file1.diff

#3. 顯示出所有有差異的文件列表
git diff branch1 branch2 --stat 

#4. 顯示指定文件的詳細差異
git diff branch1 branch2  [filepath] 

#5. 顯示出所有有差異的文件的詳細差異
git diff branch1 branch2

# 查看分支創(chuàng)建時間
git reflog show --date=iso branchA

6.3 解決合并沖突

當使用merge操作合并時,若兩個分支修改了相同位置內容表制,就會出現(xiàn)沖突健爬。
可以具體查看發(fā)生沖突的文件,文件里頭會有<<<< ==== >>>> 來標記出同一位置么介,不同分支各自的內容塊浑劳。然后由我們來選擇保留想要留下的內容,刪除不要的內容以及標記符號夭拌。保存、add衷咽、commit鸽扁,即可。

# ... 假設當前在master分支上镶骗,要合并dev分支
git merge dev

# ... 發(fā)生了沖突
# 1. 查看沖突發(fā)生文件:一般在進行git merge 時就會有提示文字
git status

# 2. 處理沖突:打開產生沖突的文件桶现,進行主觀編輯,然后保存

# 3. 之后進行正常的更新文件操作
git add
git commit -m "fix conflict"

# 最后鼎姊,如果想要查看分支合并圖
git log --graph --pretty=oneline --abbrev-commit

6.4 分支管理策略

分支是版本管理工具的一大特色骡和。如何來管理分支,不同人不同團隊采用的也不一樣相寇。
有兩篇博文可以參考下:源代碼主干分支開發(fā)四大模式 和 英文版的 A successful Git branching model慰于。

團隊開發(fā)中,一般會有以下幾種分支分類(僅供參考):

  1. master - 主分支唤衫,時刻與遠處同步
  2. dev - 開發(fā)分支婆赠,團隊成員在此分支上工作
  3. bug - 本地修復bug分支,可以不推送到遠程
  4. feature - 新功能分支佳励,若是團隊合作休里,可以push到遠程

關于分支合并蛆挫,分為兩種模式:快速模式和普通模式。

# 快速模式:上面使用的合并模式妙黍。
git merge dev

# 普通模式:以非 “Fastforward” 模式合并悴侵,合并后歷史記錄有分支,能看出合并過
git merge --no-ff -m "merge with noff" dev

# 目前我都是用普通模式拭嫁。 0 0 因為我使用快速模式的時候可免,都會自動進入 -m 編寫提示文字模塊。還沒有去仔細研究為何這樣噩凹。

6.5 Bug分支 git stash:保存工作現(xiàn)場

場景模擬:
... 在dev分支上熱火朝天干活ING ... 但完整模塊還沒有完成巴元,并不想提交
... 但線上出現(xiàn)緊急bug需要修復,必須切到master分支修改bug ...
... 該如何是好 ... 別怕驮宴!我們有 git stash 來保存當前工作現(xiàn)場

# 在dev分支上逮刨,保存當前工作現(xiàn)場
git stash


# ... 切到master分支上,進行bug修復 ...
git checkout master

# 創(chuàng)建修復bug新分支 issue-101
git checkout -b issue-101

# ... 修改代碼后
git add
git commit -m "fix bug 101"
git checkout master
git merge --no-ff -m "merged bug fix 101" issue-101
git branch -d issue-101


# ... 切回到dev分支堵泽,要繼續(xù)之前的工作 ...
git checkout dev

# 查看保存的工作現(xiàn)場
git stash list

# 恢復并刪除stash內容
git stash pop


# 以上 git stash pop 等同于下面兩條指令

# 恢復工作現(xiàn)場
git stash apply

# 刪除stash內容
git stash drop

注意:在dev分支創(chuàng)建的stash內容修己,是屬于本地庫的,而不隸屬于分支迎罗。所以如果當前的工作現(xiàn)場睬愤,我希望在其他分支進行編輯提交,就可以在其他分支上進行 git stash pop纹安。

6.6 給分支添加描述

#給當前分支添加描述
git branch --edit-description

#執(zhí)行上面指令尤辱,界面會進入一個編輯界面,可以按【insert】鍵厢岂,然后在里面噼里啪啦寫下你的感言
#寫完后光督,【Q】鍵退出編輯,然后輸入":wq!"保存退出塔粒。

#查看分支描述
git config branch.<branch>.description

注意:

  1. 分支描述是保存在.git/config下的结借,是本地存儲,所以不能被推送卒茬。當刪除分支時船老,對應的分支描述也會一起刪除。
  2. 設置 git config --global branchdesc true, 就可以將此描述推送到合并提交圃酵。即git merge --log<branch>,分支描述會添加到合并提交消息柳畔。(此條規(guī)則我還沒有測試,你們可以先測測看郭赐。)

7 標簽 Tag

標簽的作用相當是 commit版本號的一個別稱荸镊,能方便我們回退到指定的commit。

7.1 創(chuàng)建標簽

# 切換到要打標簽的分支上
git checkout master

# 給最新提交打上標簽 v1.0
git tag v1.0


# 若想給歷史提交打標簽,可以git log查看其版本號
git log --pretty=oneline --abbrev-commit

# 假如查閱到的 commit id 是 6224937****
git tag v0.9 6224937

# 查看標簽
git tag

# 查看標簽信息
git show v0.9

# 創(chuàng)建帶有說明文字的標簽
git tag -a v1.0 -m "version 1.0 released"

# 把標簽推送到遠程
git push origin v0.1

# 一次性全部推送
git push origin --tags

# 獲取遠程tag
git fetch origin tag <tagname>

7.2 刪除標簽

#本地刪除標簽
git tag -d v1.0

# 若標簽已推送到遠程躬存,要刪除就得兩步:先本地刪除张惹、再遠程刪除
git tag -d v1.0
git push origin :refs/tags/v1.0

7.3 刪除遠程tag

git push origin --delete tag <tagname>

也可以使用推送一個空分支到遠程分支,其實就相當于刪除遠程分支:

# 推送一個空分支到遠程分支
git push origin :<branchName>

# 推送一個空tag到遠程tag
git tag -d <tagname>
git push origin :refs/tags/<tagname>

以上兩種語法岭洲,作用完全相同宛逗。

8 遠程分支的相關操作

8.1 查看遠程分支

加上 -a 參數可以查看遠程分支,遠程分支會用紅色表示出來(如果開了顏色支持的話)

git branch -a

8.2 刪除遠程分支

git push origin --delete <branchName>
(8) 查看分支的創(chuàng)建時間
git reflog show --date=iso master

參考文章:

  1. 廖雪峰大大的Git教程
  2. Git查看盾剩、刪除雷激、重命名遠程分支和tag
  3. git 對比兩個分支 具體某個文件的差異
  4. 使用git和github管理自己的項目---基礎操作學習(segmentfault)
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市告私,隨后出現(xiàn)的幾起案子屎暇,更是在濱河造成了極大的恐慌,老刑警劉巖驻粟,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件根悼,死亡現(xiàn)場離奇詭異,居然都是意外死亡蜀撑,警方通過查閱死者的電腦和手機挤巡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來酷麦,“玉大人矿卑,你說我怎么就攤上這事∥秩模” “怎么了母廷?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長糊肤。 經常有香客問我徘意,道長,這世上最難降的妖魔是什么轩褐? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮玖详,結果婚禮上把介,老公的妹妹穿的比我還像新娘。我一直安慰自己蟋座,他們只是感情好拗踢,可當我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著向臀,像睡著了一般巢墅。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天君纫,我揣著相機與錄音驯遇,去河邊找鬼。 笑死蓄髓,一個胖子當著我的面吹牛叉庐,可吹牛的內容都是我干的。 我是一名探鬼主播会喝,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼陡叠,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了肢执?” 一聲冷哼從身側響起枉阵,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎预茄,沒想到半個月后兴溜,有當地人在樹林里發(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡反璃,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年昵慌,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片淮蜈。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡斋攀,死狀恐怖,靈堂內的尸體忽然破棺而出梧田,到底是詐尸還是另有隱情淳蔼,我是刑警寧澤,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布裁眯,位于F島的核電站鹉梨,受9級特大地震影響,放射性物質發(fā)生泄漏穿稳。R本人自食惡果不足惜存皂,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望逢艘。 院中可真熱鬧旦袋,春花似錦、人聲如沸它改。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽央拖。三九已至祭阀,卻和暖如春鹉戚,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背专控。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工抹凳, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人踩官。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓却桶,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蔗牡。 傳聞我的和親對象是個殘疾皇子颖系,可洞房花燭夜當晚...
    茶點故事閱讀 44,700評論 2 354