日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Git的状态转换

發(fā)布時間:2023/12/9 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Git的状态转换 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.


? ? ? ???近期公司用Git來管理代碼,用起來是要比svn爽一些。就是剛接觸的時候比較痛苦,特別是那些狀態(tài)(版本號的提交/合并/回退)。差點把我搞暈了。

如今回過頭來總結(jié)一下,就清楚多了。

? ? ? ???就本地倉庫來看。Git能夠分成5個不同的狀態(tài)。能夠通過$ git status來查看。這五個狀態(tài)能夠互相轉(zhuǎn)換。詳細(xì)操作詳見以下的“版本號回退/整合”。

???????? 當(dāng)然。有些文件非常實用。不能刪除又不能提交,如Eclipse的項目文件. project等。

這樣的情況最好就是選擇把他們忽略掉,能夠通過改動根文件夾的.gitignore文件,或者update-index來忽略掉。

status

???????? 顯示Git的版本號管理信息:$ git status

一般分成3個區(qū)域:

a)??Changes to becommitted:暫存區(qū)中有改動的文件,但還沒commit。

b)??Changes notstaged for commit:工作區(qū)中已跟蹤且有改動的文件,但還沒add;

c)??Untrackedfiles:工作區(qū)中未跟蹤文件。未納入Git的管理,每一個新建的文件都屬于這樣的。

? ? ? ???從上面也能看出非常多操作的提示。

[Changes notstaged for commit]和[Untracked files]都能夠通過add把文件加入到[Changes to be committed]。

另外,還能夠使文件消失在Git的監(jiān)控范圍(ignore掉),這樣status就看不到了。

? ? ? ???也能夠使用簡略的顯示模式:$ git status –s

版本號回退 / 整合

? ? ? ???依據(jù)之前工作區(qū)/暫存區(qū)/版本號庫的狀態(tài)跳轉(zhuǎn)圖,可知道回退也是有多種情況。

?

a)?????Untrack區(qū)回退

? ? ? ???Untrack區(qū)存放的是沒有納入Git跟蹤的文件。如新創(chuàng)建的還沒add的文件。一般Git是不會理會這部分文件的,假設(shè)你嫌礙眼,能夠通過clean來清楚他們:

? ? ? ???先通過$ git clean –n查看要會清楚的文件,然后把n去掉,清除。也能夠在后面指定文件名稱,文件-f,文件夾-d

b)?????工作區(qū)回退

???????? $ git checkout -- XXX意思是,把XXX文件在工作區(qū)的改動所有撤銷:先檢查暫存區(qū)有沒有XXX,假設(shè)有則把工作區(qū)的XXX恢復(fù)到暫存區(qū)的狀態(tài);假設(shè)沒有,則到版本號庫取。

? ? ? ???$ git checkout . 撤銷所有工作區(qū)的改動。

這個命令事實上挺危急的。一運(yùn)行記錄都被恢復(fù)了,改動都被丟棄了。也能夠用$ gitcheckout HEAD XXX。回退暫存區(qū)和工作區(qū)。

c)??????暫存區(qū)回退

???????? 面的checkout --僅僅是撤銷工作區(qū)的文件改動,假設(shè)我們想撤銷暫存區(qū)的,就須要使用$ gitreset HEADXXX。它會把暫存區(qū)的記錄清空掉。

我們通過$ git status就能看到Changes to be committed的內(nèi)容都跑到Changes notstaged for commit中去了。

也能夠用$ git checkout HEAD XXX,回退暫存區(qū)和工作區(qū)。

???????? 對于暫存區(qū)來說。這樣的方式和commit都會清空記錄。前者直接清空,后者先往版本號庫寫。再清空。

d)?????版本號庫回退

? ? ? ???假設(shè)你不小心把臟內(nèi)容commit到本地master了,上面兩種方式就無效了。這時候須要回退版本號庫:$ git reset--hardHEAD^

???????? 在Git中,用HEAD表示當(dāng)前版本號。上一個版本號就是HEAD^,上上一個版本號就是HEAD^^。也能夠?qū)懗蒆EAD~2。你能夠用HEAD后面加n個^。或者HEAD~n來表示回退多少個版本號。

???????? 上面是相對版本號的reset,當(dāng)然也能夠指定某一個詳細(xì)版本號。這時候commitID版本號號就大派用場:? $ git reset --hard3628164

3628164僅僅是版本號的前一小部分,Git會幫我們?nèi)プ约褐鲃悠ヅ洹.?dāng)然也有可能找到多條。所以還是寫全比較靠譜。

?

???????? 事實上對于Git來說。HEAD是一個當(dāng)前版本號號的指針,用reset來切換版本號。實際上是調(diào)整HEAD的指向。

???????? 所以。假設(shè)你reset 到HEAD~10。還行又回去原來的HEAD,那么也能夠通過【reset+ 版本號號】的方式切換過去。

???????? 當(dāng)然你要知道相應(yīng)的版本號號,這時候你能夠通過 $ git relog 來查看你的命令歷史和相相應(yīng)的版本號號

?

e)?????遠(yuǎn)程版本號回退

???????? Git是分布式版本號控制系統(tǒng),僅僅要你把內(nèi)容push出去了,那么遠(yuǎn)程庫就會有記錄,你也不能主動改動別人的版本號,這時候就僅僅能覆蓋了。

可是你干過的壞事也就公諸于世了。

?

回退merge

???????? 假設(shè)僅僅是在merge。則能夠直接回退: $ git reset--hard HEAD^

???????? 假設(shè)merge 以后還有別的操作和改動,則能夠使用revert:

$ git revert -m merge線的編號? (從1開始計算,或者merge前的版本號號)

?

★ 版本號整合

???????? 東西已經(jīng)commit了。可是又想改動,怎么辦呢?能夠通過上面“版本號庫回退”的方法來實現(xiàn):resetcommit。可是那樣commit的改動就沒有了,須要又一次改動,工作量大。

???????? 所以除此之外。我們還能夠:

l? 假設(shè)僅僅是合并已commit的版本號:$ git rebase -i HEAD~2

l? 假設(shè)有補(bǔ)充的改動$ git commit --amend

總結(jié)

以上是生活随笔為你收集整理的Git的状态转换的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。