日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > linux >内容正文

linux

手把手教你入门Git --- Git使用指南(Linux)

發(fā)布時(shí)間:2025/3/8 linux 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 手把手教你入门Git --- Git使用指南(Linux) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

手把手教你入門(mén)Git — Git使用指南(Linux)

系統(tǒng):ubuntu 18.04 LTS

本文所有g(shù)it命令操作實(shí)驗(yàn)具有連續(xù)性,git小白完全可以從頭到尾跟著本文所有給出的命令走一遍,就會(huì)對(duì)git有一個(gè)初步的了解,應(yīng)當(dāng)能做到會(huì)用并且大致了解git的版本控制機(jī)制,遇到問(wèn)題的話歡迎留言或私信博主。

git安裝及配置

1 git安裝

sudo apt-get install git

可通過(guò)git --version 命令查看,正常輸出git版本號(hào)即安裝成功。

2 配置用戶名和郵箱名

git config --global user.name "Your Name" git config --global user.email "email@example.com"

配置完后可以通過(guò)以下命令查看

git config user.name git config user.email

3 配置SSH公鑰

創(chuàng)建公鑰文件,生成的公鑰文件會(huì)保存在本機(jī)的~/.ssh目錄下。

ssh-keygen -C 'example@example.com' -t rsa

然后三步詢問(wèn)直接回車(chē)即可(連按三次回車(chē))。

創(chuàng)建完成后進(jìn)~/.ssh目錄,將公鑰(即id_rsa.pub的內(nèi)容)復(fù)制出來(lái)。

cd ~/.ssh cat id_rsa.pub

如果進(jìn)入該目錄時(shí)提示No such file or directory,自己手動(dòng)創(chuàng)建一個(gè)即可:mkdir ~/.ssh。

然后來(lái)到瀏覽器端進(jìn)行操作,首先登錄自己的github賬號(hào)(沒(méi)有的話自行注冊(cè)一個(gè)即可),進(jìn)入到自己的主頁(yè),依次點(diǎn)擊settings->SSH and GPG keys->New SSH Key,進(jìn)入到如下頁(yè)面:

將剛才保存的id_rsa.pub文件內(nèi)容復(fù)制到Key字段,Title自己起個(gè)名字,最好是能代表當(dāng)前所配置的機(jī)器的名字。然后點(diǎn)Add SSH key,會(huì)要求輸入當(dāng)前github賬號(hào)的密碼,按要求輸入就行了。

git本地操作

1 創(chuàng)建倉(cāng)庫(kù)并初始化

倉(cāng)庫(kù)(repository)也叫版本庫(kù),可以看做一個(gè)目錄,這個(gè)目錄里的所以文件都由Git進(jìn)行管理,每個(gè)文件的修改、刪除,Git都能跟蹤。

  • 創(chuàng)建一個(gè)目錄mkdir learnGit

  • 將我們新創(chuàng)建的目錄初始化為git可以管理的倉(cāng)庫(kù):

    cd learnGit git init

    會(huì)輸出Initialized empty Git repository in /home/ps/JJ_Projects/learnGit/.git/,表示成功初始化git倉(cāng)庫(kù)。

    這時(shí)會(huì)發(fā)現(xiàn)該目錄中多出了一個(gè).git目錄,這就是git來(lái)跟蹤管理版本庫(kù)的。

  • 2 添加文件

  • 我們首先創(chuàng)建一個(gè)README文件,并寫(xiě)入一些內(nèi)容:

    touch README.txt vim README.txt # 寫(xiě)入 Learning Git: New File. cat README.txt # 查看文件內(nèi)容 # 輸出 Learning Git: New File.
  • 執(zhí)行g(shù)it add命令,將文件添加的倉(cāng)庫(kù)。

    git add README.txt

    這條命令不會(huì)有輸出,具體作用后文會(huì)分析,這里我們先走一遍新建文件的步驟。

  • 執(zhí)行g(shù)it commit命令,將文件提交的倉(cāng)庫(kù)。

    git commit -m "Submit a new file." # 雙引號(hào)內(nèi)是本次提交的注釋,原則上可以隨便寫(xiě),但是盡量能表達(dá)出本次提交的改動(dòng)。

    會(huì)輸出:

    [master (root-commit) 7e21c1f] Submit a new file.1 file changed, 1 insertion(+)create mode 100644 README.txt

    表示我們已經(jīng)成功提交一個(gè)新文件。

  • 3 修改文件

    我們剛剛已經(jīng)成功提交了一個(gè)新文件到我們的git倉(cāng)庫(kù),接下來(lái),我們來(lái)看一下怎樣修改文件的內(nèi)容。

  • 修改文件內(nèi)容

    vim README.txt # 將其中內(nèi)容替換為:Learning Git: Modify.
  • 查看倉(cāng)庫(kù)狀態(tài)

    此時(shí),我們可以用git status命令來(lái)查看一下倉(cāng)庫(kù)當(dāng)前的狀態(tài):

    git status # 輸出: On branch master Changes not staged for commit:(use "git add <file>..." to update what will be committed)(use "git checkout -- <file>..." to discard changes in working directory)modified: README.txtno changes added to commit (use "git add" and/or "git commit -a")

    意思很明顯:README.txt文件提勁被修改過(guò)了,但是現(xiàn)在還沒(méi)有改動(dòng)需要git submit,因?yàn)橐萭it add。

  • 查看文件改動(dòng)

    用git diff查看文件有哪些改動(dòng):

    git diff # 輸出: diff --git a/README.txt b/README.txt index 5107c06..e22e629 100644 --- a/README.txt +++ b/README.txt @@ -1 +1 @@ -Learning Git: New File. +Learning Git: Modify.

    即我們剛才進(jìn)行的修改。

  • 向上面一樣,將修改添加到倉(cāng)庫(kù):

    git add README.txt

    同樣沒(méi)有任何輸出,但是這次我們可以用git status來(lái)查看一下倉(cāng)庫(kù)當(dāng)前的狀態(tài):

    git status # 輸出: On branch master Changes to be committed:(use "git reset HEAD <file>..." to unstage)modified: README.txt

    可以看到,已經(jīng)有一個(gè)改動(dòng)需要被commit了,可以推測(cè)add命令應(yīng)該是將文件的改動(dòng)放到了某個(gè)待提交的臨時(shí)位置,后面會(huì)具體分析。

  • 那下一步就是提交咯:

    git commit -m "Modify a file." # 輸出: [master a493237] Modify a file.1 file changed, 1 insertion(+), 1 deletion(-)

    文件修改提交成功,我們?cè)俨榭匆幌聜}(cāng)庫(kù)當(dāng)前狀態(tài):

    git status # 輸出: On branch master nothing to commit, working tree clean

    我們剛剛把修改都提交了,所以現(xiàn)在沒(méi)有東西要提交。

  • 4 版本回退

    使用git進(jìn)行版本控制,重要的用途之一就是進(jìn)行版本回退了,我們來(lái)看一下怎樣操作。

  • 我們先使用git log命令來(lái)查看一下倉(cāng)庫(kù)的修改日志:

    git log # 輸出: commit a493237884485d9b0d6c88d64d967293ef5a80b8 (HEAD -> master) Author: user <example@example.com> Date: Wed Aug 18 20:09:27 2021 +0800Modify a file.commit 7e21c1fa1ada0c6b6dce6bef93f0c8e325d716a2 Author: user <example@example.com> Date: Wed Aug 18 19:56:17 2021 +0800Submit a new file.

    顯示出我們之前的兩次修改操作。

    我們還可以加上--pretty=online參數(shù):

    git log --pretty=oneline # 輸出: a493237884485d9b0d6c88d64d967293ef5a80b8 (HEAD -> master) Modify a file. 7e21c1fa1ada0c6b6dce6bef93f0c8e325d716a2 Submit a new file.
  • 我們先查看一下當(dāng)前README.txt文件中的內(nèi)容:

    cat README.txt # 輸出: Learning Git: Modify. # 是我們上次修改文件后的內(nèi)容。

    使用git reset命令,將版本回退:

    git reset --hard HEAD^ # HEAD表示當(dāng)前版本,HEAD^表示上一個(gè)版本,HEAD^^表示上上版本 輸出: HEAD is now at 7e21c1f Submit a new file.

    在查看一下版本回退之后README.txt中的內(nèi)容:

    cat README.txt # 輸出: Learning Git: New File.

    可以看到,回退到了我們修改文件之前的內(nèi)容。

  • 5 git的工作區(qū)和暫存區(qū)

    在繼續(xù)介紹git的本地操作之前,我們先來(lái)看一下git的版本管理究竟是怎樣進(jìn)行的。

    概念

  • 工作區(qū)(Working Directory),我們創(chuàng)建的learnGit 目錄就是一個(gè)工作區(qū)。

  • 版本庫(kù),倉(cāng)庫(kù)(Repository),工作區(qū)有個(gè)隱藏目錄 .git ,這個(gè)不算工作區(qū),而是 Git 的版本庫(kù)。

  • 版本庫(kù)里面的 index(stage) 文件叫暫存區(qū),還有Git為我們自動(dòng)創(chuàng)建的第一個(gè)分支 master ,以及指向 master 的一個(gè)指針叫做 HEAD。

  • 關(guān)系

    前面我們提到過(guò),如果我們想把文件添加到Git里面時(shí),需要分兩步:

    第一步是用 git add 把文件添加進(jìn)去,實(shí)際上就是把文件修改添加到暫存區(qū)。

    第二步是用 git commit 提交更改,實(shí)際上就是把暫存區(qū)的所有內(nèi)容提交到當(dāng)前分支。(我們現(xiàn)在只有唯一一個(gè)分支 master,所以現(xiàn)在就是往 master 分支上提交更改)

    6 管理修改

    git做版本控制的關(guān)鍵優(yōu)勢(shì)在于:git跟蹤管理的不是文件,而是修改。

    我們做這樣一個(gè)實(shí)驗(yàn):

  • 首先,在README.txt中添加一行

    vim README.txt # 添加一行 cat README.txt # 輸出: Learning Git: New File. test line 1.
  • 將此次修改add并查看狀態(tài)status:

    git add README.txt git status # 輸出: On branch master Changes to be committed:(use "git reset HEAD <file>..." to unstage)modified: README.txtps@rong:~/JJ_Projects/learnGit$

    這時(shí)我們先不提交,而是再對(duì)README.txt進(jìn)行一次修改,按照我們之前的分析,現(xiàn)在我們的第一次修改應(yīng)該是保存在暫存區(qū)。

  • 再次修改文件

    vim README.txt # 再添加一行 cat README.txt # 輸出: Learning Git: New File. test line 1. test line 2.
  • 不對(duì)第二次修改進(jìn)行add,直接commit。現(xiàn)在的應(yīng)該是第一次修改在暫存區(qū),第二次修改在工作區(qū)沒(méi)動(dòng)。

    git commit -m "test" # 輸出: [master 611366c] test1 file changed, 1 insertion(+)

    然后我們查看一下?tīng)顟B(tài):

    git status # 輸出: On branch master Changes not staged for commit:(use "git add <file>..." to update what will be committed)(use "git checkout -- <file>..." to discard changes in working directory)modified: README.txtno changes added to commit (use "git add" and/or "git commit -a")

    我們可以發(fā)現(xiàn),第二次修改并沒(méi)有被提交。

    因?yàn)樵诠ぷ鲄^(qū)的第一次修改被放入暫存區(qū),準(zhǔn)備提交;而在工作區(qū)的第二次修改并沒(méi)有被放入暫存區(qū),所以, git commit命令只負(fù)責(zé)把暫存區(qū)的修改提交了。

  • 提交后,我們可以用 git diff HEAD -- readme.txt命令去查看工作區(qū)和版本庫(kù)里面最新版本的區(qū)別:

    git diff HEAD -- README.txt # 輸出: diff --git a/README.txt b/README.txt index be48ea2..0afce83 100644 --- a/README.txt +++ b/README.txt @@ -1,2 +1,3 @@Learning Git: New File.test line 1. +test line 2.
  • 7 撤銷(xiāo)修改

    本地git的撤銷(xiāo)修改操作有三種具體情況,分別是:

    (1) 僅修改文件,沒(méi)有add,此時(shí)修改僅在工作區(qū)。

    (2) 修改文件后add過(guò),但是沒(méi)有commit ,此時(shí)修改保存在暫存區(qū)。

    (3) 修改文件后,add并commit,此時(shí)修改已經(jīng)提交到倉(cāng)庫(kù)。

    接下來(lái)我們一個(gè)一個(gè)看。

  • 僅修改文件,沒(méi)有add,此時(shí)修改僅在工作區(qū)

    我們上一個(gè)實(shí)驗(yàn)的第二次修改只存在工作區(qū),并未add,剛好符合第一種情況,這時(shí)的狀態(tài)應(yīng)該是這樣的:

    git status # 輸出: On branch master Changes not staged for commit:(use "git add <file>..." to update what will be committed)(use "git checkout -- <file>..." to discard changes in working directory)modified: README.txtno changes added to commit (use "git add" and/or "git commit -a")

    其實(shí)status的輸出信息已經(jīng)提示到我們了,此時(shí)使用checkout 命令即可:

    git checkout -- README.txt

    然后我們查看一下文件內(nèi)容和狀態(tài)信息:

    cat README.txt # 輸出: Learning Git: New File. test line 1. git status On branch master nothing to commit, working tree clean

    完美撤銷(xiāo)。

  • 修改文件后add過(guò),但是沒(méi)有commit ,此時(shí)修改保存在暫存區(qū)

    我們?cè)偬砑右恍袦y(cè)試、add,并查看此時(shí)狀態(tài):

    vim README.txt # 添加一行 git add README.txt git status # 輸出: On branch master Changes to be committed:(use "git reset HEAD <file>..." to unstage)modified: README.txt

    還是可以從輸出信息看到,可以使用reset命令將放到暫存區(qū)的修改退回到工作區(qū)。

    git reset HEAD README.txt # 輸出: Unstaged changes after reset: M README.txt git status # 輸出: On branch master Changes not staged for commit:(use "git add <file>..." to update what will be committed)(use "git checkout -- <file>..." to discard changes in working directory)modified: README.txtno changes added to commit (use "git add" and/or "git commit -a")

    從上面的狀態(tài)輸出可以看到,修改已經(jīng)成功地退回到工作區(qū)了。

    現(xiàn)在就轉(zhuǎn)到了情況1,再用checkout命令撤銷(xiāo)就可以了。

    git checkout -- README.txt git status # 輸出: On branch master nothing to commit, working tree clean
  • 改文件后,add并commit,此時(shí)修改已經(jīng)提交到倉(cāng)庫(kù)

    這時(shí)已經(jīng)完車(chē)了修改的提交,只能進(jìn)行版本回退了,上面4已經(jīng)介紹,這里不再贅述。

  • 8 刪除文件與恢復(fù)

  • 我們先準(zhǔn)備一個(gè)待刪除的文件test.txt,并add、commit到倉(cāng)庫(kù),這一套大家想必已經(jīng)熟的不能再熟了,我們直接走一遍。

    touch test.txt vim test.txt # 添加內(nèi)容 delete test git add test.txt git commit -m "delete test" # 輸出: [master 08ffedc] delete test1 file changed, 1 insertion(+)create mode 100644 test.txt
  • 在工作區(qū)中直接刪除test.py:

    rm test.py

    這時(shí)有兩種情況:

    (1) 工作區(qū)中誤刪文件,需要恢復(fù)

    (2) 確實(shí)要?jiǎng)h除文件,應(yīng)該把刪除操作提交到倉(cāng)庫(kù)

  • 工作區(qū)中誤刪文件,需要恢復(fù)

    這種情況其實(shí)與上面的撤銷(xiāo)修改情況1是一樣的,要將工作區(qū)的動(dòng)作撤銷(xiāo)掉,而這在我們的倉(cāng)庫(kù)中還是存在的,所以還是要請(qǐng)出我們的checkout命令就好了。

    git checkout -- test.txt ls # 輸出: README.txt test.txt

    可以看到,我們剛剛在工作區(qū)rm掉的test.txt文件已經(jīng)回來(lái)了

  • 確實(shí)要?jiǎng)h除文件,應(yīng)該把刪除操作提交到倉(cāng)庫(kù)

    我們先把剛剛恢復(fù)的test.txt再?gòu)墓ぷ鲄^(qū)刪掉。

    rm test.txt

    既然我們確實(shí)要?jiǎng)h掉該文件,就直接再用git rm刪除:

    git rm test.py # 輸出: rm 'test.txt'

    再將刪除操作提交到倉(cāng)庫(kù):

    git commit -m "delete test" # 輸出: [master 9182ef7] delete test1 file changed, 1 deletion(-)delete mode 100644 test.txt

    就大功告成啦。

  • git遠(yuǎn)程操作

    注意:遠(yuǎn)程倉(cāng)庫(kù)操作需要已經(jīng)完成SSH公鑰的配置。

    新建遠(yuǎn)程倉(cāng)庫(kù)并關(guān)聯(lián)本地倉(cāng)庫(kù)

  • 我們先來(lái)到網(wǎng)頁(yè)端進(jìn)行操作,登錄github之后,直接點(diǎn)綠色的小new,新建倉(cāng)庫(kù)。
  • 網(wǎng)頁(yè)端創(chuàng)建完倉(cāng)庫(kù)后回到本地命令行運(yùn)行如下命令,添加遠(yuǎn)程倉(cāng)庫(kù):

    git remote add origin git@github.com:adenialzz/learngit.git

    注意改成自己的用戶名,這條命令不會(huì)有輸出。添加后,遠(yuǎn)程庫(kù)的名字就是 origin ,這是Git默認(rèn)的叫法。

  • 然后,我們就可以使用git push命令將本地倉(cāng)庫(kù)推到遠(yuǎn)程倉(cāng)庫(kù)。

    git push -u origin master # 輸出: Counting objects: 10, done. Delta compression using up to 20 threads. Compressing objects: 100% (5/5), done. Writing objects: 100% (10/10), 816 bytes | 816.00 KiB/s, done. Total 10 (delta 1), reused 0 (delta 0) remote: Resolving deltas: 100% (1/1), done. remote: This repository moved. Please use the new location: remote: git@github.com:Adenialzz/learnGit.git To github.com:adenialzz/learngit.git* [new branch] master -> master Branch 'master' set up to track remote branch 'master' from 'origin'.

    因?yàn)檫h(yuǎn)程庫(kù)是空的,所以我們?cè)诘谝淮瓮扑?master 分支時(shí),要加上 -u 參數(shù),Git不但會(huì)把本地的master 分支內(nèi)容推送的遠(yuǎn)程新的 master 分支,還會(huì)把本地的 master 分支和遠(yuǎn)程的 master 分支關(guān)聯(lián)起來(lái),在以后的推送或者拉取時(shí)就可以簡(jiǎn)化命令。

    這時(shí),我們?cè)俚骄W(wǎng)頁(yè)端查看,就可以看到我們的本地倉(cāng)庫(kù)的全部?jī)?nèi)容已經(jīng)推倒遠(yuǎn)程倉(cāng)庫(kù)(當(dāng)然,這里只有一個(gè)文件,因?yàn)槲覀兊膖est.txt已經(jīng)被刪除掉了)。

  • 將本地倉(cāng)庫(kù)推到遠(yuǎn)程

    我們新建一個(gè)LICENSE.txt文件,提交到本地倉(cāng)庫(kù),并推到遠(yuǎn)程,這些操作上面到介紹過(guò)了,這里簡(jiǎn)單過(guò)一遍,

    touch LICENSE.txt vim LICENSE.txt # 添加內(nèi)容 git add LICENSE.txt git commit -m "add LICENSE" git push origin master

    需要注意的是在第一次關(guān)聯(lián)過(guò)倉(cāng)庫(kù)之后,再推到遠(yuǎn)程時(shí),只需git push origin master,即可把本地 master 分支的最新修改推送至GitHub。現(xiàn)在,我們擁有了真正的分布式版本庫(kù)。

    將遠(yuǎn)程倉(cāng)庫(kù)拉到本地

    這個(gè)應(yīng)該是平時(shí)沒(méi)有深入了解git之前最常用的命令了(^^),將別人的代碼拉到本地。

  • 點(diǎn)擊上圖的綠色的Code,將其中內(nèi)容復(fù)制下來(lái)

  • 在本地使用clone命令進(jìn)行拉取:

    git clone https://github.com/Adenialzz/learnGit.git
  • git卸載

    先找到git的目錄:通過(guò)which git命令,得到/usr/bin/git。

    然后完全刪除該目錄,并卸載git:

    sudo rm -r /usr/bin/git sudo apt-get remove git

    注意要完全卸載git,以上兩步缺一不可。

    總結(jié)

    以上是生活随笔為你收集整理的手把手教你入门Git --- Git使用指南(Linux)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。