Git 操作進(jìn)階使用

1.引言

最近跳槽啦,入職啦一家新的公司,5個(gè)人協(xié)同辦公,共同維護(hù)一個(gè)項(xiàng)目。因?yàn)樽约篻it 用的不是很熟悉,導(dǎo)致,自己提交之后的代碼,把服務(wù)器上的代碼弄亂啦。折騰了一倆天。給自己帶來麻煩的同時(shí)也麻煩啦我的同事。所以今天花啦一整天學(xué)習(xí)下git的進(jìn)階使用。我是在Linux上寫的這篇博客

2.正題

2.1 概念

暫存區(qū):通過git add. 將文件提交的區(qū)域
本地區(qū):本地git倉(cāng)庫(kù)保存的區(qū)域
工作區(qū):對(duì)本地區(qū)代碼進(jìn)行修改,保存的區(qū)域

image.png

2.2 git 中的關(guān)聯(lián)關(guān)系:

  • 本地倉(cāng)庫(kù)和遠(yuǎn)程倉(cāng)庫(kù)的關(guān)系
 git  add   remote   origin  <遠(yuǎn)程倉(cāng)庫(kù)的地址>      本地倉(cāng)庫(kù)和遠(yuǎn)程倉(cāng)庫(kù)建立連接 

 git remote -v    查看遠(yuǎn)程倉(cāng)庫(kù)的地址
  • 本地分支和遠(yuǎn)程分支的關(guān)系
   git checkout -b   <本地分支名>   origin/<遠(yuǎn)程服務(wù)器分支名稱>   將遠(yuǎn)程分支拉到本地。此時(shí)遠(yuǎn)程分支和本地分支沒有建立聯(lián)系
   
   git branch  -u  origin/ <遠(yuǎn)程分支名字,不帶origin>           本地分支和遠(yuǎn)程分支建立聯(lián)系(ps: 默認(rèn)是當(dāng)前的本地分支)

  • 查看本地分支 和遠(yuǎn)程分支 的對(duì)應(yīng)關(guān)系
   git branch -vv   

2.3 場(chǎng)景分析

2.31 本地commite 合并

多人本地協(xié)同辦公,為了保證日志的清晰,每個(gè)人提交一次,只能有一個(gè)結(jié)點(diǎn)。也就是說本地有多個(gè)commite打話,必須要合并成一個(gè)commite。commite的合并 用到git rebase -i [startCommiteId]。此條指令的意思是,將startCommiteId 之后的提交合并成一個(gè)。
示例:

image.png

現(xiàn)在要將”本地的三次提交" 合并成一次。選擇”本地第一次提交" 前的一次commitId 作為startCommiteId,也就是 commit:e21b9a743c 那次提交。

執(zhí)行:git rebase -i e21b9a743c,進(jìn)入如下界面


image.png

將"pick " 改成 s 就行。s是 squash的 縮寫。 修改完畢:Ctrl+X 退出編輯界面,進(jìn)入到 ”合并日志填寫界面”

image.png

Ctrl+X 退出之后,就會(huì)提示保存成功


注意:
git rebase -i 是將最新的一次提交,壓縮到"前一個(gè)提交"上,因此我們不能把 將 "前一個(gè)提交"前打"Pick" 改成 "s"。 否則會(huì)提示:

Git: 在轉(zhuǎn)換時(shí)出現(xiàn)"沒有前一個(gè)提交不能進(jìn)行'squash'"

image.png

2.32 減少 沖突合并生成結(jié)點(diǎn)

合并是無時(shí)無刻存在的,單純的使用 git pull 將會(huì)發(fā)生合并操作。導(dǎo)致本地新生成一個(gè) "合并結(jié)點(diǎn)"。然后提交到服務(wù)器上,就會(huì)有這條合并記錄。日志上會(huì)很難看,且容易出現(xiàn)混亂。(ps:我本人就是因?yàn)檫@樣的操作,導(dǎo)致混亂)。正確的方式是:

git  pull  --rebase  origin  遠(yuǎn)程分支名

之后,通過  git status 查看 沖突 ,更改沖突完畢之后

git add .

git rebase --continue

這樣就不會(huì)生成一個(gè)新的結(jié)點(diǎn)。前提啥:本地分支已經(jīng)提交

2.33 分支選擇性合并

當(dāng)前分支為A,還有一個(gè)分支為B?,F(xiàn)在想將B分支的一次提交,合并到A分支上。使用

git  cherry-pick   commiteId 

有提示沖突:git status 查看,并修改,之后,git  commit  -s  提交 這次的合并

以上就是我最近一天遇到的關(guān)于git使用的痛點(diǎn)。通過這些天的摸索,也逐漸學(xué)會(huì)啦一些其他打命令。

git  reset  + commitId   回退版本,commitId 之后的改動(dòng),會(huì)在工作區(qū)中保存

git reset --soft  +commitId   回退版本,commitId 之后的改動(dòng),會(huì)在工作區(qū)中保存

git reset --hard   +commitId  回退版本到指定版本,commitId 之后的改動(dòng)就會(huì)被丟棄(  慎用)

git  branch -vv   經(jīng)常需要查看當(dāng)前head 是否在分支上,以及本地分支對(duì)應(yīng)打遠(yuǎn)程分支

git  push  origin  HEAD:遠(yuǎn)程分支名    "HEAD" 必須完全大寫。假如不指定遠(yuǎn)程分支,git push 默認(rèn)是在遠(yuǎn)程服務(wù)器新建立一個(gè)  和  本地分支名稱一樣的,遠(yuǎn)程分支

git pull --rebase  origin   遠(yuǎn)程分支名 (不要用origin/遠(yuǎn)程分支名)


目前還有這些內(nèi)容待總結(jié):

  1. Choreographer 學(xué)習(xí)
  2. ViewGroup 自定義不執(zhí)行onDraw().通過設(shè)置 setWillNotDraw(false);
  3. ArgbEvaluator 類 可以實(shí)現(xiàn)字體顏色/背景的漸變效果
  4. 給控件設(shè)置ele 陰影,發(fā)現(xiàn)沒得反映 需要調(diào)用下:setOutlineProvider()
  5. focusSeach 進(jìn)一步深入理解
  6. TvRecycleView的bug 。設(shè)置了攔截子view 焦點(diǎn)的 模式,導(dǎo)致子view requestFOcus 失敗
  7. android tv 有些view setOnClick/setlongClick 無反應(yīng)。(原因是父布局dispathEvent返回true,更加深一層的原因是 view焦點(diǎn)占據(jù),所以不響應(yīng)事件)
  8. Git rebase Git revert Git stash ,Git commit -s 等等操作練習(xí)

革命尚未成功,同志們還任需努力!


補(bǔ)充:

git stash: 將當(dāng)前分支下,工作區(qū)的代碼(改動(dòng)的)存入棧中。方面進(jìn)行g(shù)it pull 操作

git stash pop: 將當(dāng)前棧中改動(dòng)的代碼,移出并且刪除,移出的意思是與當(dāng)前分支進(jìn)行合并。既然是合并就會(huì)產(chǎn)生沖突。解決沖突之后,git add . 一下 就 ok了。

git stash show : 查看是否棧中有緩存的代碼

git stash clear: 刪除 棧中的代碼

最后編輯于
?著作權(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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