柚子快報(bào)邀請(qǐng)碼778899分享:git開(kāi)發(fā)中常用命令
柚子快報(bào)邀請(qǐng)碼778899分享:git開(kāi)發(fā)中常用命令
首先理解git分為工作區(qū),暫存區(qū),本地倉(cāng)庫(kù),遠(yuǎn)程倉(cāng)庫(kù)
?Git目錄下的文件有四種狀態(tài):Unmodify(未修改)、Modified(已修改)、Staged(暫存)和Committed(已提交)
git status能看到三種文件狀態(tài)
Untracked files 未跟蹤 指從未添加到本地倉(cāng)庫(kù)的文件。Changes not staged for commit 未提交的更改 當(dāng)前文件在工作區(qū)有修改,但是沒(méi)有提交到暫存區(qū)。Changes to be committed 提交的更改 當(dāng)前文件提交到暫存區(qū)了未commit到本地倉(cāng)庫(kù)。
還有一種就是被ignore的文件是不會(huì)顯示的(在.git目錄下創(chuàng)建.gitignore文件指定忽略文件或目錄)。
工作區(qū):
一般下載代碼用
git clone https://github.com/cesanta/mongoose.git
命令從遠(yuǎn)程倉(cāng)庫(kù)下載代碼默認(rèn)master分支
?
git clone https://github.com/cesanta/mongoose.git --branch=xxx --depth=1
命令中--branch用于指定分支, --depth用于代碼量過(guò)大下載失敗,設(shè)置只包含最近日志。
修改文件后都是保存在工作區(qū)的。使用git status查看文件號(hào)狀態(tài),一般會(huì)顯示為紅色
可以使用git diff查看工作區(qū)文件的修改。
使用git checkout 指定目錄或文件,刪除本地文件(工作區(qū))修改(慎重使用,如果該修改未提交過(guò)commit,則不可以恢復(fù))
暫存區(qū):
可以使用git add code/src/main/main.c 命令執(zhí)行目錄或文件將狀態(tài)提交到暫存區(qū)。
git add . 表示將Untracked files和Changes not staged for commit狀態(tài)的文件都提交到暫存區(qū)
git add -u . 命令表示將當(dāng)前目錄狀態(tài)為Changes not staged for commit提交到暫存區(qū)(-u 表示已跟蹤文件,. 表示所有文件)
git status查看文件狀態(tài)
可以使用git diff --cached 查看暫存區(qū)文件的修改。
可以使用git reset code/src/main/main.c指定文件或目錄將文件狀態(tài)撤回到工作區(qū)
git reset . 撤回所有暫存區(qū)的所有文件。
本地倉(cāng)庫(kù):
使用git commit提交暫存區(qū)的文件到本地倉(cāng)庫(kù),然后生成一個(gè)commit提交。可以使用git log查看本地倉(cāng)庫(kù)的commit。
已經(jīng)執(zhí)行了commit,但是日志描述不正確想重新填寫(xiě),可以執(zhí)行g(shù)it commit --amend修改最近的一次commit。
如果是更之前的commit可以配合git reabse -i去使用。
要將commit撤回,可以使用git reset commit號(hào),可以回退本地倉(cāng)庫(kù)本次commit提交, 并將相關(guān)修改放在工作區(qū)。
git reset --hard commit號(hào),將本地倉(cāng)庫(kù)狀態(tài)回退到對(duì)應(yīng)狀態(tài),并丟棄相關(guān)修改到工作區(qū)和索引區(qū)。
git reset --soft 將head移動(dòng)到指定提交,但不會(huì)改變本地倉(cāng)庫(kù)狀態(tài),主要用于提交部分修改到遠(yuǎn)程倉(cāng)庫(kù)時(shí)使用。
commit號(hào)可以改為HEAD·n n表示數(shù)字,表示最近的n個(gè)commit。
遠(yuǎn)程倉(cāng)庫(kù);
使用git push 將本地倉(cāng)庫(kù)推送到遠(yuǎn)程倉(cāng)庫(kù),如果與遠(yuǎn)程倉(cāng)庫(kù)已經(jīng)同步,可以直接push成功,否則失敗。
不同步需要先同步遠(yuǎn)程倉(cāng)庫(kù)到本地倉(cāng)庫(kù)。使用git pull命令,將遠(yuǎn)程倉(cāng)庫(kù)同步到本地倉(cāng)庫(kù)然后merge到工作區(qū)。如果merge失敗,需要先解決沖突然后再執(zhí)行g(shù)it pull,直至成功合并。
再次執(zhí)行g(shù)it push可以推送成功,
git push -f 表示強(qiáng)制將本地倉(cāng)庫(kù)推送到遠(yuǎn)程倉(cāng)庫(kù),風(fēng)險(xiǎn)極大,可以抹除遠(yuǎn)程倉(cāng)庫(kù)上提交記錄(前提是無(wú)審核機(jī)制)
/****************************************************************************************************/
使用小技巧:
1.可以使用git branch查看當(dāng)前有多少個(gè)分支,使用git branch aaa創(chuàng)建一個(gè)aaa的分支,使用git checkout aaa將代碼切換到aaa的分支。這種好處在于,在aaa分支修改文件后,將修改提交到本地倉(cāng)庫(kù),形成一個(gè)新的commit,再切回之前的分支,是沒(méi)有這個(gè)修改的(前提要執(zhí)行到commit)。修改還在工作區(qū),暫存區(qū),這塊修改是分支間共享的,只有提交commit后,才會(huì)在該分支有記錄。當(dāng)你需要提交到遠(yuǎn)程倉(cāng)庫(kù)時(shí),先更新與遠(yuǎn)程倉(cāng)庫(kù)對(duì)應(yīng)的分支代碼,然后用切換到該分支,用git merge aaa將修改合并,如果有沖突需要手動(dòng)修改后add進(jìn)本地倉(cāng)庫(kù)。
2.如果下載代碼用的git clone --branch==xxx --depth=1,想要消除--depth可以使用git pull --unshallow命令,執(zhí)行后可以看到完整的commit。
如果想本地有遠(yuǎn)程倉(cāng)庫(kù)中別的分支代碼可以使用這幾條命令指定分支。
$ git remote set-branches origin 'remote_branch_name'
$ git fetch --depth 1 origin remote_branch_name
$ git checkout remote_branch_name
3.如果你發(fā)現(xiàn)了自己的最近某個(gè)提交有問(wèn)題,想撤回但是要留有記錄,可以執(zhí)行g(shù)it revert commit號(hào),會(huì)產(chǎn)生一個(gè)revert記錄,可以直接git push到遠(yuǎn)程倉(cāng)庫(kù)。如果不想產(chǎn)生一個(gè)revert記錄,可以使用git rebase對(duì)歷史提交做修改,但是不建議這樣做,這樣修改能讓歷史記錄非常好看,但是也會(huì)抹除部分提交記錄。
4. 如果不小心用git push -f提交遠(yuǎn)程代碼并且把同事的提交給覆蓋了,此時(shí)如果你本地提交前git pull過(guò),有完整的提交記錄。直接使用git log是不行的,可以使用 git reflog 找到你git pull時(shí)的提交,執(zhí)行g(shù)it reset --soft HEAD@{8} 選對(duì)應(yīng)pull時(shí)的數(shù)字。然后再執(zhí)行g(shù)it push -f覆蓋你之前的錯(cuò)誤提交。(風(fēng)險(xiǎn)大,可以自己搞個(gè)獨(dú)立遠(yuǎn)程倉(cāng)庫(kù)分支嘗試)。如果本地沒(méi)有就得找到最后一個(gè)提交代碼的同事讓他git push -f更新一下遠(yuǎn)程倉(cāng)庫(kù)。
柚子快報(bào)邀請(qǐng)碼778899分享:git開(kāi)發(fā)中常用命令
相關(guān)鏈接
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。