亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Linux Shell > 正文

一些你必須要熟練掌握的git命令

2020-07-27 18:49:04
字體:
來源:轉載
供稿:網友

前言

因為結合了開發中可能遇到的場景,篇幅較長,不過我覺得很有助于你理解 git 的運作機制,而不是死記硬背命令。

HEAD指針 始終指向的是當前分支的最新版本號,HEAD^, HEAD^^, ^ 的個數 n 或 HEAD~n,n 代表前 n 個版本號。

在項目中直接使用 linux rm 只會刪除工作區的文件,git rm 同在刪除工作區文件的同時刪除 stage 中的,或使用 git rm --cached 只刪除 stage 中的。

一些基本的操作

#全局配置git config --global user.name "your username"git config --global user.email youremail@email.comgit config --global color.ui true#mkdir git_proj & cd git_projgit initecho "# readme.md" >> README.mdgit add README.mdgit commit -m "readme commit"# 添加遠程倉庫 并給它取個別名 origingit remote add origin git@github.com:username/repositoryName.git# 將本地倉庫推送至 origin 的 master 分支并與此分支關聯(-u 的作用,后期不必在使用)git push -u origin master# 從遠程倉庫 origin 的 master 分支獲取最新源碼并下載到 tmp 分支git fetch origin master:tmp# 比對 tmp 分支于 master 分支做了哪些改動git diff master tmp# 合并 tmp 分支到 master 分支git merge tmp# clone copy 一個完整的遠端倉庫到本地git clone git@github.com:username/repositoryName.git# pull 獲取 origin 的 master 分支并直接和當前分支合并# 所以可能會發生沖突git pull origin master

checkout

checkout 命令有兩個主要作用:切換分支 和 回滾文件到當前的 stage 版本 或 repository 版本

1、切換分支

# 切換到 new_branch 分支git checkout new_branch# 創建并切換到 new_branch 分支git checkout -b new_branch

2、回滾工作區的文件到最新 stage 版本 或 repository 版本,即從 stage 或 repository 中檢出最新版本

# -- 是文件標示符 表名后面的參數為文件 避免產生切換 branch 的歧義git checkout -- <filename>

回滾時會先檢查 stage 中是否有對應的文件,如果沒有才會使用 repository 中最新的版本。而當對某文件進行了多次修改和 add 操作后,使用 checkout 我們只能將文件回滾到最新一次的 add 的版本。

但在某些場景下我們可能想回滾到 repository 中的最新版本,怎么做呢?配合 reset 命令的可以很容易做到。
先給出命令:

git reset HEAD <filename> & git checkout -- <filename>

這樣就可以將工作區的 filename 回滾到 repository 中的最新版本了。具體原理我們將在實例中詳細的講解。

reset

git 的 reset 命令比較繞,需要耐心的理解。簡單來說,reset 有三種重置級別,我們需要準確理解每個級別的作用。

soft:回退版本號。作用于 repository

mixed:回退版本號,重置 stage。作用于 repository 和 stage

hard :回退版本號,重置 stage,重置工作區源碼。作用于 repository,stage 和 workspace

我們簡單展示下 repository 的版本號,我們以此為 demo 分別嘗試三個級別的 reset

git logversion D (HEAD) <-- HEAD指針version C (HEAD^)version B (HEAD^^)version A (HEAD~3)

命令格式:

git reset [--soft|--mixed|--hard] version_no <filename>

--soft:只是單純的移動 repository 的 HEAD指針 到制定版本號。stage 和工作區沒有任何變化。

# 將 HEAD 指針回滾至上一版本 使用 git log 你會發現提交日志退回到了上一版本號git reset --soft HEAD^#版本號現狀version C <-- HEAD指針version Bversion A

--mixed:默認選項,移動 repository 的 HEAD指針 到指定版本號,同時用此版本重置 stage 區,所以可能會讓工作區的某些文件處于 unstage 狀態(當工作區的文件與 repository 中的版本不一致時)。注意,這里是可以指定文件的。soft 本身和文件無關,hard 則是不能單獨指定文件,只能全部重置。

# HEAD指針 還是指向 HEAD git reset HEAD^2 <filename>#版本號現狀version B <-- HEAD指針version A

HEAD指針 指向 version B,并且 stage 已經被 version B 的文件重置,工作區則不受影響。

這里有個很實用的小技巧:

git reset version_no <filename> & git checkout -- <filename>

這兩個命令組合在一起可以讓工作區的指定文件回滾到 repository 中對應的 version_no 版本。
如果 version_no 是 HEAD 的話那就可以回滾文件到最新一次的提交。

--hard:謹慎使用?。?!移動 repository 的 HEAD指針 到指定版本號,同時用此版本重置 stage 區 和 工作區源碼。這里要特別注意,工作區的源碼也會被覆蓋重置掉,你的修改會全部丟失。簡單來說就是將代碼徹底恢復到指定版本。hard 是沒辦法指定文件的,要么回滾,要么全回滾。

# HEAD指針 還是指向 HEAD git reset --hard HEAD^3#版本號現狀version A <-- HEAD指針

此時,HEAD指針 指向 version A,并且 stage 和 工作區的文件已經被 version A 的文件重置。整個項目的狀態完全回到提交 version A 時按下回車鍵的那一刻。

rm

git rm 不同于直接使用 rm,git rm 會刪除工作區 和 stage 區的內容。注意:這里你沒辦法再使用 git checkout -- <filename> 來回滾操作了,因為工作區也沒有 filename 文件了,沒辦法與 repository 做關聯,只能使用 git reset HEAD <filename> 來重置 stage 中的此文件,然后 git checkout -- <filename>

git rm [--cached] [-r] [-f] <filename>

這里就提示一點,只想把 stage 中的文件刪除掉讓文件脫離 git 的管理,可以使用

git rm --cached <filename>

此時工作區的 filename 并不會被刪除,但狀態會被改為 untracked,同時 stage 會記錄下 filename 的狀態為刪除,提交的話版本庫將新增一個 filename 被刪除掉的版本。

刪除 stage 中的文件和使用 reset命令 重置 stage 中的文件是有區別的,刪除會讓文件狀態更改為 untracked,而重置會讓文件狀態更改為 unstage(如果工作區和 stage 文件內容不一致)。

小實例場景:

1、回滾工作區某文件到指定的 repository 版本

工作中,我們可能會針對某文件做多次修改和 add 到 stage 的操作,而后發現思路完全錯了,需要重新設計開發。

比如文件 foo 的 A版 我提交了一次后,又進行了 B版 和 C版 的兩次修改并 add 到了 stage 區。第三次修改后 D版 我發現一開始思路就錯了,需要重新設計。那此時直接使用 git checkout -- foo 是拿不到最初的 A版 的,因為 stage 區還存放著 foo 的 C版。此時我們便可以使用 git reset HEAD foo 命令,repository 最新版本號中存放著 foo 的 A版,命令會在不移動 HEAD 的前提下,使用 foo A版 去重置 stage 區。命令執行后 stage 區的 foo 文件已經是 A版 了。我們再使用 git checkout -- foo 便可以將工作區的 foo D版 回滾至 A 版。即:

git reset HEAD foo & git checkout -- foo

HEAD 代表當前版本,所以 HEAD指針 不會移動。同時 stage 區會被 repository 的當前版本的 filename 重置,也就說 stage 區 存放的 filename 與 repository 中相同了。此時我們再使用 git checkout -- <filename> 便可以回滾工作區的 filename 到 repository 的當前版本。其實就是利用 reset --mixed 會重置 stage 區,然后 checkout 會將 stage 區的文件檢出到工作目錄。當然,reset 很靈活,可以回滾任意指定的版本。

其實如果只是回滾至當前版本的話,還有個命令能實現相同的功能

git rm --cached <filename> & git checkout -- <filename>

git rm --cached <filename> 會將 stage 中的此文件刪除,文件狀態會變為 untracked,然后 checkout 時發現 stage 中木有此文件,故會去 repository 的當前版本中檢出此文件。

diff

  • git diff -- <filename> 工作區 比較 暫存區
  • git diff --cached -- <filename> 暫存區 比較 本地庫當前版本
  • git diff HEAD~N -- <filename> 工作區 比較 本地庫第N個版本
  • git diff HEAD HEAD^ -- <filename> HEAD 比較 HEAD^
  • git diff master tmp -- <filename> master 比較 tmp
  • git diff SHA1 SHA2 -- <filename> 比較兩個歷史版本之間的差異

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對武林網的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲色图综合网| 国产成人短视频| 国产成人综合亚洲| 国产精品亚洲第一区| 国产精品爽爽爽爽爽爽在线观看| 成人深夜直播免费观看| 亚洲视频第一页| 精品日本高清在线播放| 欧美激情综合色| 中国人与牲禽动交精品| 欧美激情性做爰免费视频| 亚洲一区亚洲二区亚洲三区| 91精品国产色综合久久不卡98口| 精品中文字幕视频| zzjj国产精品一区二区| 亚洲欧美国产精品久久久久久久| 国内精品久久久久久影视8| 欧美成人精品激情在线观看| 色综久久综合桃花网| 欧美裸体视频网站| 日韩成人在线视频| 久久久欧美精品| 国内精品模特av私拍在线观看| 久久久久久亚洲精品| 日本成人精品在线| 国产精品99免视看9| 国产欧美一区二区三区久久| 亚洲r级在线观看| 久久精品最新地址| 欧美俄罗斯性视频| 欧美性极品少妇精品网站| 午夜精品一区二区三区在线视| 欧美日韩国产一中文字不卡| 69久久夜色精品国产69乱青草| 国产精品999| 国产精品亚洲第一区| 亚洲国产日韩欧美在线图片| 国产精品mp4| 欧美视频在线看| 欧美激情精品久久久久久黑人| 精品久久久国产精品999| 成人午夜一级二级三级| 91av视频在线免费观看| 欧美xxxx14xxxxx性爽| 精品亚洲永久免费精品| 国产+成+人+亚洲欧洲| 亚洲精品资源美女情侣酒店| 日韩中文娱乐网| 欧美极品欧美精品欧美视频| 北条麻妃一区二区在线观看| 日本午夜精品理论片a级appf发布| 欧美日韩一区二区三区在线免费观看| 日韩电影免费在线观看| 亚洲影视九九影院在线观看| 国产精品久久久久久久久久三级| 91精品视频在线播放| 91久久国产精品91久久性色| 亚洲理论电影网| 欧美精品18videosex性欧美| 国产精品吹潮在线观看| 91在线观看免费高清| 久久夜色精品国产欧美乱| 久久精品免费播放| 欧美日韩免费在线观看| 最新国产精品拍自在线播放| 亚洲一区国产精品| 久久人人看视频| 国产日韩中文字幕| 色婷婷久久一区二区| 国产精品吴梦梦| 欧美日韩成人网| 中文在线资源观看视频网站免费不卡| 欧美大尺度在线观看| 成人中心免费视频| 亚洲黄色免费三级| 国产欧美日韩精品丝袜高跟鞋| 国产成人一区二区在线| 欧美精品亚州精品| 久久久999精品视频| 一区二区欧美亚洲| 久久精品视频在线| 久久久日本电影| 亚洲电影免费观看高清完整版在线| 欧美国产在线电影| 精品视频中文字幕| 欧美亚洲成人免费| 欧美性色视频在线| 久久久www成人免费精品张筱雨| 欧美性受xxxx黑人猛交| 亚洲国产精品嫩草影院久久| 久久综合国产精品台湾中文娱乐网| 91在线观看免费网站| 欧美亚洲第一区| 国产精品欧美激情| 久久久精品免费视频| 精品电影在线观看| 97精品一区二区视频在线观看| 亚洲国产另类 国产精品国产免费| 日韩精品中文字幕久久臀| 亚洲天堂第一页| 亚洲日韩中文字幕| 在线播放日韩av| 大伊人狠狠躁夜夜躁av一区| 久久久视频免费观看| 国产精品美女无圣光视频| 国产免费观看久久黄| 日韩黄色在线免费观看| 欧美亚洲视频一区二区| 日韩av在线免费看| 中文字幕欧美在线| 久久免费视频网| 国内精品久久久久影院 日本资源| 国产日韩换脸av一区在线观看| 久久国产天堂福利天堂| 欧美在线播放视频| 98精品国产自产在线观看| 精品久久久久久中文字幕| 狠狠久久亚洲欧美专区| 一本一本久久a久久精品牛牛影视| 亚洲丝袜一区在线| 亚洲一区国产精品| 在线观看成人黄色| 久久国产精品偷| 狠狠久久亚洲欧美专区| 国产日韩视频在线观看| 国内精品久久久久影院 日本资源| 两个人的视频www国产精品| 91香蕉嫩草神马影院在线观看| 欧美与欧洲交xxxx免费观看| 欧美午夜精品久久久久久久| 激情亚洲一区二区三区四区| 91av视频导航| 国产精品入口夜色视频大尺度| 亚洲在线免费看| 国产九九精品视频| 国产精品免费久久久| 中文字幕在线观看日韩| 久久精品视频免费播放| 日韩精品中文字幕在线播放| 91中文字幕一区| 亚洲第一页自拍| 在线播放国产一区二区三区| 九九九久久国产免费| 久久免费成人精品视频| 国产精品久久久久久久久借妻| 亚洲娇小xxxx欧美娇小| 97精品视频在线观看| 欧美日韩成人网| 国产一区二区动漫| 亚洲精品狠狠操| 国产精品海角社区在线观看| 中文字幕日韩精品在线观看| 中文字幕一精品亚洲无线一区| 日韩专区中文字幕| 国产精品久久久久久五月尺| 精品国内产的精品视频在线观看| 97成人精品视频在线观看| 国产精品1区2区在线观看| 国产午夜精品全部视频在线播放| 日韩电影中文字幕av| 色悠悠久久88| 国产精品第3页| 国产欧美 在线欧美| 影音先锋欧美精品|