《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 可編程邏輯 > 其他 > 30分鐘精通Git,學(xué)不會來找我

30分鐘精通Git,學(xué)不會來找我

2022-11-23
作者: 電子技術(shù)應(yīng)用專欄作家 一口Linux
來源:電子技術(shù)應(yīng)用專欄作家 一口Linux
關(guān)鍵詞: git 版本控制系統(tǒng)

  一、 版本控制工具

  1.1. 什么是版本控制系統(tǒng)?

  版本控制系統(tǒng)(Version Control System):是一種記錄一個或若干文件內(nèi)容變化,以便將來查閱特定版本修訂情況的系統(tǒng)。版本控制系統(tǒng)不僅可以應(yīng)用于軟件源代碼的文本文件,而且可以對任何類型的文件進(jìn)行版本控制。

  常見的版本控制系統(tǒng)有:cvs、svn、git

  1.2. 為什么要有版本控制系統(tǒng)?

  在開發(fā)過程中,經(jīng)常需要對一個文件進(jìn)行修改甚至刪除,但是我們又希望能夠保存這個文件的歷史記錄,如果通過備份,那么管理起來會非常的復(fù)雜。

  在多人開發(fā)時,如果需要多人合作開發(fā)一個頁面,那么修改以及合并也會非常的棘手。容易出現(xiàn)沖突。

  1.3. 版本控制系統(tǒng)分類

  關(guān)于版本控制

  本地版本控制系統(tǒng)

  本地版本控制系統(tǒng)就是在一臺機(jī)器上,記錄版本的不同變化,保證內(nèi)容不會丟失

  缺點(diǎn):如果多人開發(fā),每個人都在不同的系統(tǒng)和電腦上開發(fā),沒辦法協(xié)同工作。

  集中式版本控制系統(tǒng)

  svn/cvs都是集中式的版本控制系統(tǒng)

  需要一個中央服務(wù)器來管理代碼的的版本和備份

  所有的用戶電腦都是從中央服務(wù)器獲取代碼或者是將本地的代碼提交到中央服務(wù)器

  依賴于網(wǎng)絡(luò)環(huán)境,如果連不上中央服務(wù)器,就無法提交和獲取代碼。

  如果中央服務(wù)器宕機(jī),所有人都無法工作。

  微信截圖_20221123163041.png

  分布式版本控制系統(tǒng)

  git是分布式的版本控制系統(tǒng)。

  需要一臺服務(wù)器作為代碼倉庫

  每個用戶電腦都是一個服務(wù)器(代碼倉庫),并且和代碼倉庫是鏡像的,用戶修改和獲取代碼都是提交到自己的服務(wù)器當(dāng)中。

  不需要網(wǎng)絡(luò)就可以進(jìn)行工作。

  當(dāng)連接網(wǎng)絡(luò)時,用戶可以選擇將自己的服務(wù)器與代碼倉庫進(jìn)行同步。

  微信截圖_20221123163549.png

  二、 git

  2.1. git介紹

  Git是一款免費(fèi)、開源的分布式版本控制系統(tǒng) ,用于敏捷高效地處理任何或小或大的項(xiàng)目。

  Git 是 Linus Torvalds 為了幫助管理 Linux 內(nèi)核開發(fā)而開發(fā)的一個開放源碼的版本控制軟件。

  2.2. git安裝

  下載地址

  #  推薦使用國內(nèi)鏡像下載 http://npm.taobao.org/mirrors/git-for-windows

  1. 不要安裝在中文目錄

  2. 不要使用桌面管理軟件

  安裝很簡單,一直下一步即可。在任意的目錄下右鍵,能夠出現(xiàn)下圖,表示安裝成功了。

  微信截圖_20221123163621.png

  git用法方式主要有兩種,

  git gui,即圖形化界面的方式

  git bash,命令行的方式

  bash是linux系統(tǒng)的命令,因此學(xué)習(xí)git前,我們先學(xué)習(xí)一下bash

  在任意文件夾中,都可以使用右鍵,通過git bash here打開命令行窗口,此時的路徑就是當(dāng)前目錄。

  窗口上右鍵,通過options-->Text-->select可以調(diào)整字體的大小。

  # cd 改變目錄  (change directory)

  cd images   #進(jìn)入images文件夾

  cd ..      #進(jìn)入上一層目錄

  cd ~       #進(jìn)入用戶根目錄

  # tab  自動補(bǔ)全,當(dāng)我們輸命令或者目錄很長時,可以使用tab鍵進(jìn)行自動補(bǔ)全。

  # 按兩次tab,會把所有符合要求的內(nèi)容都列出來。

  # pwd 打印當(dāng)前目錄的路徑 (print work directory)

  pwd

  # ls 展示當(dāng)前目錄列表(list)

  ls         # 展示當(dāng)前目錄

  ls -a      # 展示全部內(nèi)容,包括隱藏文件

  ls -l      # 以列表的形式展示內(nèi)容

  ls -al     # 以列表的形式展示所有的內(nèi)容,包括隱藏文件。

  ls --help  # 查看ls所有的參數(shù)。

  ls -l images   # 展示images目錄下的文件,如果沒有寫目錄,默認(rèn)展示當(dāng)前目錄。

  # clear reset清屏

  clear  # 清除屏幕內(nèi)容,滾動條,保留了歷史

  reset  # 重置,歷史記錄沒了。

  # mkdir  創(chuàng)建一個文件夾 (make directory)

  mkdir css          # 創(chuàng)建一個css的文件夾

  mkdir css img js   # 創(chuàng)建了三個文件夾

  # rmdir  刪除一個空的文件夾(沒啥用)

  rmdir img   # 刪除文件夾

  # touch  創(chuàng)建文件

  touch index.html   #創(chuàng)建了一個index.html文件

  touch css/index.css # 在css目錄下創(chuàng)建idnex.css文件

  # rm 刪除一個文件獲取文件夾

  rm index.html # 刪除index.html文件

  rm js         # 刪除空的js文件夾

  rm -r css     # 遞歸刪除一個文件夾

  # mv 移動文件(move)

  mv index.html js            # 將html文件移動到j(luò)s文件夾中

  mv index.html index2.html   # 將index.html重命名為index2.html

  # cp 復(fù)制文件(cp)

  cp index.html index2.html   # 復(fù)制index.html文件,命名為index2.html

  cp -r css css02             # 如果復(fù)制的是文件夾,需要使用-r參數(shù)。

  # cat 查看文件全部內(nèi)容

  cat index.html

  # less 查看文件部分內(nèi)容

  less index.html

  # q退出查看


  2.3. 基本操作

  初始化git倉庫git init

  查看當(dāng)前git倉庫的狀態(tài)git status

  將文件添加到git的暫存區(qū)git add 文件名

  將文件由暫存區(qū)提交到倉庫區(qū)git commit -m '提交說明'

  查看提交日志git log


  # 初始化git倉庫,會在當(dāng)前目錄生成一個隱藏文件夾 .git  不要去修改這個文件夾下的任意東西。

  git init

  # 查看git的狀態(tài) ,如果此時新建一個文件,那么這個文件是沒有被追蹤的,說白了git還沒有管理這個新建的文件

  git status

  # 讓git管理這個新建的文件

  git add index.html

  # 讓文件由暫存區(qū)提交到倉庫區(qū)。此時文件才真正的被git管理了。

  # 如果提交日志亂碼,右鍵-->options-->Text-->將編碼改成utf-8

  git commit -m '第一次提交'

  # 查看提交日志

  git log


  2.4. 配置郵箱和用戶名

  如果第一次使用git,會要求設(shè)置用戶名和郵箱

  # git config  user.name 你的目標(biāo)用戶名

  # git config  user.email 你的目標(biāo)郵箱名

  # 這種配置方式只有在當(dāng)前倉庫生效

  git config user.name shuaige

  git config user.email 669104343@qq.com

  # 可以使用--global參數(shù),配置全局的用戶名和郵箱,這樣別的git倉庫就不需要重新配置了。

  # 如果同時配置了局部的和全局的,那么局部的用戶名和郵箱將會生效。

  git config  --global user.name shuaige

  git config  --global user.email 669104343@qq.com

  # 查看配置信息

  git config --list


  2.5. git的工作原理

  微信截圖_20221123163718.png


  2.6. git命令詳解

  2.6.1. git add(重點(diǎn))

  作用:將文件由 工作區(qū) 添加到 暫存區(qū),暫存文件

  命令:

  git git add 文件名

  例如: git add index.html

  git add --all 或者 git add -A 或者git add .(簡寫) 添加所有文件

  git add a.txt b.txt 同時添加兩個文件

  git add *.js 添加當(dāng)前目錄下的所有js文件

  2.6.2. git checkout 文件名

  作用:暫存區(qū)的內(nèi)容恢復(fù)到工作區(qū)。

  git checkout 1.txt 將暫存區(qū)中1.txt文件恢復(fù)到工作區(qū)

  2.6.3. git commit(重點(diǎn))

  作用:將文件由 暫存區(qū) 添加到 倉庫區(qū)

  git commit -m "提交說明"

  2.6.4. git status

  作用:查看文件的狀態(tài)

  命令:git status

  命令:git stauts -s 簡化日志輸出格式

  2.6.5. git log

  作用:查看提交日志

  git log 只能查看當(dāng)前head以及以前的日志

  git log --oneline 簡潔的日志信息

  git reflog 查看所有的提交變更日志

  2.6.6. git reset

  作用:版本回退,將代碼恢復(fù)到已經(jīng)提交的某一個版本中。

  git reset --hard 版本號 將代碼回退到某個指定的版本(版本號只要有前幾位即可)

  git reset --hard head~1

  將版本回退到上一次提交

  ~1:上一次提交

  ~2:上上次提交

  ~0:當(dāng)前提交

  2.7. git忽視文件

  在倉庫中,有些文件是不想被git管理的,比如數(shù)據(jù)的配置密碼、寫代碼的一些思路等。git可以通過配置從而達(dá)到忽視掉一些文件,這樣這些文件就可以不用提交了。

  在倉庫的根目錄創(chuàng)建一個.gitignore的文件,文件名是固定的。

  將不需要被git管理的文件路徑添加到.gitignore中

  # 忽視idea.txt文件

  idea.txt

  # 忽視.gitignore文件

  .gitignore

  # 忽視css下的index.js文件

  css/index.js

  # 忽視css下的所有的js文件

  css/*.js

  # 忽視css下的所有文件

  css/*.*

  # 忽視css文件夾

  css

  三、 git分支操作

  分支就是科幻電影里面的平行宇宙,當(dāng)你正在電腦前努力學(xué)習(xí)Git的時候,另一個你正在另一個平行宇宙里努力學(xué)習(xí)SVN。

  如果兩個平行宇宙互不干擾,那對現(xiàn)在的你也沒啥影響。不過,在某個時間點(diǎn),兩個平行宇宙合并了,結(jié)果,你既學(xué)會了Git又學(xué)會了SVN!

 

  3.1. 為什么要有分支?

  如果你要開發(fā)一個新的功能,需要2周時間,第一周你只能寫50%代碼,如果此時立即提交,代碼沒寫完,不完整的代碼會影響到別人無法工作。如果等代碼寫完再提交,代碼很容易丟失,風(fēng)險很大。

  有了分支,你就可以創(chuàng)建一個屬于自己的分支,別人看不到,也不影響別人,你在自己的分支上工作,提交到自己的分支上,等到功能開發(fā)完畢,一次性的合并到原來的分支。這樣既安全,又不影響他人工作。

  在工作過程中,經(jīng)常會碰到多任務(wù)并行開發(fā) 的情況,使用分支就能很好的避免任務(wù)之間的影響。

  其他版本工具比如svn,cvs中也有分支這個概念,但是這些工具中的分支操作非常的慢,形同擺設(shè)。

  3.2. 分支操作的命令

  3.2.1. 創(chuàng)建分支

  git branch 分支名稱創(chuàng)建分支,分支中的代碼,在創(chuàng)建時與當(dāng)前分支的內(nèi)容完全相同。

  git在第一次提交時,就有了一個叫master的主分支。

  3.2.2. 查看分支

  git branch可以查看所有的分支,

  在當(dāng)前分支的前面會有一個*

  3.2.3. 切換分支

  git checkout 分支名稱切換分支

  在當(dāng)前分支的任何操作,都不會影響到其他的分支,除非進(jìn)行了分支合并。

  切換分支之前,必須保證代碼已經(jīng)提交了

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

  git checkout -b 分支名稱 創(chuàng)建并切換分支

  3.2.5. 刪除分支

  git branch -d 分支名稱 可以刪除分支

  注意:不能在當(dāng)前分支刪除當(dāng)前分支,需要切換到其他分支才能刪除。

  注意:master分支是可以刪除的,但是不推薦那么做。

  3.2.6. 合并分支

  git merge 分支名稱 將其他分支的內(nèi)容合并到當(dāng)前分支。

  在master分支中執(zhí)行g(shù)it merge dev 將dev分支中的代碼合并到master分支

  3.3. git分支的工作原理

  微信截圖_20221123164006.png

  3.4. git合并沖突

  對于同一個文件,如果有多個分支需要合并時,容易出現(xiàn)沖突。

  合并分支時,如果出現(xiàn)沖突,只能手動處理,再次提交,一般的作法,把自己的代碼放到?jīng)_突代碼的后面即可。

  四、遠(yuǎn)程倉庫

  所有的程序員都可以通過遠(yuǎn)程倉庫來進(jìn)行版本的共享,達(dá)到所有人的代碼一致的效果。

  4.1. 遠(yuǎn)程倉庫相關(guān)的命令

  4.1.1. git push

  作用:將本地代碼提交到遠(yuǎn)程倉庫

  git push 倉庫地址 master 在代碼提交到遠(yuǎn)程倉庫,注意master分支必須寫,不能省略

  例子:git push git@github.com:hucongcong/test.git master 如果第一次使用,需要填寫github的用戶名和密碼

  4.1.2. git pull

  作用:將遠(yuǎn)程的代碼下載到本地

  git pull 代碼地址 將遠(yuǎn)程的代碼中master分支下載到本地

  通常在push前,需要先pull一次。

  4.1.3. git clone

  作用:克隆遠(yuǎn)程倉庫的代碼到本地

  git clone 倉庫地址 自定義本地倉庫名 將整個倉庫克隆到本地

  4.1.4. git remote

  每次push和pull操作都需要帶上遠(yuǎn)程倉庫的地址,非常的麻煩,我們可以給倉庫地址設(shè)置一個別名

  git remote add 倉庫別名 倉庫地址

  使用倉庫別名替代倉庫地址。倉庫別名相當(dāng)于一個變量,倉庫地址就是對應(yīng)的值。

  git remote add hucc git@github.com:hucongcong/test.git 設(shè)置了一個hucc的倉庫別名,以后push和pull都可以不用倉庫地址,而用hucc

  git remote remove hucc 刪除hucc這個倉庫別名。

  git remote 查看所有的倉庫別名

  如果使用了git clone命令從遠(yuǎn)程倉庫獲取下來的,那么這個本地倉庫會自動添加一個 origin的遠(yuǎn)程地址,指向的就是克隆的遠(yuǎn)程地址。

  4.2. github

  git與github沒有直接的關(guān)系。

  git是一個版本控制工具。

  github是一個代碼托管平臺,是git的一個遠(yuǎn)程代碼倉庫。

  將來工作時,公司會有自己的代碼倉庫。

  github官網(wǎng)

  開源中國-git 碼云

  1. gitHub是一個面向開源及私有軟件項(xiàng)目的托管平臺,因?yàn)橹恢С謌it 作為唯一的版本庫格式進(jìn)行托管,故名gitHub。

  2. github免費(fèi),代碼所有人都能看到,但是只有你自己能修改。付費(fèi)的可以隱藏。

  在github上創(chuàng)建一個項(xiàng)目,獲取到倉庫的地址。然后就可以將本地的代碼推送到遠(yuǎn)程的服務(wù)器上。

  4.3. SSH免密碼登陸

 ?。▽ΨQ加密與非對稱加密)

  每次push代碼,都需要輸入用戶名跟密碼,非常的麻煩。因此我們可以配置一個SSH免密碼登陸。

  github為了賬戶的安全,需要對每一次push請求都要驗(yàn)證用戶的身份,只有合法的用戶才可以push

  使用ssh可以實(shí)現(xiàn)免密碼操作(不需要使用密碼)

  4.3.1. SSH免密碼登錄配置

  1 創(chuàng)建SSH Key:ssh-keygen -t rsa

  2 在文件路徑 C:\用戶\當(dāng)前用戶名\ 找到 .ssh 文件夾

  3 文件夾中有兩個文件:

  私鑰:id_rsa

  公鑰:id_rsa.pub

  4 在 github -> settings -> SSH and GPG keys頁面中,新創(chuàng)建SSH key

  5 粘貼 公鑰 id_rsa.pub 內(nèi)容到對應(yīng)文本框中

  5 在github中新建倉庫或者使用現(xiàn)在倉庫,拿到git@github.com:用戶名/倉庫名.git

  6 此后,再次SSH方式與github“通信”,不用輸入密碼確認(rèn)身份了

  五、idea集成git

  5.1.idea配置git

  首先,確保本地已經(jīng)安裝過git客戶端,idea會進(jìn)行自動檢測,如果沒有,或者想進(jìn)行手動調(diào)整,需要在這里重新配置。配置成功之后可以通過點(diǎn)擊Test按鈕測試是否OK!

  微信截圖_20221123164211.png

  5.2:idea上傳項(xiàng)目到本地倉庫

 微信截圖_20221123164241.png

微信截圖_20221123164255.png

  選中指定項(xiàng)目右鍵,選擇Git將項(xiàng)目添加到版本控制,然后使用Commit Directory提交項(xiàng)目到本地倉庫。

微信截圖_20221123164331.png

  微信截圖_20221123164653.png

  微信截圖_20221123164711.png

  5.3:將本地倉庫項(xiàng)目推送到遠(yuǎn)程倉庫

  微信截圖_20221123164754.png

微信截圖_20221123164813.png

微信截圖_20221123164845.png

微信截圖_20221123164902.png

  注意:如果沒有配置ssh公鑰,第一次本地推送,需要輸入GitHub或gitee遠(yuǎn)程倉庫用戶名密碼。

  5.4:idea設(shè)置git忽略部分文件

  0、安裝.ignore插件

  點(diǎn)擊File->Settings ,找到Plugins搜索ignore,然后install,OK重啟idea

  微信截圖_20221123164926.png

  1、創(chuàng)建項(xiàng)目,在項(xiàng)目中添加.gitignore文件

  微信截圖_20221123164949.png

  微信截圖_20221123165004.png

  微信截圖_20221123165021.png

  建議.gitignore文件內(nèi)容

  ######################################################################

  # Build Tools

  .gradle

  /build/

  !gradle/wrapper/gradle-wrapper.jar

  target/

  !.mvn/wrapper/maven-wrapper.jar

  ######################################################################

  # IDE

  ### STS ###

  .apt_generated

  .classpath

  .factorypath

  .project

  .settings

  .springBeans

  ### IntelliJ IDEA ###

  .idea

  *.iws

  *.iml

  *.ipr

  out

  gen

  ### NetBeans ###

  nbproject/private/

  build/*

  nbbuild/

  dist/

  nbdist/

  .nb-gradle/

  ######################################################################

  # Others

  *.log

  *.xml.versionsBackup

  !*/build/*.java

  !*/build/*.html

  !*/build/*.xml

  # .gitignore文件內(nèi)容編寫規(guī)則

  *.a       # 忽略所有 .a 結(jié)尾的文件

  !lib.a    # 但 lib.a 除外

  /TODO     # 僅僅忽略項(xiàng)目根目錄下的 TODO 文件,不包括 subdir/TODO

  build/    # 忽略 build/ 目錄下的所有文件

  doc/*.txt # 會忽略 doc/notes.txt 但不包括 doc/server/arch.txt

  2、創(chuàng)建本地倉庫

  $ git init

  3、創(chuàng)建個人分支

  $ git checkout -b dev

  4、添加文件到版本控制,提交到本地倉庫

  $ git add .

  $ git commit -m "first commit"

  5、推送到遠(yuǎn)程倉庫

  $ git push  https://gitee.com/liyunyi/ssm.git dev

  6、合并分支推送到主分支

  $ git checkout master

  $ git merge dev

  $ git push https://gitee.com/liyunyi/ssm.git master

  5.5:克隆遠(yuǎn)程倉庫項(xiàng)目到本地

微信截圖_20221123165059.png

  附件:命令大全

微信截圖_20221123165115.png

  Workspace:工作區(qū)

  Index / Stage:暫存區(qū)

  Repository:倉庫區(qū)(或本地倉庫)

  Remote:遠(yuǎn)程倉庫

  1、倉庫

  # 在當(dāng)前目錄新建一個Git代碼庫

  $ git init

  # 新建一個目錄,將其初始化為Git代碼庫

  $ git init [project-name]

  # 下載一個項(xiàng)目和它的整個代碼歷史

  $ git clone [url]

  2、配置

  # 顯示當(dāng)前的Git配置

  $ git config --list

  # 編輯Git配置文件

  $ git config -e [--global]

  # 設(shè)置提交代碼時的用戶信息

  $ git config [--global] user.name "[name]"

  $ git config [--global] user.email "[email address]"

  3、增加/刪除文件

  # 添加指定文件到暫存區(qū)

  $ git add [file1] [file2] ...

  # 添加指定目錄到暫存區(qū),包括子目錄

  $ git add [dir]

  # 添加當(dāng)前目錄的所有文件到暫存區(qū)

  $ git add .

  # 添加每個變化前,都會要求確認(rèn)

  # 對于同一個文件的多處變化,可以實(shí)現(xiàn)分次提交

  $ git add -p

  # 刪除工作區(qū)文件,并且將這次刪除放入暫存區(qū)

  $ git rm [file1] [file2] ...

  # 停止追蹤指定文件,但該文件會保留在工作區(qū)

  $ git rm --cached [file]

  # 改名文件,并且將這個改名放入暫存區(qū)

  $ git mv [file-original] [file-renamed]

  4、代碼提交

  # 提交暫存區(qū)到倉庫區(qū)

  $ git commit -m [message]

  # 提交暫存區(qū)的指定文件到倉庫區(qū)

  $ git commit [file1] [file2] ... -m [message]

  # 提交工作區(qū)自上次commit之后的變化,直接到倉庫區(qū)

  $ git commit -a

  # 提交時顯示所有diff信息

  $ git commit -v

  # 使用一次新的commit,替代上一次提交

  # 如果代碼沒有任何新變化,則用來改寫上一次commit的提交信息

  $ git commit --amend -m [message]

  # 重做上一次commit,并包括指定文件的新變化

  $ git commit --amend [file1] [file2] ...

  5、分支

  # 列出所有本地分支

  $ git branch

  # 列出所有遠(yuǎn)程分支

  $ git branch -r

  # 列出所有本地分支和遠(yuǎn)程分支

  $ git branch -a

  # 新建一個分支,但依然停留在當(dāng)前分支

  $ git branch [branch-name]

  # 新建一個分支,并切換到該分支

  $ git checkout -b [branch]

  # 新建一個分支,指向指定commit

  $ git branch [branch] [commit]

  # 新建一個分支,與指定的遠(yuǎn)程分支建立追蹤關(guān)系

  $ git branch --track [branch] [remote-branch]

  # 切換到指定分支,并更新工作區(qū)

  $ git checkout [branch-name]

  # 切換到上一個分支

  $ git checkout -

  # 建立追蹤關(guān)系,在現(xiàn)有分支與指定的遠(yuǎn)程分支之間

  $ git branch --set-upstream [branch] [remote-branch]

  # 合并指定分支到當(dāng)前分支

  $ git merge [branch]

  # 選擇一個commit,合并進(jìn)當(dāng)前分支

  $ git cherry-pick [commit]

  # 刪除分支

  $ git branch -d [branch-name]

  # 刪除遠(yuǎn)程分支

  $ git push origin --delete [branch-name]

  $ git branch -dr [remote/branch]

  6、標(biāo)簽

  # 列出所有tag

  $ git tag

  # 新建一個tag在當(dāng)前commit

  $ git tag [tag]

  # 新建一個tag在指定commit

  $ git tag [tag] [commit]

  # 刪除本地tag

  $ git tag -d [tag]

  # 刪除遠(yuǎn)程tag

  $ git push origin :refs/tags/[tagName]

  # 查看tag信息

  $ git show [tag]

  # 提交指定tag

  $ git push [remote] [tag]

  # 提交所有tag

  $ git push [remote] --tags

  # 新建一個分支,指向某個tag

  $ git checkout -b [branch] [tag]

  7、查看信息

  # 顯示有變更的文件

  $ git status

  # 顯示當(dāng)前分支的版本歷史

  $ git log

  # 顯示commit歷史,以及每次commit發(fā)生變更的文件

  $ git log --stat

  # 搜索提交歷史,根據(jù)關(guān)鍵詞

  $ git log -S [keyword]

  # 顯示某個commit之后的所有變動,每個commit占據(jù)一行

  $ git log [tag] HEAD --pretty=format:%s

  # 顯示某個commit之后的所有變動,其"提交說明"必須符合搜索條件

  $ git log [tag] HEAD --grep feature

  # 顯示某個文件的版本歷史,包括文件改名

  $ git log --follow [file]

  $ git whatchanged [file]

  # 顯示指定文件相關(guān)的每一次diff

  $ git log -p [file]

  # 顯示過去5次提交

  $ git log -5 --pretty --oneline

  # 顯示所有提交過的用戶,按提交次數(shù)排序

  $ git shortlog -sn

  # 顯示指定文件是什么人在什么時間修改過

  $ git blame [file]

  # 顯示暫存區(qū)和工作區(qū)的差異

  $ git diff

  # 顯示暫存區(qū)和上一個commit的差異

  $ git diff --cached [file]

  # 顯示工作區(qū)與當(dāng)前分支最新commit之間的差異

  $ git diff HEAD

  # 顯示兩次提交之間的差異

  $ git diff [first-branch]...[second-branch]

  # 顯示今天你寫了多少行代碼

  $ git diff --shortstat "@{0 day ago}"

  # 顯示某次提交的元數(shù)據(jù)和內(nèi)容變化

  $ git show [commit]

  # 顯示某次提交發(fā)生變化的文件

  $ git show --name-only [commit]

  # 顯示某次提交時,某個文件的內(nèi)容

  $ git show [commit]:[filename]

  # 顯示當(dāng)前分支的最近幾次提交

  $ git reflog

  8、遠(yuǎn)程同步

  # 下載遠(yuǎn)程倉庫的所有變動

  $ git fetch [remote]

  # 顯示所有遠(yuǎn)程倉庫

  $ git remote -v

  # 顯示某個遠(yuǎn)程倉庫的信息

  $ git remote show [remote]

  # 增加一個新的遠(yuǎn)程倉庫,并命名

  $ git remote add [shortname] [url]

  # 取回遠(yuǎn)程倉庫的變化,并與本地分支合并

  $ git pull [remote] [branch]

  # 上傳本地指定分支到遠(yuǎn)程倉庫

  $ git push [remote] [branch]

  # 強(qiáng)行推送當(dāng)前分支到遠(yuǎn)程倉庫,即使有沖突

  $ git push [remote] --force

  # 推送所有分支到遠(yuǎn)程倉庫

  $ git push [remote] --all

  9、撤銷

  # 恢復(fù)暫存區(qū)的指定文件到工作區(qū)

  $ git checkout [file]

  # 恢復(fù)某個commit的指定文件到暫存區(qū)和工作區(qū)

  $ git checkout [commit] [file]

  # 恢復(fù)暫存區(qū)的所有文件到工作區(qū)

  $ git checkout .

  # 重置暫存區(qū)的指定文件,與上一次commit保持一致,但工作區(qū)不變

  $ git reset [file]

  # 重置暫存區(qū)與工作區(qū),與上一次commit保持一致

  $ git reset --hard

  # 重置當(dāng)前分支的指針為指定commit,同時重置暫存區(qū),但工作區(qū)不變

  $ git reset [commit]

  # 重置當(dāng)前分支的HEAD為指定commit,同時重置暫存區(qū)和工作區(qū),與指定commit一致

  $ git reset --hard [commit]

  # 重置當(dāng)前HEAD為指定commit,但保持暫存區(qū)和工作區(qū)不變

  $ git reset --keep [commit]

  # 新建一個commit,用來撤銷指定commit

  # 后者的所有變化都將被前者抵消,并且應(yīng)用到當(dāng)前分支

  $ git revert [commit]

  # 暫時將未提交的變化移除,稍后再移入

  $ git stash

  $ git stash pop

  10、其他

  # 生成一個可供發(fā)布的壓縮包

  $ git archive

 更多信息可以來這里獲取==>>電子技術(shù)應(yīng)用-AET<<

 微信圖片_20210517164139.jpg

微信圖片_20220701092006.jpg

電子技術(shù)應(yīng)用專欄作家 一口Linux

原文鏈接:https://mp.weixin.qq.com/s/AmfOaTwtsBHWM6WZH3ETdg

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。