Git 基本操作

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

組成結(jié)構(gòu)

  • 工作區(qū):就是你在電腦里能看到的目錄。兩種狀態(tài):已跟蹤(tracked)或未跟蹤(untracked)。
  • 暫存區(qū):英文叫 stage 或 index。一般存放在 .git 目錄下的 index 文件(.git/index)中,所以我們把暫存區(qū)有時(shí)也叫作索引(index)。
  • 版本庫(kù):工作區(qū)有一個(gè)隱藏目錄 .git,是 Git 的版本庫(kù)。
  • 遠(yuǎn)程倉(cāng)庫(kù)

操作

初始化

// 本地初始化空倉(cāng)庫(kù)
git init        // 使用當(dāng)前目錄作為Git倉(cāng)庫(kù),并創(chuàng)建.git文件
git init [dir_name] // 指定目錄

查看狀態(tài)

git status  // 查看項(xiàng)目的當(dāng)前狀態(tài)
git status -s // 以精簡(jiǎn)的方式顯示文件狀態(tài)
// 查看執(zhí)行 git status 的結(jié)果的詳細(xì)信息
git diff  // 尚未緩存的改動(dòng)
git diff --cached // 查看已緩存的改動(dòng)
git diff HEAD // 查看已緩存的與未緩存的所有改動(dòng)
git diff --stat // 顯示摘要而非整個(gè) diff

查看歷史

git log
/* 添加參數(shù)
https://www.cnblogs.com/biglucky/p/5076885.html
*/
--oneline // 簡(jiǎn)潔的版本
--before={3.weeks.ago} 
--after={2010-04-18} 
--no-merges // 隱藏合并提交
--pretty=format:"%cn committed %h on %cd" // 格式化
git blame [file_name] // 顯示修改記錄

添加文件到本地倉(cāng)庫(kù)

git add [.|file_name] // 開(kāi)始跟蹤新文件,或者把已跟蹤的文件放到暫存區(qū),還能用于合并時(shí)把有沖突的文件標(biāo)記為已解決狀態(tài)
git commit –m "commit messages" // 將緩存區(qū)內(nèi)容添加到倉(cāng)庫(kù)中
git commit -am "項(xiàng)目初始化+目錄結(jié)構(gòu)劃分" // 將已跟蹤文件放到暫存區(qū)(省略 git add)
git commit --amend // 進(jìn)入vim編輯器,對(duì)上次提交的內(nèi)容進(jìn)行修改,也可以修改提交說(shuō)明

遠(yuǎn)程倉(cāng)庫(kù)

// 創(chuàng)建一個(gè)遠(yuǎn)程倉(cāng)庫(kù)
git remote add origin git@github.com:pipizh/mini-program.git // 本地和遠(yuǎn)程倉(cāng)庫(kù)相互關(guān)聯(lián)
git push -u origin master // 推送 → 用本地分支合并到遠(yuǎn)程分支。

git remote -v // 查看當(dāng)前的遠(yuǎn)程庫(kù),執(zhí)行時(shí)加上 -v 參數(shù),可以看到每個(gè)別名的實(shí)際鏈接地址。

git fetch // 從遠(yuǎn)程倉(cāng)庫(kù)下載新分支與數(shù)據(jù)。
git pull  // git fetch 和 git merge FETCH_HEAD 的簡(jiǎn)寫(xiě)?!?將遠(yuǎn)程分支合并到本地分支。

版本回退

reset 的本質(zhì):移動(dòng) HEAD 以及它所指向的 branch

git reset HEAD file_name 
// 添加選項(xiàng)
git reset --hard id // 根據(jù) id 回退到指定的提交版本,此回退操作不建議    
git reset --mixed id // (默認(rèn))
git reset --soft id
// git reflog 查看id
// --hard:刪除工作空間改動(dòng)代碼,撤銷(xiāo)commit,撤銷(xiāo)git add,撤銷(xiāo)工作區(qū)修改 
// --mixed:撤銷(xiāo)commit,撤銷(xiāo)git add,保留工作目錄
// --soft:保留工作目錄的內(nèi)容,并把因?yàn)楸A艄ぷ髂夸泝?nèi)容所帶來(lái)的新的文件差異放進(jìn)暫存區(qū),即只撤銷(xiāo)commit  

刪除文件

git rm <file> // 刪除工作區(qū)文件,并且將這次刪除放入暫存區(qū),提交之后會(huì)刪除版本庫(kù)中的文件。
// 同時(shí)暫存區(qū)不能存有該文件,如果刪除文件之前修改過(guò)并且已經(jīng)放到暫存區(qū)的話,git rm 命令會(huì)報(bào)錯(cuò)。必須要用強(qiáng)制刪除選項(xiàng) -f 
git rm -f <file> // 刪除工作區(qū)和暫存區(qū)文件,并且將這次刪除放入暫存區(qū)。
git rm --cached <file> //  刪除暫存區(qū)文件,但保留工作區(qū)的文件,并且將這次刪除放入暫存區(qū)。
git rm –r * // 遞歸刪除整個(gè)目錄中的所有子目錄和文件

克隆

// clone 遠(yuǎn)程倉(cāng)庫(kù)
git clone url_name [dir_name] // 指定地址和存放目錄(可選)
git clone git@github.com:fsliurujie/test.git         // SSH協(xié)議
git clone git://github.com/fsliurujie/test.git       // GIT協(xié)議
git clone https://github.com/fsliurujie/test.git     // HTTPS協(xié)議

標(biāo)簽管理

如果你達(dá)到一個(gè)重要的階段,并希望永遠(yuǎn)記住那個(gè)特別的提交快照,你可以使用 git tag 給它打上標(biāo)簽。

git tag -a v1.0 [id] -m "commit messages"http:// 給最新一次提交打上(HEAD,也可通過(guò)id選定)"v1.0"的標(biāo)簽,-m 選項(xiàng)意為"創(chuàng)建一個(gè)帶注解的標(biāo)簽"(可選)
git show v1.0 // 查看此版本所修改的內(nèi)容

git tag // 查看所有標(biāo)簽
git checkout v1.0 // 切換到標(biāo)簽v1.0

git push v1.0
git push --tags // 推送全部尚未推送到遠(yuǎn)程的本地標(biāo)簽

git tag -d v1.0 // 刪除本地標(biāo)簽v1.0
git push origin :refs/tags/v1.0 // 刪除遠(yuǎn)程標(biāo)簽v1.0

分支管理

git branch branch_name //  創(chuàng)建分支
git checkout branch_name // 切換分支
git checkout -b branch_name // 創(chuàng)建子分支,并切換到子分支上。git 將還原你的工作目錄到分支的狀態(tài)

git branch -d branch_name // 刪除本地分支
git push origin -d branch_name // 刪除遠(yuǎn)程分支 

git branch // 查看所有分支

// 將文件推送到遠(yuǎn)程倉(cāng)庫(kù)并創(chuàng)建遠(yuǎn)程分支
git push origin branch_name

// 合并分支
git checkout branch_name_1
git merge branch_name_2 // 切換到 branch_name_1,將 branch_name_2 分支上的代碼合并到 branch_name_1

git push    // 此命令默認(rèn)推送到遠(yuǎn)程master

分支沖突

https://www.cnblogs.com/gavincoder/p/9071959.html

合并分支時(shí),會(huì)產(chǎn)生沖突,不管在本地上合并兩個(gè)分支,或是本地分支與遠(yuǎn)程分支的合并。(多人合作場(chǎng)景下)

如果在相同文件名下相同位置出現(xiàn)不同的修改(修改了同一個(gè)文件的名稱),合并時(shí)就會(huì)產(chǎn)生沖突。Git用<<<<<<<=======、>>>>>>>標(biāo)記出不同分支的內(nèi)容。

解決沖突:git status 查看沖突文件,再手動(dòng)編輯為希望的內(nèi)容并add+commit。

開(kāi)發(fā)建議:每次開(kāi)發(fā)前先從 git 上 down 下來(lái)最新的代碼在 master 上,在 master 基礎(chǔ)上建立自己的分支,做的修改在分支提交。push 時(shí)先從遠(yuǎn)程倉(cāng)庫(kù) pull master,然后和本地分支進(jìn)行合并 merge 后再 push。這樣即使修改同一個(gè)文件也不容易沖突。

錯(cuò)誤

HEAD detached from id 的解決方法

Git命令中文顯示亂碼的問(wèn)題解決 git config --global core.quotepath false

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容