Git 命令總結(jié),從零到熟悉(全)


原文出自:https://www.pandashen.com


什么是 Git?

Git 是一個(gè)免費(fèi)的開源分布式版本控制系統(tǒng)芋齿,它的設(shè)計(jì)目的是為了速度和效率的處理從小型到大型的項(xiàng)目啸如;Git 可以幫我們管理我們的代碼侍匙,記錄歷史,只要代碼提交到 Git 上就永久不會(huì)丟失叮雳,可以隨時(shí) “穿越”(回到之前的某一個(gè)版本)想暗;可以多端共享,團(tuán)隊(duì)協(xié)作中帘不,多個(gè)人操作了同一個(gè)文件時(shí)说莫,可以實(shí)現(xiàn)自動(dòng)合并(模塊化,組件化)寞焙、標(biāo)記沖突储狭,擁有強(qiáng)大的分支管理系統(tǒng)。


Git 與 SVN 的區(qū)別

SVN:集中式捣郊,需要一臺(tái)中央服務(wù)器辽狈,所有代碼的拉取和提交都是在中央服務(wù)器,一旦中央服務(wù)器或者網(wǎng)絡(luò)出現(xiàn)故障呛牲,則不能拉取和提交代碼刮萌,需要不斷去備份中央服務(wù)器,防止代碼丟失娘扩。

Git:分布式着茸,有一個(gè)中央服務(wù)器的同時(shí)壮锻,每個(gè)開發(fā)者本地都有自己的本地倉庫,擁有完整的版本庫元扔,不用擔(dān)心代碼丟失躯保,Git 存儲(chǔ)的是代碼變化的快照,更新代碼的速度要比 SVN 更快澎语。


Git 安裝

Windows

Mac

  • 如果安裝過 Xcode 自帶 Git途事,<a>https://developer.apple.com/xcode/</a>
  • 可以安裝 Homebrew,是 wmac 的包管理器擅羞,<a>https://brew.sh/</a>尸变,下面是兩款界面美化插件:
    • Oh My ZSH:<a>http://ohmyz.sh/</a>
    • iTerm2:<a>https://www.iterm2.com/</a>


Linux 命令

1、打印工作目錄

pwd

2减俏、創(chuàng)建文件夾

mkdir 文件夾名

3召烂、改變路徑

進(jìn)入盤符:

cd d:

進(jìn)入文件夾:

cd 文件夾名

回上一級目錄:

cd ..

進(jìn)入某一個(gè)路徑:

cd 路徑

想要進(jìn)入某一個(gè)不知道路徑的文件夾中,可以直接拖拽該文件到命令窗口娃承,會(huì)自動(dòng)識別路徑奏夫。

4、查看文件列表

ls

ls -al

下面命令加了 -al 參數(shù)可以查看隱藏文件历筝。

5酗昼、創(chuàng)建文件

touch 文件名

6、移動(dòng)文件

mv 文件/文件夾 路徑

將文件或者文件夾移動(dòng)到所輸入的路徑下梳猪。

7麻削、查看文件內(nèi)容

cat 文件名

8、刪除文件 / 文件夾

rm -rf 文件夾名

rm 文件名

-rf 為遞歸刪除春弥,后面加上 * 為參數(shù)會(huì)遞歸刪除整個(gè)文件夾的內(nèi)容呛哟,rm -rf *(慎用)。

9匿沛、清空命令窗口

clear

10扫责、查看命令歷史

直接在命令行中查看:

history

將當(dāng)前 Git 的命令歷史寫入文件中:

history > 文件名

11、使用 vi 編輯器編輯文件

vi 文件名

進(jìn)入編輯模式:

i

進(jìn)入命令模式:

Esc

保存并退出:

:wq

強(qiáng)制退出:

:q!

12俺祠、使用命令編輯文件

向文件輸入內(nèi)容:

echo 內(nèi)容 > 文件名

向文件追加內(nèi)容:

echo 內(nèi)容 >> 文件名

當(dāng)使用 echo 編輯了一個(gè)不存在的文件時(shí)公给,會(huì)創(chuàng)建一個(gè)新文件并將內(nèi)容編輯到文件中,而 touch 創(chuàng)建的是空文件蜘渣。


Git 的本地操作

Git 在管理文件時(shí)淌铐,所有文件都具有三種狀態(tài),已修改蔫缸、已暫存腿准、已提交。
Git 在本地倉庫中由三部分組成,工作區(qū)吐葱、暫存區(qū)街望、版本庫。
Git 管理的文件夾下都有一個(gè)名為 .git 的隱藏文件夾弟跑。

對應(yīng)關(guān)系如下:

  • 已修改 → 工作區(qū)
  • 已暫存 → 暫存區(qū)(.git 文件夾下的 index 文件中)
  • 已提交 → 版本庫

1灾前、配置用戶

不配置用戶無法提交代碼。

查看配置信息:

git config --list

配置用戶名:

git config --global user.name "你的名字"

配置郵箱:

git config --global user.email "你的郵箱"

2孟辑、初始化 Git 倉庫

在要初始化的文件夾下執(zhí)行下面命令哎甲,告訴 Git 哪個(gè)文件夾被 Git 所管理,一個(gè)項(xiàng)目初始化一次饲嗽,不能嵌套炭玫。

git init

3、查看 Git 狀態(tài)

git status

文件為紅色貌虾,代表有修改吞加,文件名為綠色,代表已經(jīng)加入暫存區(qū)尽狠。

4衔憨、添加到暫存區(qū)

git add 文件名

git add .

git add -A

.-A 兩個(gè)參數(shù)均為全部提交到暫存區(qū),. 只監(jiān)控修改袄膏、添加文件的變化巫财,-A 監(jiān)控修改、添加哩陕、刪除文件。

5赫舒、刪除暫存區(qū)

git rm --cached 文件名

git rm --cached . -r

第一個(gè)命令是刪除某一個(gè)文件的暫存區(qū)悍及,當(dāng)參數(shù)為 . 的時(shí)候刪除全部暫存區(qū),所以需要加上代表遞歸刪除的參數(shù) -r接癌。

6心赶、提交到版本庫

從暫存區(qū)提交到版本庫:

git commit -m "版本信息"

從工作區(qū)直接提交到版本庫(需要之前添加過暫存區(qū)):

git commit -a -m "版本信息"

7、查看提交日志

git log

8缺猛、比較工作區(qū)缨叫、暫存區(qū)、版本庫

工作區(qū)和暫存區(qū)比較:

git diff

工作區(qū)和版本庫比較:

git diff 分支名

暫存區(qū)和版本庫比較:

git diff --cached

9荔燎、撤銷操作

git checkout 文件名

git checkout .

撤銷操作是將暫存區(qū)覆蓋到工作區(qū)耻姥,會(huì)放棄掉當(dāng)前工作區(qū)修改的內(nèi)容,. 參數(shù)是將整個(gè)暫存區(qū)覆蓋當(dāng)前工作區(qū)有咨,一旦撤銷就回不到之前的工作區(qū)了琐簇。
當(dāng)不小心將當(dāng)前工作區(qū)錯(cuò)誤的代碼提交到暫存區(qū),可以使用下面命令將暫存區(qū)回滾到上一個(gè)暫存區(qū)座享,只可回滾一次婉商。

git reset HEAD 文件名

10似忧、回退版本

查看所有的版本號:

git reflog

按版本號回退版本:

git reset --hard 版本號

回退到上一個(gè)版本:

git reset --hard HEAD^

回退某一個(gè)版本的文件到工作區(qū):

git checkout 版本號 文件名

回退版本會(huì)將當(dāng)前版本庫選中的版本重新覆蓋暫存區(qū)和工作區(qū)。

11丈秩、分支操作

查看分支:

git branch

Git 剛剛初始化管理的的文件夾必須有一次提交到版本庫(root-commit:根提交)以后才會(huì)有主分支 master盯捌,否則即使創(chuàng)建了新分支也無法切換回 master。

創(chuàng)建分支:

git branch 分支名

切換分支:

git checkout 分支名

創(chuàng)建并切換分支:

git checkout -b 分支名

刪除分支(需切換出要?jiǎng)h除的分支):

git branch -D 分支名

新創(chuàng)建的分支和主分支 master 還是同一個(gè)區(qū)域蘑秽,新建的文件只有提交到新分支的版本庫才真正脫離關(guān)系饺著。
分支工作區(qū)有更改不能直接切換其他分支,可以提交更改或者暫存更改筷狼,若暫存更改(使用暫存區(qū)覆蓋掉工作區(qū))瓶籽,等待重新切回分支時(shí),還原暫存埂材。
此處所說的暫存不是之前的將代碼提交到暫存區(qū)塑顺,因?yàn)楫?dāng)前分支工作區(qū)的代碼會(huì)變成要切換分支工作區(qū)的代碼,而導(dǎo)致當(dāng)前分支工作區(qū)的更改丟失俏险,此處的暫存類似于將修改寄存严拒,重新切回該分支時(shí)再還原。

暫存更改:

git stash

還原暫存的內(nèi)容:

git stash pop

合并分支:

將指定分支合并到當(dāng)前所在的分支竖独,所以裤唠,在分支開發(fā)完畢后,合并分支需要先切換回 master 主分支莹痢。

git merge 指定的分支名

查看分支合并的圖譜:

git log --graph

git log --graph --oneline

紅色線代表主分支种蘸,綠色線代表新創(chuàng)建的分支,分支上的 * 代表提交到版本庫的節(jié)點(diǎn)竞膳。--oneline 參數(shù)表示提交信息顯示為一行航瞭。

12、解決沖突

當(dāng)創(chuàng)建分支后坦辟,分支和 master 主分支分別提交代碼到版本庫刊侯,此時(shí)切換回 master 主分支,合并分支會(huì)出現(xiàn)沖突锉走,需手動(dòng)處理后滨彻,重新提交到暫存區(qū)并提交到版本庫。

// 代碼沖突
<<<<<<< HEAD (當(dāng)前更改)
master 分支代碼
=======
開發(fā)分支的代碼
>>>>>>> 開發(fā)的分支 (傳入的更改)


Git 操作遠(yuǎn)程倉庫

遠(yuǎn)程倉庫可以是 Github挪蹭、Gitee(碼云)亭饵、Coding 或者中央服務(wù)器等等。

以下是常用免費(fèi)倉庫的地址梁厉,可以在首頁注冊賬號:

  • Github: <a>https://github.com</a>
  • Gitee: <a>https://gitee.com</a>
  • Coding: <a>https://coding.net</a>

1冬骚、處理需要過濾和提交的文件夾

使用 WebStrom 編輯器編輯代碼時(shí),會(huì)自動(dòng)在根目錄生成 .idea 文件夾,使用 Mac 開發(fā)時(shí)根目錄下的 .DS_Store 文件夾只冻,以及在項(xiàng)目開發(fā)時(shí)會(huì)安裝依賴存放在 node_modules 文件夾中庇麦,此類文件夾都是在把代碼上傳到遠(yuǎn)程倉庫或中央服務(wù)器時(shí)不應(yīng)該上傳的,因此應(yīng)該在上傳之前過濾掉喜德。

在根目錄創(chuàng)建 .gitignore 文件用于記錄上傳時(shí)被忽略的文件夾山橄,內(nèi)容(可根據(jù)需要自行配置)如下:

文件:.gitignore

.idea
.DS_Store
node_modules

Git 上傳時(shí)會(huì)自動(dòng)忽略空文件夾,假設(shè)想要上傳一個(gè)名為 public 的空文件夾舍悯,需要在文件夾內(nèi)新建一個(gè)名為 .gitkeep 的文件(名字隨意航棱,最好有語義化),目的是使要提交的空文件夾不再為空萌衬。

2饮醇、關(guān)聯(lián)遠(yuǎn)程倉庫

git remote add origin 遠(yuǎn)程倉庫地址

3、查看關(guān)聯(lián)的遠(yuǎn)程倉庫

git remote -v

4秕豫、刪除遠(yuǎn)程倉庫的關(guān)聯(lián)

git remote rm 地址別名

地址別名指的是上面的 origin朴艰,也可以是其他名稱,必須對應(yīng)要?jiǎng)h除關(guān)聯(lián)的地址別名混移。

5祠墅、推送代碼到遠(yuǎn)程倉庫

git push origin master

git push -u origin master

如果加上了 -u 參數(shù),以后再次提交時(shí)可省略地址別名和分支名稱歌径,直接執(zhí)行下面命令進(jìn)行提交毁嗦。

git push

6、拉取遠(yuǎn)程倉庫的代碼

在提交代碼時(shí)回铛,如果直接提交到遠(yuǎn)程倉庫狗准,會(huì)將當(dāng)前代碼覆蓋到遠(yuǎn)程倉庫,如果別人之前也向遠(yuǎn)程倉庫提交了代碼茵肃,會(huì)在遠(yuǎn)程倉庫中造成沖突驶俊,所以一般在提交代碼之前先拉取遠(yuǎn)程倉庫的代碼與本地代碼進(jìn)行合并,并產(chǎn)生一個(gè)新的歷史記錄免姿,若出現(xiàn)沖突,手動(dòng)處理沖突后再統(tǒng)一提交到遠(yuǎn)程倉庫榕酒。

拉取但不合并代碼(與 merge 配合胚膊,不常用):

git fetch origin master

拉取并合并代碼(常用):

git pull origin master

7、創(chuàng)建 gh-pages 分支來發(fā)布靜態(tài)頁

涉及到遠(yuǎn)程倉庫網(wǎng)站上的操作均以 Github 為例想鹰,其他倉庫大同小異:

  • 在項(xiàng)目中創(chuàng)建一個(gè)名為 gh-pages 的分支紊婉;
  • 將分支提交到線上倉庫;
  • 找到提供給你的倉庫網(wǎng)站的 Settings 切換到 github-pages辑舷;
  • 點(diǎn)擊該欄頂端的地址可以訪問我們的靜態(tài)頁喻犁。

git checkout -b gh-pages
touch index.html
git add .
git commit -m "提交信息"
git push origin gh-pages

8、拉取別人的項(xiàng)目到本地

git clone 項(xiàng)目地址 項(xiàng)目別名

上面命令項(xiàng)目別名是可選的,相當(dāng)于給項(xiàng)目根文件夾重命名肢础。

9还栓、向別人的項(xiàng)目提問

  • 在遠(yuǎn)程倉庫網(wǎng)站進(jìn)入別人的項(xiàng)目頁面;
  • 點(diǎn)擊 Issue 選項(xiàng)传轰;
  • 輸入問題標(biāo)題和問題描述并點(diǎn)擊提交剩盒;
  • 項(xiàng)目所有者可以回復(fù)或關(guān)閉問題。

10慨蛙、更改別人的項(xiàng)目代碼

  • 在別人項(xiàng)目的主頁上有一個(gè)叉子的圖標(biāo)辽聊,操作名為 Fork
  • Fork 是在當(dāng)前項(xiàng)目下克隆了一份期贫,如果代碼更新跟匆,不會(huì)隨之更新;
  • 使用 clone 命令克隆自己的地址將項(xiàng)目拉到本地通砍,進(jìn)行操作玛臂;
  • 默認(rèn)就是 Git 倉庫而且有 origin 地址,修改后可以將代碼提交到自己的倉庫上埠帕;
  • 只有 Fork 關(guān)系才能修改別人代碼后點(diǎn)擊 New pull request 發(fā)送提交請求垢揩;
  • 點(diǎn)擊 Create pull request 按鈕,填寫提交標(biāo)題敛瓷,和提交詳情叁巨,確認(rèn)提交;
  • 項(xiàng)目所有者可以在自己的項(xiàng)目頁面中 Pull request 菜單中查看提交并處理呐籽;
  • 點(diǎn)擊 Close pull request 關(guān)閉锋勺,點(diǎn)擊 Merge pull request 同意提交并合并。

如果是一個(gè)團(tuán)隊(duì)的其他人需要操作同一個(gè)項(xiàng)目狡蝶,上面的過程顯得很繁瑣庶橱,項(xiàng)目所有者可以在 SettingsCollaborators 選項(xiàng)中通過添加別人的賬號或用戶名向項(xiàng)目中添加貢獻(xiàn)者,被添加的人擁有最大權(quán)限贪惹。


GUI 界面化

在當(dāng)前的前端開發(fā)編輯器中苏章,如 VSCode 和 WebStorm 等都集成了 Git,可以直接點(diǎn)擊按鈕操作奏瞬,不必使用命令行枫绅,這種操作 Git 的界面稱作 GUI 界面,個(gè)人建議還是盡量少的使用 GUI 界面硼端,命令行是根本并淋,還是多敲命令行,孰能生巧珍昨。


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末县耽,一起剝皮案震驚了整個(gè)濱河市句喷,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌兔毙,老刑警劉巖唾琼,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異瞒御,居然都是意外死亡父叙,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進(jìn)店門肴裙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來趾唱,“玉大人,你說我怎么就攤上這事蜻懦√瘃” “怎么了?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵宛乃,是天一觀的道長悠咱。 經(jīng)常有香客問我,道長征炼,這世上最難降的妖魔是什么析既? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮谆奥,結(jié)果婚禮上眼坏,老公的妹妹穿的比我還像新娘。我一直安慰自己酸些,他們只是感情好宰译,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著魄懂,像睡著了一般沿侈。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上市栗,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天缀拭,我揣著相機(jī)與錄音,去河邊找鬼填帽。 笑死蛛淋,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的盲赊。 我是一名探鬼主播,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼敷扫,長吁一口氣:“原來是場噩夢啊……” “哼哀蘑!你這毒婦竟也來了诚卸?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤绘迁,失蹤者是張志新(化名)和其女友劉穎合溺,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體缀台,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡棠赛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了膛腐。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片睛约。...
    茶點(diǎn)故事閱讀 39,696評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖哲身,靈堂內(nèi)的尸體忽然破棺而出辩涝,到底是詐尸還是另有隱情,我是刑警寧澤勘天,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布怔揩,位于F島的核電站,受9級特大地震影響脯丝,放射性物質(zhì)發(fā)生泄漏商膊。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一宠进、第九天 我趴在偏房一處隱蔽的房頂上張望晕拆。 院中可真熱鬧,春花似錦砰苍、人聲如沸潦匈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽茬缩。三九已至,卻和暖如春吼旧,著一層夾襖步出監(jiān)牢的瞬間凰锡,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工圈暗, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留掂为,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓员串,卻偏偏與公主長得像勇哗,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子寸齐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評論 2 353

推薦閱讀更多精彩內(nèi)容

  • Git 基礎(chǔ) 基本原理 客戶端并不是只提取最新版本的文件快照欲诺,而是把代碼倉庫完整的鏡像下來抄谐。這樣一來,任何一處協(xié)同...
    __silhouette閱讀 15,874評論 5 147
  • Git 命令行學(xué)習(xí)筆記 Git 基礎(chǔ) 基本原理 客戶端并不是只提取最新版本的文件快照扰法,而是把代碼倉庫完整的鏡像下來...
    sunnyghx閱讀 3,913評論 0 11
  • 1. 安裝 Github 查看是否安裝git: $ git config --global user.name "...
    Albert_Sun閱讀 13,656評論 9 163
  • Git常用語法 [TOC] Git簡介 描述 ? Git(讀音為/g?t/蛹含。)是一個(gè)開源的分布式版本控制系統(tǒng),...
    君惜丶閱讀 3,511評論 0 13
  • 下午換皮卡的輪胎螺絲 拆下蠱后發(fā)現(xiàn)手剎片磨沒了塞颁,然后要來一套手剎片 手剎片從來沒換過 所以導(dǎo)致上面都生銹了 特別不...
    染雨辰閱讀 143評論 0 0