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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Git的状态转换

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


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

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

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

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

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

status

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

一般分成3個區域:

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

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

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

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

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

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

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

版本號回退 / 整合

? ? ? ???依據之前工作區/暫存區/版本號庫的狀態跳轉圖,可知道回退也是有多種情況。

?

a)?????Untrack區回退

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

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

b)?????工作區回退

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

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

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

c)??????暫存區回退

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

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

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

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

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

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

???????? 在Git中,用HEAD表示當前版本號。上一個版本號就是HEAD^,上上一個版本號就是HEAD^^。也能夠寫成HEAD~2。你能夠用HEAD后面加n個^。或者HEAD~n來表示回退多少個版本號。

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

3628164僅僅是版本號的前一小部分,Git會幫我們去自己主動匹配。當然也有可能找到多條。所以還是寫全比較靠譜。

?

???????? 事實上對于Git來說。HEAD是一個當前版本號號的指針,用reset來切換版本號。實際上是調整HEAD的指向。

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

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

?

e)?????遠程版本號回退

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

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

?

回退merge

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

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

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

?

★ 版本號整合

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

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

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

l? 假設有補充的改動$ git commit --amend

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。