0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Git概述及知識詳解

硬件攻城獅 ? 來源:技術(shù)讓夢想更偉大 ? 作者:技術(shù)讓夢想更偉大 ? 2022-11-08 14:16 ? 次閱讀

	
			
							
							
							

Git 概述

Git 是一個免費(fèi)的、開源的分布式版本控制系統(tǒng),可以快速高效地處理從小型到大型的各種項(xiàng)目。 Git 的特色是分支,人家圖標(biāo)上都敢這么畫了。 對了,這里要提一下,Git 和 Linux 是同一個爸爸,所以 Linux 系統(tǒng)上能跑的原生指令 Git 上面也都可以,反之也一樣。

git 分區(qū)原理

工作區(qū)。新文件沒被add到暫存區(qū),顯紅色。 暫存區(qū)。進(jìn)倉庫前暫時(shí)存放區(qū)域,未對本地倉庫生效。對暫存區(qū)文件修改,顯藍(lán)色。第一次創(chuàng)建并add到暫存區(qū)的文件,由于遠(yuǎn)程倉庫沒同步,顯綠色。(注:存放在 “.git/index目錄”。 本地倉庫。暫存區(qū)commit代碼放入本地倉庫,通過 push 推送到遠(yuǎn)程倉庫。(注:存在“.git”目錄。 遠(yuǎn)程倉庫。在前面的話,倉庫里都有些什么東西只有你自己知道,但是一旦把本地倉庫推到遠(yuǎn)程倉庫之后,倉庫里有什么東西大家就都知道了。

Git 常用指令

6ef33f82-5f1f-11ed-8abf-dac502259ad0.png

本篇講解包括但不限于這些命令。 6f038342-5f1f-11ed-8abf-dac502259ad0.png

設(shè)置用戶簽名

開頭兩個命令是用來設(shè)置用戶簽名的,這個一般就用一次就完事兒了,因?yàn)槟阋峤淮a的時(shí)候是需要責(zé)任跟蹤的。 這個 name,email 啥的,人家也不會去認(rèn)證,不過組里面肯定是會有規(guī)范的,也不會讓你想起啥名就隨便起吧。 6f038342-5f1f-11ed-8abf-dac502259ad0.png

初始化本地庫

新手一般就老老實(shí)實(shí) git init 起手嘛,昨天我也是這么問我導(dǎo)師的,他說不用,直接 git clone 就好了。我想想也是,團(tuán)隊(duì)開發(fā)嘛。 6f038342-5f1f-11ed-8abf-dac502259ad0.png

查看本地庫狀態(tài)

git status
首次查看,工作區(qū)是沒有什么文件的:
$ git status
On branch master
No commits yet
nothing to commit (create/copy files and use "git add" to track)
當(dāng)我們新增了一個文件之后,再查看狀態(tài), 會檢測到未追蹤的文件:
$ git status
On branch master
No commits yet
Untracked files:
 (use "git add ..." to include in what will be committed)
 hello.txt
nothing added to commit but untracked files present (use "git add" 
to track)
6f038342-5f1f-11ed-8abf-dac502259ad0.png

添加暫存區(qū)

git add 文件名
$ git add hello.txt
warning: LF will be replaced by CRLF in hello.txt.
The file will have its original line endings in your working 
directory.
再次查看狀態(tài)(檢測到暫存區(qū)有新文件:
$ git status
On branch master
No commits yet
Changes to be committed:
 (use "git rm --cached ..." to unstage)
 new file: hello.txt
6f038342-5f1f-11ed-8abf-dac502259ad0.png

提交本地庫

git commit -m "日志信息" 文件名
$ git commit -m "my first commit" hello.txt
warning: LF will be replaced by CRLF in hello.txt.
The file will have its original line endings in your working 
directory.
[master (root-commit) 86366fa] my first commit
1 file changed, 16 insertions(+)
create mode 100644 hello.txt
再查看狀態(tài)(沒有文件需要提交):
$ git status
On branch master
nothing to commit, working tree clean
6f038342-5f1f-11ed-8abf-dac502259ad0.png

修改文件

修改一下文件之后再查看狀態(tài):
$ git status
On branch master
Changes not staged for commit:
 (use "git add ..." to update what will be committed)
 (use "git checkout -- ..." to discard changes in working 
directory)
 modified: hello.txt
no changes added to commit (use "git add" and/or "git commit -a")
那么接下來就需要再次將修改的文件提交到暫存區(qū),然后提交到本地倉庫。 6f038342-5f1f-11ed-8abf-dac502259ad0.png

查看歷史版本

git reflog 查看版本信息
git log 查看版本詳細(xì)信息
如果是想快速瀏覽版本信息,可以使用 reflog 即可,畢竟公司項(xiàng)目版本迭代信息可能已經(jīng)很多了,想看詳細(xì)日志也得看你有沒有那個精力了。
$ git reflog
087a1a7 (HEAD -> master) HEAD@{0}: commit: my third commit
ca8ded6 HEAD@{1}: commit: my second commit
86366fa HEAD@{2}: commit (initial): my first commit
6f038342-5f1f-11ed-8abf-dac502259ad0.png

版本

以前我只知道版本回退,現(xiàn)在我知道原來還能向新。
git reset --hard 版本號
版本號是什么?版本號,查看一下日志就能看到了。
$ git reflog
087a1a7 (HEAD -> master) HEAD@{0}: commit: my third commit
ca8ded6 HEAD@{1}: commit: my second commit
86366fa HEAD@{2}: commit (initial): my first commit
--切換到 86366fa 版本,也就是我們第一次提交的版本
$ git reset --hard 86366fa
HEAD is now at 86366fa my first commit
--切換完畢之后再查看歷史記錄,當(dāng)前成功切換到了 86366fa 版本
$ git reflog
86366fa (HEAD -> master) HEAD@{0}: reset: moving to 86366fa
087a1a7 HEAD@{1}: commit: my third commit
ca8ded6 HEAD@{2}: commit: my second commit
86366fa (HEAD -> master) HEAD@{3}: commit (initial): my first commit
--然后查看文件 hello.txt,發(fā)現(xiàn)文件內(nèi)容已經(jīng)變化
Git 切換版本,底層其實(shí)是移動的 HEAD 指針。

Git 分支操作

在版本控制過程中,同時(shí)推進(jìn)多個任務(wù),為每個任務(wù),我們就可以創(chuàng)建每個任務(wù)的單獨(dú)分支。使用分支意味著程序員可以把自己的工作從開發(fā)主線上分離開來,開發(fā)自己分支的時(shí)候,不會影響主線分支的運(yùn)行。對于初學(xué)者而言,分支可以簡單理解為副本,一個分支就是一個單獨(dú)的副本。(分支底層其實(shí)也是指針的引用。

分支基本操作

查看分支

小伙子,不要一上來就想著創(chuàng)建分支嘛。先看看前輩們已經(jīng)達(dá)到了哪個高度了嘛。
git branch -v
$ git branch -v
* master 087a1a7 my third commit (*代表當(dāng)前所在的分區(qū))

創(chuàng)建分支

git branch 分支名
$ git branch hot-fix
$ git branch -v
hot-fix 087a1a7 my third commit (剛創(chuàng)建的新的分支,并將主分支 master
的內(nèi)容復(fù)制了一份)
* master 087a1a7 my third commit

分支開發(fā)

接下來就可以在分支上進(jìn)行開發(fā)了,開發(fā)完之后記得將代碼提交到本地倉庫。

切換分支

git checkout 分支名
$ git checkout hot-fix
Switched to branch 'hot-fix'
--發(fā)現(xiàn)當(dāng)先分支已由 master 改為 hot-fix

合并分支

git merge 分支名
這里有個要注意的點(diǎn):不僅是可以把旁支合并到主支上,主支也可以被合并到分支上,分支之間也可以互相合并。 反正你愛怎么玩怎么玩,都是在你本地倉庫上,又沒有推送到遠(yuǎn)程倉庫。 那現(xiàn)在我們想把旁支合并到主支上要怎么做呢?
1、切換到主支
2、git merge 旁支名
這樣就萬事大吉了嗎?不一定的。腦子清醒的話很容易想到一個問題:主支修改了一個文件,分支也修改了同一個文件,現(xiàn)在以誰的為準(zhǔn)? 腦子更清醒的人就要說了:你傻呀,我 clone 下來就切到分支去操作了,在我本地倉庫我又不會去動主支的。 腦子再清醒一點(diǎn)的人已經(jīng)懶的跟他說了:大哥,咱這是團(tuán)隊(duì)開發(fā),咱的本地倉庫早晚是都要合并到主線上的。

合并沖突解決

沖突產(chǎn)生的表現(xiàn):后面狀態(tài)為 MERGING 打開沖突文件可以看到?jīng)_突的地方:
hello git! hello atguigu!
<<<<<<< HEAD
hello git! hello atguigu! master test
hello git! hello atguigu!
=======
hello git! hello atguigu!
hello git! hello atguigu! hot-fix test
>>>>>>> hot-fix
HEAD 到 === 的部分是主支的,后面是 hot-fix 的 沖突產(chǎn)生的原因: 合并分支時(shí),兩個分支在同一個文件的同一個位置有兩套完全不同的修改。Git 無法替我們決定使用哪一個。必須人為決定新代碼內(nèi)容。 解決辦法:
1、刪掉沖突中不要的部分,留下最終的部分
2、git add 添加到暫存區(qū)
3、 git commit -m 注意,此時(shí)的 commit 后面不能帶文件名。帶文件名是幾個意思呢?到底用哪個呢?
然后就會發(fā)現(xiàn)合并成功了。

Git 團(tuán)隊(duì)協(xié)作機(jī)制

團(tuán)隊(duì)協(xié)作

跨團(tuán)隊(duì)協(xié)作

6f68d29c-5f1f-11ed-8abf-dac502259ad0.png

遠(yuǎn)程倉庫

這里不說 github,因?yàn)檫€有 gitlab,公司內(nèi)部代碼怎么能放到廣域網(wǎng)上呢!??!

6f77232e-5f1f-11ed-8abf-dac502259ad0.png

6f038342-5f1f-11ed-8abf-dac502259ad0.png

別名

為什么要別名呢?其實(shí)起不起別名都無所謂,主要是有個別名方便操作。你說是記一個網(wǎng)址容易還是記一個自己起的名字容易嘞?
$ git remote -v
$ git remote add ori https://github.com/xxx.git
$ git remote -v
ori https://github.com/xxx.git (fetch)
ori https://github.com/xxx.git (push)
6f038342-5f1f-11ed-8abf-dac502259ad0.png

推送本地倉庫到遠(yuǎn)程倉庫

當(dāng)文件還在本地倉庫的時(shí)候,咱怎么玩都行。但是一旦推送上去了,那就產(chǎn)生歷史版本了,大家都看得到了。 不過這個推送啊,也不是咱想推送就能推送的,還得管理員給咱授權(quán),這個不難理解吧。
git push 別名 分支
$ git push ori master
Logon failed, use ctrl+c to cancel basic credential prompt.
Username for 'https://github.com': atguiguyueyue
Counting objects: 3, done.
Delta compression using up to 12 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 276 bytes | 276.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com/atguiguyueyue/git-shTest.git
* [new branch] master -> master
6f038342-5f1f-11ed-8abf-dac502259ad0.png

克隆遠(yuǎn)程倉庫到本地

這不用說吧,這個很簡單。咱雖然說之前不會推送,但是拉取還是沒有問題的。 clone 會做如下操作: 1、拉取代碼。2、初始化本地倉庫。3、創(chuàng)建別名。 會創(chuàng)建別名,你 clone 之后用 git remote -v 看一下,一般是 origin。 6f038342-5f1f-11ed-8abf-dac502259ad0.png

拉取遠(yuǎn)程庫內(nèi)容

這個有兩個辦法,昨天我用的是先 clone,在 checkout 的方式選擇我要的分支。 也可以直接 pull:
git pull 遠(yuǎn)程庫地址別名 遠(yuǎn)程分支名
$ git pull ori master
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (1/1), done.
remote: Total 3 (delta 1), reused 3 (delta 1), pack-reused 0
Unpacking objects: 100% (3/3), done.
From https://github.com/atguiguyueyue/git-shTest
* branch master -> FETCH_HEAD
 7cb4d02..5dabe6b master -> ori/master
Updating 7cb4d02..5dabe6b
Fast-forward
hello.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

審核編輯 :李倩

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11332

    瀏覽量

    210022
  • Git
    Git
    +關(guān)注

    關(guān)注

    0

    文章

    201

    瀏覽量

    15794

原文標(biāo)題:Git詳解,一看就懂!

文章出處:【微信號:mcu168,微信公眾號:硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    飛凌嵌入式ElfBoard ELF 1板卡-git管理源碼之git安裝和使用

    git是什么?git是一個開源的分布式版本控制系統(tǒng),可以有效、高速地處理從很小到非常大的項(xiàng)目版本管理,也是Linus Torvalds為了幫助管理Linux內(nèi)核開發(fā)而開發(fā)的一個開放源碼的版本控制軟件
    發(fā)表于 01-14 09:08

    云服務(wù)器 Flexus X 實(shí)例:部署 Gitea,擁有自己的 Git 倉庫,管理本地代碼

    本篇文章通過部署 Gitea,實(shí)現(xiàn)本地 Git 倉庫,真實(shí)體驗(yàn)了“云服務(wù)器 Flexus X 實(shí)例”,深感其卓越性能與靈活性。這款實(shí)例以其六倍于常的強(qiáng)勁算力,搭配旗艦級的操作體驗(yàn),廣泛適用于高科技
    的頭像 發(fā)表于 01-07 16:59 ?105次閱讀
    云服務(wù)器 Flexus X 實(shí)例:部署 Gitea,擁有自己的 <b class='flag-5'>Git</b> 倉庫,管理本地代碼

    Flexus X 實(shí)例 C#/.Net Core 結(jié)合(git 代碼管理、docker 自定義鏡像)快速發(fā)布部署 - 讓你的項(xiàng)目飛起來~

    前言 ???云端部署新體驗(yàn),C# Web API 遇上 Git Docker,828 B2B 企業(yè)節(jié)特惠來襲!Flexus X 實(shí)例,為您的 C#應(yīng)用提供強(qiáng)大支撐,結(jié)合 Git 版本控制
    的頭像 發(fā)表于 12-25 21:15 ?183次閱讀
    Flexus X 實(shí)例 C#/.Net Core 結(jié)合(<b class='flag-5'>git</b> 代碼管理、docker 自定義鏡像)快速發(fā)布部署 - 讓你的項(xiàng)目飛起來~

    詳解MySQL多實(shí)例部署

    詳解MySQL多實(shí)例部署
    的頭像 發(fā)表于 11-11 11:10 ?306次閱讀

    溫度振動變送器的概述及功能介紹

    制造業(yè)還是戰(zhàn)略性新型產(chǎn)業(yè)都離不開溫度振動變送器的支持。 一、溫度振動變送器的概述 溫度振動變送器集成了溫度傳感技術(shù)和振動傳感技術(shù),可以測量工業(yè)設(shè)備的振動速度、表面溫度等參數(shù)。溫度振動變送器具有MEMS 芯片,采用嵌入式技
    的頭像 發(fā)表于 08-20 17:18 ?556次閱讀

    行程開關(guān)概述及應(yīng)用介紹

    一、行程開關(guān)概述 行程開關(guān),作為位置開關(guān)(限位開關(guān))的一種,是廣泛應(yīng)用于小電流環(huán)境中的主要控制電器。它通過機(jī)械運(yùn)動部件的觸發(fā)來實(shí)現(xiàn)觸點(diǎn)的接通或斷開,進(jìn)而控制電路,以實(shí)現(xiàn)特定的控制目標(biāo)。這種開關(guān)機(jī)
    的頭像 發(fā)表于 08-16 17:31 ?1161次閱讀

    深度神經(jīng)網(wǎng)絡(luò)概述及其應(yīng)用

    通過模仿人類大腦神經(jīng)元的連接方式和處理機(jī)制,設(shè)計(jì)多層神經(jīng)元結(jié)構(gòu)來處理復(fù)雜的數(shù)據(jù)模式,從而在各種數(shù)據(jù)驅(qū)動的問題中展現(xiàn)出強(qiáng)大的能力。本文將從深度神經(jīng)網(wǎng)絡(luò)的基本概念、結(jié)構(gòu)、工作原理、關(guān)鍵技術(shù)以及其在多個領(lǐng)域的應(yīng)用等方面進(jìn)行全面概述。
    的頭像 發(fā)表于 07-04 16:08 ?1459次閱讀

    ubuntu下的vscode插件安裝idf時(shí),總是找不到git,為什么?

    總是提示:Git is not found in current environment 但是我已經(jīng)在setting.json下設(shè)置了\"git.path\": \"/bin/git\" 同行,命令行里查看
    發(fā)表于 06-21 07:16

    通過git命令獲取ESP8266_RTOS_SDK失敗如何解決?

    本人使用的硬件平臺為esp8266,開發(fā)環(huán)境為ubuntu22.04。在通過git命令獲取ESP8266_RTOS_SDK失敗,通過上網(wǎng)搜索嘗試了很多方法無效。具體情況如下
    發(fā)表于 06-07 07:26

    請問下使用IDF怎么做用git做版本控制?

    請問下使用IDF怎么做用git做版本控制?是保存自己應(yīng)用部分的代碼還是整個SDK都要保存,但是整個框架都是官方下的,有沒必要保存,求各位大神告知下你們怎么處理的。
    發(fā)表于 06-06 07:15

    Git發(fā)布新版本 修補(bǔ)五處安全漏洞 包含嚴(yán)重遠(yuǎn)程代碼執(zhí)行風(fēng)險(xiǎn)

    CVE-2024-32002漏洞的嚴(yán)重性在于,黑客可通過創(chuàng)建特定的Git倉庫子模塊,誘騙Git將文件寫入.git/目錄,而非子模塊的工作樹。如此一來,攻擊者便能在克隆過程中植入惡意腳本,用戶幾乎無法察覺。
    的頭像 發(fā)表于 05-31 10:09 ?636次閱讀

    飛凌ElfBoard ELF 1板卡-ubuntu18.04 git安裝及基本使用

    1.安裝gitsudo apt-get install git 2.git初始化git init 3.設(shè)置用戶名和郵箱git config --global user.name \"你
    發(fā)表于 03-21 16:23

    光伏逆變器拓?fù)?b class='flag-5'>概述及關(guān)鍵技術(shù)

    光伏逆變器拓?fù)?b class='flag-5'>概述及關(guān)鍵技術(shù)
    的頭像 發(fā)表于 02-21 09:47 ?907次閱讀
    光伏逆變器拓?fù)?b class='flag-5'>概述及</b>關(guān)鍵技術(shù)

    藍(lán)牙 | 軟件:Git管理高通的ChipCode項(xiàng)目

    最近發(fā)現(xiàn)大家在高通chipcode網(wǎng)站上下載不了代碼,小編一直使用git的方式獲取新版本代碼,沒有遇到什么阻礙。于是小編到新主機(jī)上嘗試下載代碼的壓縮包和git代碼,都遇到了問題。由于壓縮包是高通自己
    的頭像 發(fā)表于 01-26 08:29 ?429次閱讀
    藍(lán)牙 | 軟件:<b class='flag-5'>Git</b>管理高通的ChipCode項(xiàng)目

    克服PLC編程的難題—基于Git的軟件

    Git是一種分布式版本控制系統(tǒng),它可以記錄文件的修改歷史和版本變化,并可以支持多人協(xié)同開發(fā)。
    的頭像 發(fā)表于 01-22 09:30 ?986次閱讀
    克服PLC編程的難題—基于<b class='flag-5'>Git</b>的軟件