成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

四個(gè)指令玩轉(zhuǎn)github-創(chuàng)新互聯(lián)

四個(gè)指令玩轉(zhuǎn)git
  • 一. 前言
  • 二. git 的三個(gè)分區(qū)
  • 三.本地git簡(jiǎn)化教程
  • 三.遠(yuǎn)程git簡(jiǎn)化教程
    • 3.1 創(chuàng)建本地倉(cāng)庫(kù)與遠(yuǎn)程倉(cāng)庫(kù)的SSH密匙
    • 3.2 git fetch 和 git pull
    • 3.3 項(xiàng)目實(shí)例
  • 四. git在線練習(xí)平臺(tái)

站在用戶的角度思考問題,與客戶深入溝通,找到平山網(wǎng)站設(shè)計(jì)與平山網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、國(guó)際域名空間、虛擬主機(jī)、企業(yè)郵箱。業(yè)務(wù)覆蓋平山地區(qū)。一. 前言

我先開一會(huì)兒吐槽大會(huì),從大四進(jìn)課題組做科研開始,Git 這東西我用了一年,根本用不明白。

我搞不明白的一個(gè)重要原因就是,命令的功能太雜,有時(shí)候一個(gè)需求可以用好幾種命令解決,而且有的命令還 tm 有別名。這導(dǎo)致什么問題呢,我在網(wǎng)上找到的答案五花八門,竟然都能達(dá)成目的,難以找到規(guī)律,毫無(wú)套路可言。
以前我用 Git,就知道 add .,然后 commit -m,最后 push origin master 一套帶走,或者就是把 Git 作為下載器,去 clone 別人的項(xiàng)目。可是在日常項(xiàng)目使用過程中經(jīng)常遇到因?yàn)槭謿埌汛a弄錯(cuò)了需要恢復(fù)到原來(lái)的版本的問題,對(duì)于git的學(xué)習(xí),我的經(jīng)驗(yàn)是,一是投入實(shí)踐,二是化復(fù)雜為簡(jiǎn)單。
所以本文不是一個(gè)大而全 Git 命令的使用手冊(cè),而是根據(jù)實(shí)際工作中最常見問題,提供小而美的解決方案,僅僅涉及四個(gè)命令:add,commit,reset,checkout。
遠(yuǎn)程倉(cāng)庫(kù)涉及的三個(gè)命令:fetch,pull,clone

二. git 的三個(gè)分區(qū)

首先,在進(jìn)入 Git 的各種操作之前,一定要明白 git 的三個(gè)「分區(qū)」是什么,否則的話你一定沒辦法真正理解 Git 的原理。Git 的三個(gè)分區(qū)分別是:working directory,stage/index area,commit history。

working directory是「工作目錄」,也就是我們?nèi)庋勰軌蚩吹降奈募?,后文我們稱其為work dir區(qū)。
當(dāng)我們?cè)?mark>work dir中執(zhí)行git add相關(guān)命令后,就會(huì)把work dir中的修改添加到「暫存區(qū)」stage area(或者叫index area)中去,后文我們稱暫存區(qū)為stage區(qū)。
當(dāng)stage中存在修改時(shí),我們使用git commit相關(guān)命令之后,就會(huì)把stage中的修改保存到「提交歷史」commit history中,也就是HEAD指針指向的位置。后文我們稱「提交歷史」為history區(qū)。
關(guān)于 commit history 我們多說幾句,任何修改只要進(jìn)入 commit history,基本可以認(rèn)為永遠(yuǎn)不會(huì)丟失了。每個(gè) commit 都有一個(gè)唯一的 Hash 值,我們經(jīng)常說的 HEAD 或者 master 分支,都可以理解為一個(gè)指向某個(gè) commit 的指針。
work dir 和 stage 區(qū)域的狀態(tài),可以通過命令 git status 來(lái)查看,history 區(qū)域的提交歷史可以通過 git log 命令來(lái)查看。
好的,如果上面的內(nèi)容你都能夠理解,那么本文就完全圍繞這三個(gè)概念展開,下面就是一個(gè)關(guān)系圖:

三.本地git簡(jiǎn)化教程
  • 需求一,如何把work dir中的修改加入stage
    這個(gè)是最簡(jiǎn)單,使用 git add 相關(guān)的命令就行了。順便一提,add 有個(gè)別名叫做 stage,也就是說你可能見到 git stage 相關(guān)的命令,這個(gè)命令和 git add 命令是完全一樣的。
    理由:不會(huì)改變?nèi)位虺蜂N任何已作出的修改,而且還會(huì)將 work dir 中未追蹤的修改(Untracked file)添加到暫存區(qū) stage 中進(jìn)行追蹤。
  • 需求二,如何把stage中的修改還原到work dir中。
    這個(gè)需求很常見,也很重要,比如我先將當(dāng)前 work dir 中的修改添加到 stage 中,然后又對(duì) work dir 中的文件進(jìn)行了修改,但是又后悔了,如何把 work dir 中的全部或部分文件還原成 stage 中的樣子呢?
    來(lái)個(gè)實(shí)際場(chǎng)景,我先新建兩個(gè)文件,然后把他們都加到 stage:
$ touch test1.txt test2.txt
$ git add .
$ git status
On branch master
Changes to be committed:
	new file:   test1.txt
	new file:   test2.txt

然后我又修改了test1.txt文件。

$ echo hello world >>test1.txt
$ git status
On branch master
Changes to be committed:
	new file:   test1.txt
	new file:   test2.txt

Changes not staged for commit:
	modified:   test1.txt

現(xiàn)在,我后悔了,我認(rèn)為不應(yīng)該修改 test1.txt,我想把它還原成 stage中的空文件,怎么辦?
答案是,使用 checkout 命令:

$ git checkout test1.txt
Updated 1 path from the index

$ git status
On branch master
Changes to be committed:
	new file:   test1.txt
	new file:   test2.txt

輸出顯示從index區(qū)(也就是== stage == 區(qū))更新了一個(gè)文件,也就是把work dir中 test1.txt 文件還原成了stage中的狀態(tài)(一個(gè)空文件)。
當(dāng)然,如果work dir中被修改的文件很多,可以使用通配符全部恢復(fù)成stage

git checkout *

有一點(diǎn)需要指出的是,checkout 命令只會(huì)把被「修改」的文件恢復(fù)成 stage 的狀態(tài),如果 work dir 中新增了新文件,你使用 git checkout . 是不會(huì)刪除新文件的。

  • 需求三,將 stage 區(qū)的文件添加到 HEAD(history)區(qū)。
    很簡(jiǎn)單,就是 git commit 相關(guān)的命令,一般我們就是這樣用的:
$ git commit -m '一些描述'

再簡(jiǎn)單提一些常見場(chǎng)景, 比如說 commit 完之后,突然發(fā)現(xiàn)一些錯(cuò)別字需要修改,又不想為改幾個(gè)錯(cuò)別字而新開一個(gè) commit 到 history 區(qū),那么就可以使用下面這個(gè)命令:

$ git commit --amend

這樣就是把錯(cuò)別字的修改和之前的那個(gè) commit 中的修改合并,作為一個(gè) commit 提交到 history 區(qū)。

  • 需求四,將 history 區(qū)的文件還原到 stage 區(qū)。

這個(gè)需求很常見,比如說我用了一個(gè) git add . 一股腦把所有修改加入 stage,但是突然想起來(lái)文件 test1.txt 中的代碼我還沒寫完,不應(yīng)該把它 commit 到 history 區(qū),所以我得把它從 stage 中撤銷,等后面我寫完了再提交。

$ echo aaa >>test1.txt; echo bbb >>test2.txt;
$ git add .
$ git status
On branch master
Changes to be committed:
	modified:   test1.txt
	modified:   test2.txt

如何把 test1.txt 從 stage 區(qū)還原出來(lái)呢?可以使用 git reset 命令:

$ git reset test1.txt

$ git status
On branch master
Changes to be committed:
	modified:   test2.txt

Changes not staged for commit:
	modified:   test1.txt

你看,這樣就可以把== test1.txt == 文件從 stage 區(qū)移出,這時(shí)候進(jìn)行git commit相關(guān)的操作就不會(huì)把這個(gè)文件一起提交到 history 區(qū)了。

上面的這個(gè)命令是一個(gè)簡(jiǎn)寫,實(shí)際上 reset 命令的完整寫法如下:

$ git reset --mixed HEAD test1.txt

其中,mixed是一個(gè)模式(mode)參數(shù),如果 reset 省略這個(gè)選項(xiàng)的話默認(rèn)是 mixed 模式;HEAD指定了一個(gè)歷史提交的 hash 值;test1.txt 指定了一個(gè)或者多個(gè)文件。

該命令的自然語(yǔ)言描述是:不改變 work dir 中的任何數(shù)據(jù),將 stage 區(qū)域中的 a.txt 文件還原成 HEAD 指向的 commit history 中的樣子。就相當(dāng)于把對(duì) a.txt 的修改從 stage 區(qū)撤銷,但依然保存在 work dir 中,變?yōu)?unstage 的狀態(tài)。

  • 需求五,將 work dir 的修改提交到 history 區(qū)。
    這個(gè)需求很簡(jiǎn)單啦,先 git add 然后 git commit 就行了,或者一個(gè)快捷方法是使用命令 git commit -a。
  • 需求六,將 history 區(qū)的歷史提交還原到 work dir 中。
    這個(gè)場(chǎng)景,我說一個(gè)極端一點(diǎn)的例子:比如我從 GitHub 上 clone 了一個(gè)項(xiàng)目,然后亂改了一通代碼,結(jié)果發(fā)現(xiàn)我寫的代碼根本跑不通,于是后悔了,干脆不改了,我想恢復(fù)成最初的模樣,怎么辦?

依然是使用 checkout 命令,但是和之前的使用方式有一些不同:

$ git checkout HEAD .
Updated 12 paths from d480c4f

這樣,work dirstage中所有的「修改」都會(huì)被撤銷,恢復(fù)成HEAD指向的那個(gè)history commit。

注意,類似之前通過stage恢復(fù)work dircheckout命令,這里撤銷的也只是修改,新增的文件不會(huì)被撤銷。

當(dāng)然,只要找到任意一個(gè) commit 的 HASH 值,checkout 命令可就以將文件恢復(fù)成任一個(gè) history commit 中的樣子。
建議謹(jǐn)慎使用。這個(gè)操作會(huì)將指定文件在 work dir 的數(shù)據(jù)恢復(fù)成指定 commit 的樣子,且會(huì)刪除該文件在 stage 中的數(shù)據(jù),都無(wú)法恢復(fù),所以應(yīng)該慎重使用。

三.遠(yuǎn)程git簡(jiǎn)化教程 3.1 創(chuàng)建本地倉(cāng)庫(kù)與遠(yuǎn)程倉(cāng)庫(kù)的SSH密匙
ssh-keygen -t ecdsa -b 521 -C "825830916@qq.com"
gedit ~/.ssh/id_ecdsa.pub

復(fù)制id_ecdsa.pub的全部?jī)?nèi)容,這種SSH傳輸方式非??焖俦憬?。
在這里插入圖片描述
在github setting之中找到SSH and GPG keys添加。
在這里插入圖片描述
在這里插入圖片描述
將id_ecdsa.pub中的內(nèi)容復(fù)制到新建的 SSHkey中。

3.2 git fetch 和 git pull

git fetch和git pull都可以將遠(yuǎn)端倉(cāng)庫(kù)更新至本地那么他們之間有何區(qū)別?想要弄清楚這個(gè)問題有有幾個(gè)概念不得不提。

FETCH_HEAD: 是一個(gè)版本鏈接,記錄在本地的一個(gè)文件中,指向著目前已經(jīng)從遠(yuǎn)程倉(cāng)庫(kù)取下來(lái)的分支的末端版本。
commit-id:在每次本地工作完成后,都會(huì)做一個(gè)git commit 操作來(lái)保存當(dāng)前工作到本地的repo, 此時(shí)會(huì)產(chǎn)生一個(gè)commit-id,這是一個(gè)能唯一標(biāo)識(shí)一個(gè)版本的序列號(hào)。 在使用git push后,這個(gè)序列號(hào)還會(huì)同步到遠(yuǎn)程倉(cāng)庫(kù)。

有了以上的概念再來(lái)說說git fetch
git fetch:這將更新git remote 中所有的遠(yuǎn)程倉(cāng)庫(kù)所包含分支的最新commit-id, 將其記錄到.git/FETCH_HEAD文件中
git pull : 首先,基于本地的FETCH_HEAD記錄,比對(duì)本地的FETCH_HEAD記錄與遠(yuǎn)程倉(cāng)庫(kù)的版本號(hào),然后git fetch 獲得當(dāng)前指向的遠(yuǎn)程分支的后續(xù)版本的數(shù)據(jù),然后再利用git merge將其與本地的當(dāng)前分支合并。所以可以認(rèn)為git pull是git fetch和git merge兩個(gè)步驟的結(jié)合。
因此,git fetch是從遠(yuǎn)程獲取最新版本到本地,但不會(huì)自動(dòng)merge。
而git pull則是會(huì)獲取所有遠(yuǎn)程索引并合并到本地分支中來(lái)。效果相同時(shí)git pull將更為快捷。

3.3 項(xiàng)目實(shí)例

這里拿我前些天在github倉(cāng)庫(kù)新建的項(xiàng)目為例。

  • 需求一 :將本地倉(cāng)庫(kù)內(nèi)容上傳到遠(yuǎn)端
echo "# DIY_CPU">>README.md
git init
git add README.md
git commit -m "first commit"
git config --global user.email "you@example.com"
git branch -M main
git remote add origin git@github.com:tongjiaxuan666/DIY_CPU.git
git push -u origin main

其中origin遠(yuǎn)程在本地的別名。
通過push命令將本地的history HEAD指向的版本提交上去。

  • 需求二:遠(yuǎn)程倉(cāng)庫(kù)有所更改,但是本地沒有更改,如何更新的最新版本。
    在做好上述遠(yuǎn)程和本地鏈接的步驟后。
git  fetch --all
git  pull

現(xiàn)在本地版本就是遠(yuǎn)程的最新版本了。

四. git在線練習(xí)平臺(tái)

這是個(gè)叫做 Learning Git Branching 的項(xiàng)目,是我一定要推薦的:
在這里插入圖片描述
這個(gè)網(wǎng)站的教程不是給你舉那種修改文件的細(xì)節(jié)例子,而是將每次 commit 都抽象成樹的節(jié)點(diǎn),用動(dòng)畫闖關(guān)的形式,讓你自由使用 Git 命令完成目標(biāo):

在這里插入圖片描述
所有 Git 分支都被可視化了,你只要在左側(cè)的命令行輸入 Git 命令,分支會(huì)進(jìn)行相應(yīng)的變化,只要達(dá)成任務(wù)目標(biāo),你就過關(guān)啦!網(wǎng)站還會(huì)記錄你的命令數(shù),試試能不能以最少的命令數(shù)過關(guān)!
我一開始以為這個(gè)教程只包含本地 Git 倉(cāng)庫(kù)的版本管理,后來(lái)我驚奇地發(fā)現(xiàn)它還有遠(yuǎn)程倉(cāng)庫(kù)的操作教程!在這里插入圖片描述
網(wǎng)站地址:https://learngitbranching.js.org

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

當(dāng)前題目:四個(gè)指令玩轉(zhuǎn)github-創(chuàng)新互聯(lián)
URL地址:http://jinyejixie.com/article22/gppjc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標(biāo)簽優(yōu)化、建站公司微信小程序、定制開發(fā)、移動(dòng)網(wǎng)站建設(shè)、商城網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)
河北省| 海兴县| 潞城市| 仁布县| 长汀县| 逊克县| 饶阳县| 东乌| 敦煌市| 昌平区| 乐都县| 临沧市| 望谟县| 合山市| 梅州市| 乾安县| 玛曲县| 金坛市| 庄浪县| 河北省| 嘉善县| 自贡市| 潜山县| 德保县| 阿瓦提县| 宜君县| 安西县| 阜平县| 曲周县| 黑龙江省| 民县| 仪陇县| 砚山县| 永昌县| 南宁市| 巴中市| 福州市| 涟水县| 凉山| 太谷县| 德阳市|