在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Git 命令+原理 程序員必備的基礎

數據分析與開發 ? 來源:數據分析與開發 ? 作者:撿田螺的小男孩 ? 2020-11-14 10:01 ? 次閱讀

掌握Git命令是每位程序員必備的基礎,之前一直是用smartGit工具,直到看到大佬們都是在用Git命令操作的,回想一下,發現有些Git命令我都忘記了,于是寫了這篇博文,復習一下~

文章目錄

Git是什么?

Git的相關理論基礎

日常開發中,Git的基本常用命令

Git進階之分支處理

Git進階之處理沖突

Git進階之撤銷與回退

Git進階之標簽tag

Git其他一些經典命令

Git是什么

在回憶Git是什么的話,我們先來復習這幾個概念哈~

什么是版本控制?

百度百科定義是醬紫的~

?

版本控制是指對軟件開發過程中各種程序代碼、配置文件及說明文檔等文件變更的管理,是軟件配置管理的核心思想之一。

那些年,我們的畢業論文,其實就是版本變更的真實寫照...腦洞一下,版本控制就是這些論文變更的管理~

什么是集中化的版本控制系統

那么,集中化的版本控制系統又是什么呢,說白了,就是有一個集中管理的中央服務器,保存著所有文件的修改歷史版本,而協同開發者通過客戶端連接到這臺服務器,從服務器上同步更新或上傳自己的修改。

什么是分布式版本控制系統?

分布式版本控制系統,就是遠程倉庫同步所有版本信息到本地的每個用戶。嘻嘻,這里分三點闡述吧:

用戶在本地就可以查看所有的歷史版本信息,但是偶爾要從遠程更新一下,因為可能別的用戶有文件修改提交到遠程哦。

用戶即使離線也可以本地提交,push推送到遠程服務器才需要聯網。

每個用戶都保存了歷史版本,所以只要有一個用戶設備沒問題,就可以恢復數據啦~

什么是Git?

Git是免費、開源的分布式版本控制系統,可以有效、高速地處理從很小到非常大的項目版本管理。

Git的相關理論基礎

Git的四大工作區域

Git的工作流程

Git文件的四種狀態

一張圖解釋Git的工作原理

Git的四大工作區域

先復習Git的幾個工作區域哈:

Workspace:你電腦本地看到的文件和目錄,在Git的版本控制下,構成了工作區。

Index/Stage:暫存區,一般存放在 .git目錄下,即.git/index,它又叫待提交更新區,用于臨時存放你未提交的改動。比如,你執行git add,這些改動就添加到這個區域啦。

Repository:本地倉庫,你執行git clone 地址,就是把遠程倉庫克隆到本地倉庫。它是一個存放在本地的版本庫,其中HEAD指向最新放入倉庫的版本。當你執行git commit,文件改動就到本地倉庫來了~

Remote:遠程倉庫,就是類似github,碼云等網站所提供的倉庫,可以理解為遠程數據交換的倉庫~

Git的工作流程

上一小節介紹完Git的四大工作區域,這一小節呢,介紹Git的工作流程咯,把git的操作命令和幾個工作區域結合起來,個人覺得更容易理解一些吧,哈哈,看圖:

git 的正向工作流程一般就這樣:

從遠程倉庫拉取文件代碼回來;

在工作目錄,增刪改查文件;

把改動的文件放入暫存區;

將暫存區的文件提交本地倉庫;

將本地倉庫的文件推送到遠程倉庫;

Git文件的四種狀態

根據一個文件是否已加入版本控制,可以把文件狀態分為:Tracked(已跟蹤)和Untracked(未跟蹤),而tracked(已跟蹤)又包括三種工作狀態:Unmodified,Modified,Staged

Untracked: 文件還沒有加入到git庫,還沒參與版本控制,即未跟蹤狀態。這時候的文件,通過git add 狀態,可以變為Staged狀態

Unmodified:文件已經加入git庫, 但是呢,還沒修改, 就是說版本庫中的文件快照內容與文件夾中還完全一致。Unmodified的文件如果被修改, 就會變為Modified. 如果使用git remove移出版本庫, 則成為Untracked文件。

Modified:文件被修改了,就進入modified狀態啦,文件這個狀態通過stage命令可以進入staged狀態

staged:暫存狀態. 執行git commit則將修改同步到庫中, 這時庫中的文件和本地文件又變為一致, 文件為Unmodified狀態.

一張圖解釋Git的工作原理

日常開發中,Git的基本常用命令

git clone

git checkout -b dev

git add

git commit

git log

git diff

git status

git pull/git fetch

git push

這個圖只是模擬一下git基本命令使用的大概流程哈~

git clone

當我們要進行開發,第一步就是克隆遠程版本庫到本地呢

git clone url 克隆遠程版本庫

git checkout -b dev

克隆完之后呢,開發新需求的話,我們需要新建一個開發分支,比如新建開發分支dev

創建分支:

git checkout -b dev 創建開發分支dev,并切換到該分支下

git add

git add的使用格式:

git add .添加當前目錄的所有文件到暫存區git add [dir]添加指定目錄到暫存區,包括子目錄git add [file1]添加指定文件到暫存區

有了開發分支dev之后,我們就可以開始開發啦,假設我們開發完HelloWorld.java,可以把它加到暫存區,命令如下

git add Hello.java 把HelloWorld.java文件添加到暫存區去

git commit

git commit的使用格式:

git commit -m [message] 提交暫存區到倉庫區,message為說明信息git commit [file1] -m [message] 提交暫存區的指定文件到本地倉庫git commit --amend -m [message] 使用一次新的commit,替代上一次提交

把HelloWorld.java文件加到暫存區后,我們接著可以提交到本地倉庫啦~

git commit -m 'helloworld開發'

git status

git status,表示查看工作區狀態,使用命令格式:

git status 查看當前工作區暫存區變動git status -s 查看當前工作區暫存區變動,概要信息git status --show-stash 查詢工作區中是否有stash(暫存的文件)

當你忘記是否已把代碼文件添加到暫存區或者是否提交到本地倉庫,都可以用git status看看哦~

git log

git log,這個命令用得應該比較多,表示查看提交歷史/提交日志~

git log 查看提交歷史git log --oneline 以精簡模式顯示查看提交歷史git log -p 查看指定文件的提交歷史git blame 一列表方式查看指定文件的提交歷史

嘻嘻,看看dev分支上的提交歷史吧~要回滾代碼就經常用它喵喵提交歷史~

git diff

git diff 顯示暫存區和工作區的差異git diff filepath filepath路徑文件中,工作區與暫存區的比較差異git diff HEAD filepath 工作區與HEAD ( 當前工作分支)的比較差異git diff branchName filepath 當前分支的文件與branchName分支的文件的比較差異git diff commitId filepath 與某一次提交的比較差異

如果你想對比一下你改了哪些內容,可以用git diff對比一下文件修改差異哦

git pull/git fetch

git pull 拉取遠程倉庫所有分支更新并合并到本地分支。gitpulloriginmaster將遠程master分支合并到當前本地分支git pull origin master:master 將遠程master分支合并到當前本地master分支,冒號后面表示本地分支 git fetch --all 拉取所有遠端的最新代碼git fetch origin master 拉取遠程最新master分支代碼

我們一般都會用git pull拉取最新代碼看看的,解決一下沖突,再推送代碼到遠程倉庫的。

有些伙伴可能對使用git pull還是git fetch有點疑惑,其實 git pull = git fetch+ git merge。pull的話,拉取遠程分支并與本地分支合并,fetch只是拉遠程分支,怎么合并,可以自己再做選擇。

git push

git push 可以推送本地分支、標簽到遠程倉庫,也可以刪除遠程分支哦。

git push origin master 將本地分支的更新全部推送到遠程倉庫master分支。git push origin -d 刪除遠程branchname分支git push --tags 推送所有標簽

如果我們在dev開發完,或者就想把文件推送到遠程倉庫,給別的伙伴看看,就可以使用git push origin dev~

Git進階之分支處理

Git一般都是存在多個分支的,開發分支,回歸測試分支以及主干分支等,所以Git分支處理的命令也需要很熟悉的呀~

git branch

git checkout

git merge

git branch

git branch用處多多呢,比如新建分支、查看分支、刪除分支等等

新建分支:

git checkout -b dev2 新建一個分支,并且切換到新的分支dev2git branch dev2 新建一個分支,但是仍停留在原來分支

查看分支:

git branch 查看本地所有的分支git branch -r 查看所有遠程的分支git branch -a 查看所有遠程分支和本地分支

刪除分支:

git branch -D 刪除本地branchname分支

git checkout

切換分支:

git checkout master 切換到master分支

git merge

我們在開發分支dev開發、測試完成在發布之前,我們一般需要把開發分支dev代碼合并到master,所以git merge也是程序員必備的一個命令。

git merge master 在當前分支上合并master分支過來git merge --no-ff origin/dev 在當前分支上合并遠程分支devgit merge --abort 終止本次merge,并回到merge前的狀態

比如,你開發完需求后,發版需要把代碼合到主干master分支,如下:

Git進階之處理沖突

Git版本控制,是多個人一起搞的,多個分支并存的,這就難免會有沖突出現~

Git合并分支,沖突出現

同一個文件,在合并分支的時候,如果同一行被多個分支或者不同人都修改了,合并的時候就會出現沖突。

舉個粟子吧,我們現在在dev分支,修改HelloWorld.java文件,假設修改了第三行,并且commit提交到本地倉庫,修改內容如下:

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello,撿田螺的小男孩!"); }}

我們切回到master分支,也修改HelloWorld.java同一位置內容,如下:

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello,jay!!"); }}

再然后呢,我們提交一下master分支的這個改動,并把dev分支合并過下,就出現沖突啦,如圖所示:

Git解決沖突

Git 解決沖突步驟如下:

查看沖突文件內容

確定沖突內容保留哪些部分,修改文件

重新提交,done

1.查看沖突文件內容

git merge提示沖突后,我們切換到對應文件,看看沖突內容哈,,如下:

2.確定沖突內容保留哪些部分,修改文件

Git用<<<<<<<,=======,>>>>>>>標記出不同分支的內容,

<<<<<<>>>>>> dev是指dev分支上修改的內容

所以呢,我們確定到底保留哪個分支內容,還是兩個分支內容都保留呢,然后再去修改文件沖突內容~

3.修改完沖突文件內容,我們重新提交,沖突done

Git進階之撤銷與回退

Git的撤銷與回退,在日常工作中使用的比較頻繁。比如我們想將某個修改后的文件撤銷到上一個版本,或者想撤銷某次多余的提交,都要用到git的撤銷和回退操作。

代碼在Git的每個工作區域都是用哪些命令撤銷或者回退的呢,如下圖所示:

有關于Git的撤銷與回退,一般就以下幾個核心命令

git checkout

git reset

git revert

git checkout

如果文件還在工作區,還沒添加到暫存區,可以使用git checkout撤銷

git checkout [file] 丟棄某個文件filegit checkout . 丟棄所有文件

以下demo,使用git checkout -- test.txt 撤銷了test.txt的修改

git reset

git reset的理解

git reset的作用是修改HEAD的位置,即將HEAD指向的位置改變為之前存在的某個版本.

為了更好地理解git reset,我們來回顧一下,Git的版本管理及HEAD的理解

Git的所有提交,會連成一條時間軸線,這就是分支。如果當前分支是master,HEAD指針一般指向當前分支,如下:

假設執行git reset,回退到版本二之后,版本三不見了哦,如下:

git reset的使用

Git Reset的幾種使用模式

git reset HEAD --file回退暫存區里的某個文件,回退到當前版本工作區狀態git reset –-soft 目標版本號 可以把版本庫上的提交回退到暫存區,修改記錄保留git reset –-mixed 目標版本號 可以把版本庫上的提交回退到工作區,修改記錄保留git reset –-hard 可以把版本庫上的提交徹底回退,修改的記錄全部revert。

先看一個粟子demo吧,代碼git add到暫存區,并未commit提交,可以醬紫回退,如下:

git reset HEAD file 取消暫存git checkout file 撤銷修改

再看另外一個粟子吧,代碼已經git commit了,但是還沒有push:

git log 獲取到想要回退的commit_idgit reset --hard commit_id 想回到過去,回到過去的commit_id

如果代碼已經push到遠程倉庫了呢,也可以使用reset回滾哦(這里大家可以自己操作實踐一下哦)~

git loggit reset --hard commit_idgit push origin HEAD --force

git revert

與git reset不同的是,revert復制了那個想要回退到的歷史版本,將它加在當前分支的最前端。

revert之前:

revert 之后:

當然,如果代碼已經推送到遠程的話,還可以考慮revert回滾呢

git log 得到你需要回退一次提交的commit idgit revert -n 撤銷指定的版本,撤銷也會作為一次提交進行保存

Git進階之標簽tag

打tag就是對發布的版本標注一個版本號,如果版本發布有問題,就把該版本拉取出來,修復bug,再合回去。

git tag 列出所有taggit tag [tag] 新建一個tag在當前commitgit tag [tag] [commit] 新建一個tag在指定commitgit tag -d [tag] 刪除本地taggit push origin [tag] 推送tag到遠程git show [tag] 查看taggit checkout -b [branch] [tag] 新建一個分支,指向某個tag

Git其他一些經典命令

git rebase

rebase又稱為衍合,是合并的另外一種選擇。

假設有兩個分支master和test

D---E test / A---B---C---F--- master

執行 git merge test得到的結果

D--------E / A---B---C---F----G--- test, master

執行git rebase test,得到的結果

A---B---D---E---C‘---F‘--- test, master

rebase好處是:獲得更優雅的提交樹,可以線性的看到每一次提交,并且沒有增加提交節點。所以很多時候,看到有些伙伴都是這個命令拉代碼:git pull --rebase,就是因為想更優雅,哈哈

git stash

stash命令可用于臨時保存和恢復修改

git stash 把當前的工作隱藏起來 等以后恢復現場后繼續工作git stash list 顯示保存的工作進度列表git stash pop stash@{num} 恢復工作進度到工作區git stash show :顯示做了哪些改動git stash drop stash@{num} :刪除一條保存的工作進度git stash clear 刪除所有緩存的stash。

git reflog

顯示當前分支的最近幾次提交

git blame filepath

git blame 記錄了某個文件的更改歷史和更改人,可以查看背鍋人,哈哈

git remote

git remote 查看關聯的遠程倉庫的名稱git remote add url 添加一個遠程倉庫git remote show [remote] 顯示某個遠程倉庫的信息

參考與感謝

感謝各位前輩的文章:

一個小時學會Git(https://www.cnblogs.com/best/p/7474442.html#_label3_4_0_4)

【Git】(1)---工作區、暫存區、版本庫、遠程倉庫(https://www.cnblogs.com/qdhxhz/p/9757390.html)

Git Reset 三種模式(https://www.jianshu.com/p/c2ec5f06cf1a)

Git恢復之前版本的兩種方法reset、revert(圖文詳解)(https://blog.csdn.net/yxlshk/article/details/79944535)

Git撤銷&回滾操作(git reset 和 get revert)(https://blog.csdn.net/asoar/article/details/84111841)

為什么要使用git pull --rebase?(https://www.jianshu.com/p/dc367c8dca8e)

責任編輯:xj

原文標題:7000+ 字帶你全面搞懂 Git 命令+原理!

文章出處:【微信公眾號:數據分析與開發】歡迎添加關注!文章轉載請注明出處。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 數據
    +關注

    關注

    8

    文章

    7030

    瀏覽量

    89038
  • 命令
    +關注

    關注

    5

    文章

    684

    瀏覽量

    22027
  • Git
    Git
    +關注

    關注

    0

    文章

    199

    瀏覽量

    15765

原文標題:7000+ 字帶你全面搞懂 Git 命令+原理!

文章出處:【微信號:DBDevs,微信公眾號:數據分析與開發】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    TMS320C6000程序員指南

    電子發燒友網站提供《TMS320C6000程序員指南.pdf》資料免費下載
    發表于 12-24 17:19 ?0次下載
    TMS320C6000<b class='flag-5'>程序員</b>指南

    TMS320C55x DSP CPU程序員參考補充

    電子發燒友網站提供《TMS320C55x DSP CPU程序員參考補充.pdf》資料免費下載
    發表于 12-21 11:36 ?0次下載
    TMS320C55x DSP CPU<b class='flag-5'>程序員</b>參考補充

    UCD3138A64/UCD3138128程序員手冊

    電子發燒友網站提供《UCD3138A64/UCD3138128程序員手冊.pdf》資料免費下載
    發表于 12-09 14:42 ?0次下載
    UCD3138A64/UCD3138128<b class='flag-5'>程序員</b>手冊

    機械革命發布CODE AI程序員

    近日,英特爾新質生產力技術生態大會在成都舉行,機械革命作為重要參展商帶來了多款明星產品引爆全場!其中更是在AI PC軟件生態產品發布分論壇上,Intel、智譜、機械革命三方聯合發布了專為程序員設計的CODE AI程序員本,成為本次大會的一大亮點。
    的頭像 發表于 11-30 10:34 ?389次閱讀

    Linux驅動程序程序員指南

    電子發燒友網站提供《Linux驅動程序程序員指南.pdf》資料免費下載
    發表于 11-22 15:53 ?0次下載
    Linux驅動<b class='flag-5'>程序</b><b class='flag-5'>程序員</b>指南

    AI編程工具會不會搶程序員飯碗

    AI編程工具可輔助編程,減少手動編碼,提升效率,對程序員有積極影響也有挑戰。程序員需深化技能、拓寬知識應對。長遠看,AI與人類程序員將共生共榮。
    的頭像 發表于 11-08 10:17 ?169次閱讀

    第五屆長沙·中國1024程序員節開幕

    據官方媒體報道,10月24日;? 第五屆長沙·中國1024程序員節在湖南湘江新區開幕;本次中國1024程序員節以“智能應用新生態”為主題。設置有岳麓對話、技術英雄會、主題峰會及賽事、展覽等活動,一場
    的頭像 發表于 10-25 15:42 ?201次閱讀

    京東上萬程序員都AI用它!

    對大模型生成代碼進行智能修復,為程序員開啟代碼漏洞修復的“自動駕駛”模式,不但減少人工接入、提高工作效率,更為企業抵御內外部各種攻擊構建起一道堅固的安全屏障,確保業務的連續性和穩定性。 JoyCoder是京東云自主研發的一款輔助開發人員
    的頭像 發表于 07-17 16:29 ?269次閱讀
    京東上萬<b class='flag-5'>程序員</b>都AI用它!

    程序員節視頻創意大賽,用串口屏贏取千元大獎

    10月24日,程序員專屬的節日里,我們盛大開啟“程序員節視頻創意大賽”特別活動!這不僅是一場視覺的盛宴,更是智慧與創意的璀璨碰撞。我們誠摯邀請每一位程序員及編程愛好者,拿起你的鏡頭,記錄下那些平凡日子中的不凡瞬間,讓編程的魅力與
    的頭像 發表于 07-08 10:38 ?72次閱讀
    <b class='flag-5'>程序員</b>節視頻創意大賽,用串口屏贏取千元大獎

    程序員節視頻創意盛宴,邀您共襄盛舉!

    10月24日,程序員專屬的節日里,我們盛大開啟“程序員節視頻創意大賽”特別活動!這不僅是一場視覺的盛宴,更是智慧與創意的璀璨碰撞。我們誠摯邀請每一位程序員及編程愛好者,拿起你的鏡頭,記錄下那些平凡日子中的不凡瞬間,讓編程的魅力與
    的頭像 發表于 07-04 09:00 ?67次閱讀
    <b class='flag-5'>程序員</b>節視頻創意盛宴,邀您共襄盛舉!

    適者生存,程序員最終會流向哪……

    程序員沒有永遠的護城河!!就目前的互聯網大環境來看,it行業已經是……
    的頭像 發表于 03-11 17:11 ?411次閱讀
    適者生存,<b class='flag-5'>程序員</b>最終會流向哪……

    薪資高、青春飯,是不是程序員=青樓?

    花期太短。技術迭代快,年齡大容易失業。 就這幾年的互聯網環境而言,不管是前端、Java、Android開發等等行業。已經感受到程序員不是太卷就是工作難找,薪資過低。以前高工現在拿著中低程序員薪資
    發表于 03-06 21:32

    瑞薩Flash程序員V3 發布說明

    電子發燒友網站提供《瑞薩Flash程序員V3 發布說明.pdf》資料免費下載
    發表于 02-19 09:37 ?1次下載
    瑞薩Flash<b class='flag-5'>程序員</b>V3 發布說明

    2024程序員的未來方向如何走?還看今朝

    這幾年的IT行業想必大家已經感受到了,Android、Java、前端等等程序員都經歷了大廠……
    的頭像 發表于 02-02 09:45 ?825次閱讀
    2024<b class='flag-5'>程序員</b>的未來方向如何走?還看今朝

    1月18號“純鴻蒙”千帆啟航,程序員預備!

    。 如何正確看待鴻蒙? 我作為程序員來說,首先是看鴻蒙的發展、市場開發崗位、薪資以及前景。 這幾年對鴻蒙的發展情況來分析,從2019年開始鴻蒙的出來今天,華為鴻蒙取得了很大的成就。從“不兼容
    發表于 01-16 22:13
    主站蜘蛛池模板: 久久手机看片你懂的日韩1024| 久久澳门| 啪啪网站免费看| 亚洲综合色婷婷中文字幕| 日韩精品另类天天更新影院| www.三级.com| 奇米影视亚洲四色8888| 亚洲成人在线免费| 国产精品15p| 511韩国理论片在线观看| 亚洲四虎在线| 国产精品久久久久久久久免费hd | 久久天天躁狠狠躁夜夜躁综合 | 伊人精品久久久大香线蕉99| 免费美剧在线观看| 日本特黄绿像大片免费看| 日韩亚洲人成在线综合| 26uuu另类欧美亚洲曰本| 亚洲色图图片区| 成人在线免费| free性乌克兰高清videos| 日韩一级在线播放免费观看| 午夜在线视频免费观看| 国产午夜视频| 欧美色图狠狠干| 欧美三级黄视频| 久久久久国产精品免费看| 又黄又涩的视频| 国产成人精品曰本亚洲77美色| 98色花堂国产第一页| 日日噜噜夜夜狠狠tv视频免费| 午夜毛片福利| 69xxxxxxxxxhd日本| 欧美婷婷综合| 黄色日屁| 色女人天堂| 色综合视频| 午夜视频欧美| 天天舔| 国产99热| 人人做人人插|