一. GIT安裝和配置
1. 本體和插件下載
官網(wǎng): GIT Download下載 安裝過程中一路默認(rèn)即可。
終端輸入
git -v
查看git安裝是否成功。
(可選)然后下載一個Git
狀態(tài)顯示到powershell
中的非常好用插件,posh-Git(windows):
用管理員身份打開powershell
,之后輸入
Set-ExecutionPolicy RemoteSigned #一路 Yes
Install-Module -Name posh-git -Scope CurrentUser
重啟powershell
Import-Module posh-git
初始化倉庫的文件位置會加一個GIT位置就對了。
注意要初始化倉庫之后才有這個main
標(biāo)志。
想要每次重啟都不用再輸入
Import-Module posh-git
就如下添加一個powershell
配置文件,我們一般開shell
輸入的都是臨時變量,不會保存,這個文件的作用是每次打開shell
都會執(zhí)行一遍其中代碼。
$profile # 顯示 Windows PowerShell 配置文件的路徑
test-path $profile # 確定是否已經(jīng)在系統(tǒng)上創(chuàng)建了 Windows PowerShell 配置文件,如果存在配置文件,則響應(yīng)為 True:否則響應(yīng)為 False。
new-item -path $profile -itemtype file -force # 創(chuàng)建 Windows PowerShell 配置文件
之后按照路徑打開該文件,把代碼添加進(jìn)去。
Import-Module posh-git
其中:
[master +1 ~0 -0 !]
這是Git的分支狀態(tài)指示符,提供了關(guān)于當(dāng)前Git倉庫狀態(tài)的一些信息:
master:這是當(dāng)前所在的分支。
+1:表示有一個文件被添加到了暫存區(qū)。
~0:表示沒有文件被修改但未暫存。
-0:表示沒有文件被刪除但未暫存。
!:表示有文件被修改但未追蹤。
2. 配置
# 配置用戶名和郵箱
git config --global user.name "Winston"
git config --global user.email "你的郵箱"
二. 新建倉庫
1. 本地新建倉庫
# cd到需要創(chuàng)建倉庫的位置
git init
ls -h # 應(yīng)該有一個隱藏的.git文件夾
mac命令,windows手動刪吧:\rm -rf .git # 刪除倉庫 注意.git就是倉庫的主要文件,刪除就相當(dāng)于刪除倉庫配置
git init my_repo # 在該文件夾下創(chuàng)建一個新文件夾,并初始化它成為倉庫
2. Clone遠(yuǎn)端倉庫
# cd到需要創(chuàng)建倉庫的位置
git clone 倉庫網(wǎng)址
ls -h # 應(yīng)該有一個隱藏的.git文件夾
三. 工作區(qū)域和文件狀態(tài)
1. 工作區(qū)域介紹
工作區(qū) 暫存區(qū) 本地倉庫 遠(yuǎn)端倉庫
- 工作區(qū)->暫存區(qū)
git add
- 暫存區(qū)->本地倉庫
git commit
- 本地倉庫->遠(yuǎn)端倉庫
git push
2. 文件狀態(tài)介紹
3. Clone遠(yuǎn)端倉庫
# cd到需要創(chuàng)建倉庫的位置
git clone 倉庫網(wǎng)址
四. 添加和提交文件
# 查看倉庫處在哪個分支,倉庫下有那些文件,和文件的狀態(tài)
git status # 其中 UIntracked file就是未被跟蹤的文件,顯示為紅色
git add . # 把當(dāng)前文件夾下的所有文件都加入到暫存區(qū),等待后續(xù)操作。這里的.表示當(dāng)前目錄。
git add *.txt # 把所有txt文件都加入到暫存區(qū)
git add file.txt # 加入之后會有提示說Changes to be committed指的是有暫存區(qū)的文件沒有提交到本地倉庫,處于已修改狀態(tài)。
git rm --cached file.txt # 把文件從暫存區(qū)中移除
git commit -m '提交信息' # 把暫存區(qū)的文件提交到本地倉庫
git commit -a -m "提交信息" # 一行命令執(zhí)行添加暫存和提交, 只對已經(jīng)添加過的文件生效,新文件不能用這個命令
git log # 查看提交記錄和提交信息
git log --oneline # 查看簡潔提交記錄
五. 回退版本
git reset --soft 版本號 # 回退到某一個版本,并且保留工作區(qū)和暫存區(qū)的所有修改內(nèi)容
git reset --hard 版本號 # 回退到某一個版本,并且丟棄工作區(qū)和暫存區(qū)的所有修改內(nèi)容
git reset --mixed 版本號 # 回退到某一個版本,只保留工作區(qū)修改內(nèi)容,丟棄暫存區(qū)的修改內(nèi)容 default 參數(shù)
# 回退實例
git reset --soft 5af90b8 # 軟回退到5af90b8版本
git reset --hard HEAD^ # 硬回退到上一版本
-
soft
參數(shù)回退之后,HEAD
指針指向回退的版本,提交歷史變少,工作區(qū)和暫存區(qū)內(nèi)容都多于本地倉庫,相當(dāng)于只是把commit
操作撤回了。并且
git reset --soft HEAD^
git status # 提示有需要提交的文件
ls # 文件與回退之前一致
git ls-files # 查看暫存區(qū)文件,與回退之前一致
-
hard
參數(shù)回退之后,HEAD
指針指向回退的版本,提交歷史變少,工作區(qū)和暫存區(qū)內(nèi)容都等于本地倉庫,相當(dāng)于立刻回到之前的狀態(tài),完全扔掉兩次提交之間的任何修改。并且
git reset --soft HEAD^
git status # 沒有工作要做
ls # 文件比回退之前少了,與回退到的那個版本當(dāng)時一樣多
git ls-files # 查看暫存區(qū)文件,文件比回退之前少了,與回退到的那個版本當(dāng)時一樣多
-
mix
參數(shù)回退之后,HEAD
指針指向回退的版本,提交歷史變少,工作區(qū)內(nèi)容多于本地倉庫而暫存區(qū)一樣多,相當(dāng)于只把兩次之間的差異保留在了工作區(qū)。并且
git status # 提示有未跟蹤的文件
ls # 文件與回退之前一致
git ls-files # 查看暫存區(qū)文件,文件比回退之前少了,與回退到的那個版本當(dāng)時一樣多
這里mixed
和soft
有一個用法就是,多次提交想合并的時候,回退到想要保留為上一個版本的那一版,然后重新提交,這樣即保留了所有修改,又能合并修改。
另外hard
參數(shù)回退會刪除所有相關(guān)修改,謹(jǐn)慎使用,但其實我們?nèi)匀豢梢曰謴?fù)這些修改,只能說GIT牛逼。畢竟文件應(yīng)該沒有多大,修改也不會幅度太大,因此存儲的占用應(yīng)該保留上一個版本都不是問題。
使用:
git reflog # 查看操作的歷史記錄,查看想要回溯的GIT版本
git reset --n hard 想要回溯的GIT版本 # 回到想要回溯的GIT版本
六. 查看差異
通過 git diff
查看工作區(qū),暫存區(qū),本地倉庫之間差異。還可以查看文件在兩個特定版本之間的差異。或者文件在兩個分支之間的差異。
git diff # 默認(rèn)比較工作區(qū)和暫存區(qū)之間的差異內(nèi)容 紅色的文字是刪除的內(nèi)容,綠色是新加的內(nèi)容
git diff HEAD # 比較工作區(qū)和版本庫之間的差異內(nèi)容
git diff --cached # 比較暫存區(qū)和版本庫之間的差異內(nèi)容
git diff 第一個版本id 第二個版本id # 比較兩個版本之間的差異內(nèi)容
git diff 5aF90qb HEAD # 比較5aF90qb版本和現(xiàn)版本的差異
git diff 5aF90qb HEAD file.txt # 只查看這個文件的差異內(nèi)容
git diff 分支1 分支2 # 查看兩個分支的差異
可以用HEAD
表示當(dāng)前版本,HEAD~ / HEAD^
表示上一個版本, HEAD~3
表示往前數(shù)三個版本。
HEAD和ID的前后順序不同,最后產(chǎn)生的結(jié)果就不同,我習(xí)慣后面寫靠后的版本。
七. 刪除文件
方法一:
rm file.txt # 也可以手動刪除本地文件
git status # 提示我們 deleted
git add . # 刪除文件也是通過add進(jìn)行的,這里也可以用file.txt代替.
git commit -m "提交信息"
這個方法會麻煩一些,git
提供了另一種方法。
方法二:
git rm file.txt # 同時在工作區(qū)和暫存區(qū)刪除該文件
git commit -m "提交信息"
若想只刪除暫存區(qū)文件,保留本地文件,加--cached
參數(shù)
git rm --cached file.txt # 若想只刪除暫存區(qū)文件,保留本地文件,加--cached參數(shù)
八. 忽略文件
通過.gitignore
文件忽略文件,直接在文件里寫文件名。
忽略文件的類型:
- 系統(tǒng)或軟件自動生成的文件
- 中間文件(由另一個文件生成的文件)
- 日志文件,緩存文件,臨時文件等
- 敏感信息文件
可以用通配符忽略所有的log文件:*.log
可以忽略文件夾:temp/
.gitignore
文件生效的前提是忽略的這個文件不能是已經(jīng)被添加到版本庫中的文件
九. 遠(yuǎn)程倉庫配置
- 使用
GitHub
管理代碼,在GitHub
官網(wǎng)注冊并登錄賬號。+號創(chuàng)建倉庫。 - 配置SSH秘鑰:
參考windows秘鑰配置,打開Git Bash
# 默認(rèn)在根目錄下
ssh-keygen -t rsa -b 4096 # 之后一直回車一路到底。
找到目錄C:\Users\Winston\.ssh
(用自己的用戶名替換Winston)中的私鑰(id_rsa
)和公鑰(id_rsa.pub
)文件。
在GitHub
中點(diǎn)擊頭像
->Settings
->SSH and GPG keys
->New SSH key
把id_rsa.pub
中的公鑰復(fù)制到Key
中,新建Key
如果成功應(yīng)該在如下Git Bash
中輸入ssh -T git@github.com
后輸出successfully
這里的ssh應(yīng)該是一個私鑰加密公鑰解密的過程,目的是確定操作者是你。
而公鑰加密私鑰解密的過程是為了不讓別人看到。
十. 本地倉庫和遠(yuǎn)程倉庫交互
1. 本地倉庫上傳 push
git remote add 倉庫名 倉庫地址 # 將本地倉庫連接到遠(yuǎn)程倉庫
git remote -v # 查看本地倉庫對應(yīng)的遠(yuǎn)程倉庫別名和地址
git branch -M main # 指定分支名稱為main
git push -u origin main:main # -u表示初始化push,將本地的main分支和遠(yuǎn)程origin倉庫main分支進(jìn)行關(guān)聯(lián),如果兩者分支名相同,寫一個就行
git push origin main:main # 將本地的main分支和遠(yuǎn)程origin倉庫main分支進(jìn)行關(guān)聯(lián),如果兩者分支名相同,寫一個就行
-u
這個標(biāo)志設(shè)置跟蹤信息。使用-u
,git
會記住遠(yuǎn)程倉庫和分支的信息,這樣以后你就可以簡單地運(yùn)行git push
而不必指定分支和遠(yuǎn)程倉庫。
git push # 將本地的main分支推送到遠(yuǎn)程origin倉庫main分支
git push origin main:main # 當(dāng)然你也可以寫全,這一行與上一行是一個意思,因為初始化時已經(jīng)進(jìn)行了指定分支和倉庫
2. 遠(yuǎn)端倉庫下載 pull
# 如果不寫默認(rèn)倉庫名和分支名,默認(rèn)拉取的是origin倉庫的main分支
git pull origin main:main # 將本地的main分支和遠(yuǎn)程倉庫main分支進(jìn)行關(guān)聯(lián),如果兩者分支名相同,寫一個就行
需要注意git
會對pull
下來的遠(yuǎn)程倉庫文件和本地文件進(jìn)行合并,如果有沖突就不會合并,會要求解決沖突。
git fetch # 另一種拉取方式,但是不會合并,需要我們手動合并。
十一. 分支基本操作
1. 創(chuàng)建、切換和刪除分支
git branch # 查看倉庫中的所有分支
git branch winston # 創(chuàng)建新的分支
git switch winston # 切換到新的分支
git branch -d winston # 刪除分支
git checkout -b winston 想要恢復(fù)的winston分支提交ID # 恢復(fù)分支
git log --oneline --graph --decorate --all # 查看提交ID
2. 合并分支
當(dāng)前所在分支是合并之后的目標(biāo)分支,命令之后的分支是需要合并到當(dāng)前分支的分支。
git switch main # 切換到目標(biāo)分支
git merge winston # 將winston分支合并到main分支
git log --graph --oneline --decorate --all # 查看分支圖,在圖形化界面上顯示更為美觀
分支合并之后還是存在的,如在main
中合并winston
,winston
仍存在,內(nèi)容和合并前一致,如果不需要可以手工刪除。
git branch -d winston # 刪除這個分支,-d表示這個分支已經(jīng)完成了合并,沒有被合并的話就會被拒絕
git branch -D winston # 強(qiáng)制刪除這個分支,即使未合并
合并分支后日志里的顯示是兩個分支的所有日志按照時間順序排序生成的新日志。
3. 解決沖突
如果兩個版本改變了同一個文件的同一行代碼,就需要解決沖突。(實測如果winston
在第3行末尾追加了代碼,main
添加了一行代碼作為第4行,合并時也會出現(xiàn)沖突)
git switch main # 切換到目標(biāo)分支
git merge winston # 將winston分支合并到main分支
git
報錯說有沖突。
git status # 沖突文件列表
git diff # 沖突的具體內(nèi)容
- 如果想要解決沖突并繼續(xù)合并就:
文件中等號上面部分是main
分支的修改內(nèi)容,下面是winston
分支的修改內(nèi)容。接下來我們編輯這個加入了等號和箭頭的文件。
vi file.txt
git add .
git commit -m "merge conflict"
- 如果想要終止合并就:
git merge --abort
十二. 變基Rebase(慎用,邏輯比較復(fù)雜)
rebase
命令和merge
有一定相似度,merge
是合并兩個分支,rebase
是變基如下圖:
- merge
- rebase變基最終結(jié)果都是一條直線,有如下兩種情況(順序不同):
git switch dev
git rebase main # 將dev分支以main分支為基
變基前 | 變基后 |
---|---|
![]() |
![]() |
git switch main
git rebase dev # 將main分支以dev分支為基
變基前 | 變基后 |
---|---|
![]() |
![]() |
最主要的區(qū)別有兩點(diǎn):
-
rebase
變基不像merge
按照時間順序?qū)Χ啻翁峤贿M(jìn)行合并,而是直接把一條分支的提交記錄嫁接到另一條分支上。 -
rebase
不會產(chǎn)生額外的提交記錄,形成線性歷史;而merge
會產(chǎn)生一個合并的提交記錄,分支圖復(fù)雜。
十三. 在一個分支上合并多次提交
這里我們在分支r上進(jìn)行了三次提交
需要將三次提交的文件內(nèi)容保留,而提交記錄合并,并且把提交信息整合成一個,用如下三個命令是等價的:
git rebase -i 6b837bd8e38c02e60f5bc2838c6dd5a82e73364f # -i后面跟的是不需要合并的版本號
git rebase -i HEAD~3 # 合并近三次提交(包括HEAD指向的最近提交)
git rebase -i HEAD^^^ # 合并近三次提交(包括HEAD指向的最近提交)
之后單擊i
按鍵,進(jìn)入編輯模式,注意到有一行注釋寫的是s, squash <commit> = use commit, but meld into previous commit
,意思是保留那一次提交,但是融入到之前的提交中,因此我們只保留第一個pick
,后面的都改寫成s
。
然后我們ESC
退出編輯模式,shift + :
輸入wq
回車保存并退出,就會出現(xiàn)如下界面:
我們隨便選擇一行作為最后提交信息的輸出行,其余的都打上#
。Successfully rebased and updated refs/heads/r.
最后用git push -f
命令強(qiáng)制推送到遠(yuǎn)端就可以了。
git push -f
文章來源:http://www.zghlxwxcb.cn/news/detail-860919.html
十四. 一些好用的圖形化Git軟件可以簡化命令行操作
-
VS code
中就有源代碼管理器,可以為我們提供快速的文件添加,提交,上傳的圖形化按鈕。 - 想要實時觀察
git
工作樹,可以在VS code
中下載插件Gitlens
,提供了很多git
有關(guān)功能。
十五. 補(bǔ)充(更新中)一些常用cmd命令
- win11命令行
mv file.txt file1.txt # 文件改名
del 文件名 # 刪除文件
rmdir 文件夾名 # 刪除空文件夾
rm -r # 刪除非空文件夾
alias graph="git log --graph --oneline --decorate --all" # 將命令寫成別名graph,建議寫在git配置文件中
全文參考:一小時GIT教程文章來源地址http://www.zghlxwxcb.cn/news/detail-860919.html
到了這里,關(guān)于GIT常用操作整理(從本地創(chuàng)建倉庫到提交到GitHub全流程)學(xué)習(xí)筆記的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!