1.使用rebase而不是merge來提取上游修改
將分支機(jī)構(gòu)合并記錄為合并提交是有意義的。例如,通過這種方式,可以識(shí)別出一個(gè)新的特征被合并到發(fā)布分支中。然而,當(dāng)多個(gè)團(tuán)隊(duì)成員在一個(gè)項(xiàng)目上工作,并使用傳統(tǒng)的git pull來同步分支時(shí),提交時(shí)間表將被不必要的合并提交所污染。更好的方法是使用git rebase將一個(gè)特性分支基于主分支:
$ git結(jié)賬功能
$ git rebase master
這樣做將把整個(gè)特征分支移動(dòng)到主分支的開始,這將合并主分支上的所有新提交。但是,通過為原始分支中的每個(gè)提交創(chuàng)建一個(gè)新的提交,更改基礎(chǔ)將重寫項(xiàng)目歷史,而不是使用合并提交。換基地的主要好處是你會(huì)獲得更干凈的項(xiàng)目歷史。此外,還有一些關(guān)于變基陷阱的討論。
2.執(zhí)行g(shù)it rebase后解決合并沖突
就像能力越大,責(zé)任越大。執(zhí)行g(shù)it rebase時(shí),可能會(huì)遇到合并沖突。合并沖突意味著兩個(gè)提交修改了同一個(gè)文件的同一行,Git不知道應(yīng)該應(yīng)用哪個(gè)修改。這將導(dǎo)致如下錯(cuò)誤消息:
Git會(huì)給你三個(gè)選項(xiàng)來修復(fù)導(dǎo)致沖突的提交(fa39187):
可以運(yùn)行g(shù)it rebase --abort來完全取消變基。這么做會(huì)取消變基修改,并將分支置回到執(zhí)行g(shù)it rebase之前的狀態(tài)??梢赃\(yùn)行g(shù)it rebase --skip來完全忽略該提交。這樣,有問題的提交所引入的變化就不會(huì)被添加到歷史中。可以使用與合并沖突相同的標(biāo)準(zhǔn)步驟來解決沖突。3.臨時(shí)保存和修改
工作進(jìn)行中,有些事情往往處于一種凌亂的狀態(tài)。如果此時(shí)需要切換到不同的分支機(jī)構(gòu)呢?Git不允許您這樣做,因?yàn)橛形幢4娴母?。坦白說,你不想提交半成品,以后再修改。這個(gè)問題的解決方案是使用git stash命令。Stash將接收工作目錄的當(dāng)前狀態(tài)(例如,修改后的跟蹤文件和暫存區(qū)的修改等)。)并保存在未完成的修改棧中,以便以后隨時(shí)修改。您可以通過以下命令暫時(shí)保存您的工作:
$ git stash
已保存工作目錄和索引狀態(tài)在制品功能:3fc175f修復(fù)競爭條件
海德現(xiàn)在處于3fc175f固定比賽狀態(tài)
現(xiàn)在工作目錄是干凈的:
$ git狀態(tài)
#分支功能
沒有要提交的內(nèi)容,工作目錄干凈
這個(gè)時(shí)候換分支做其他事情是安全的。不過不用擔(dān)心,暫時(shí)的臣服還在:
$ git隱藏列表
stash@{0}: WIP on功能:3fc175f修復(fù)競態(tài)條件
稍后,返回特征分支后,您可以檢索所有臨時(shí)更改:
$ git stash pop
分支特征
未提交的更改:
(使用“git add ...”更新將要提交的內(nèi)容)
修改:index.html
已刪除refs/stash @ { 0 }(AC 2321 C3 a 33 ba 712 b 8 e 50 c 99 a 99 D3 c 20 da 9 D6 b 8)
還有其他可供轉(zhuǎn)移的選項(xiàng),如下所示:
$ git stash save " description it " #給stash起個(gè)名字
$ git stash clear #刪除一個(gè)隱藏的提交
$ git stash save - keep-index #僅存儲(chǔ)未存儲(chǔ)的文件
4.克隆特定的遠(yuǎn)程分支
如果我想從遠(yuǎn)程存儲(chǔ)庫中克隆一個(gè)特定的分支,我應(yīng)該怎么做?通常您會(huì)使用git clone,但是這樣做會(huì)將所有其他分支一起克隆。一個(gè)方便的方法是使用git遠(yuǎn)程添加:
$ git init
$ git遠(yuǎn)程add -t -f原點(diǎn)
$ git結(jié)帳
5.將精選遠(yuǎn)程提交合并到自己的分支中
更何況只是想把遠(yuǎn)程倉庫的某個(gè)特定提交合并到自己的分支,怎么辦?您可以使用git cherry-pick來選擇給定SHA值的提交,然后將其合并到當(dāng)前分支中:
$ git精選
6.從不相關(guān)的本地倉庫應(yīng)用補(bǔ)丁
需要將另一個(gè)不相關(guān)的本地倉庫提交的補(bǔ)丁應(yīng)用到當(dāng)前倉庫,怎么辦?答案是以下命令:
$ git - git-dir=/。git格式-patch -k -1 - stdout | git am -3 -k
7.忽略跟蹤文檔中的更改
如果您和您的同事正在操作同一個(gè)分支,很可能需要頻繁執(zhí)行g(shù)it合并或git rebase。但是,這樣做可能會(huì)重置一些與環(huán)境相關(guān)的配置文件,這些文件需要在每次合并后進(jìn)行修改。相反,您可以通過以下命令永久地告訴Git不要使用本地文件:
$ git更新-索引-假設(shè)-不變
8.每x秒運(yùn)行一次git拉
通常,合并沖突的原因是您工作的本地倉庫不再反映遠(yuǎn)程倉庫的當(dāng)前狀態(tài)。這就是為什么我們每天早上必須首先執(zhí)行g(shù)it拉。此外,您可以在后臺(tái)通過腳本(或使用GNU Screen)每x秒調(diào)用一次git pull:
$屏幕
$ for((I = 1;i<。=10000;I+= 1));做睡眠X & amp& ampgit pull行
9.將子目錄分成新的倉庫
有時(shí),您可能需要將Git存儲(chǔ)庫中的特定目錄轉(zhuǎn)換成一個(gè)全新的存儲(chǔ)庫。這可以通過git過濾器分支實(shí)現(xiàn):
$ git篩選器-分支-清理-空-子目錄-篩選器主文件
#將主分支篩選到您的目錄,并刪除空提交
重寫48dc 599 c 80 e 20527 ed 902928085 e 7861 E6 B3 CBE 6(89/89)
Ref 'refs/heads/master '已重寫
存儲(chǔ)庫現(xiàn)在包含指定子目錄中的所有文件。雖然之前的所有文件都會(huì)被刪除,但它們?nèi)匀淮嬖谟贕it歷史中。現(xiàn)在,您可以將新的本地倉庫推送到遠(yuǎn)程位置。
10.清理
有時(shí),Git會(huì)提示“未跟蹤的工作樹文件”和“被簽出覆蓋”。造成這種情況的原因有很多。但是,一般來說,我們可以使用以下命令來保持工作樹的整潔,以防止這種情況發(fā)生:
$ git clean -f #移除未跟蹤的文件
$ git clean -fd #刪除未跟蹤的文件/目錄
$ git clean -nfd #列出所有要?jiǎng)h除的文件/目錄
11.將項(xiàng)目文件鍵入tar包,并排除。git目錄
有時(shí),您需要向無法訪問GitHub存儲(chǔ)庫的外部成員提供項(xiàng)目的副本。最簡單的方法是使用tar或來打包所有的項(xiàng)目文件。然而,如果你不小心,隱藏。git目錄將包含在tar文件中,這將導(dǎo)致更大的文件大??;同時(shí),如果其中的文件與接收者自己的Git庫混淆,那就更麻煩了。很容易自動(dòng)排除。tar文件中的git目錄:
$ tar cJf .tar.xz / -排除-vcs
12.找到修飾符
最后,如果出現(xiàn)混亂,一定要想清楚是誰造成的。如果生產(chǎn)服務(wù)器宕機(jī),很容易找到罪魁禍?zhǔn)?只需執(zhí)行g(shù)it責(zé)備。該命令將顯示文件中每一行的作者,并提交哈希以找出該行的最后修改,您還可以看到提交的時(shí)間戳:
$ git責(zé)備
1.《git命令 12個(gè)Git高級(jí)命令》援引自互聯(lián)網(wǎng),旨在傳遞更多網(wǎng)絡(luò)信息知識(shí),僅代表作者本人觀點(diǎn),與本網(wǎng)站無關(guān),侵刪請(qǐng)聯(lián)系頁腳下方聯(lián)系方式。
2.《git命令 12個(gè)Git高級(jí)命令》僅供讀者參考,本網(wǎng)站未對(duì)該內(nèi)容進(jìn)行證實(shí),對(duì)其原創(chuàng)性、真實(shí)性、完整性、及時(shí)性不作任何保證。
3.文章轉(zhuǎn)載時(shí)請(qǐng)保留本站內(nèi)容來源地址,http://f99ss.com/shehui/757032.html