亚洲精品久久久久久第一页-人妻少妇精彩视品一区二区三区-91国产自拍免费视频-免费一级a在线播放视频正片-少妇天天日天天射天天爽-国产大屁股喷水视频在线观看-操美女骚穴抽插性爱视频-亚洲 欧美 中文字幕 丝袜-成人免费无码片在线观看

git更新代碼到本地命令使用 git取消本地修改更新

Git作為一個(gè)版本管理系統(tǒng)(VCS)最基本的功能就是保證所有操作的追蹤和回退 。但是,很多初學(xué)者會(huì)被各種各樣的命令,各種參數(shù)給弄蒙了 , 加上命令行提示基本都是英文,所以就跟瞎子一樣,生怕一不小心把這弄丟了,一不小心把庫(kù)弄壞了,pull不了 , 也push不了,不知道怎么辦了 。實(shí)際上git中任何操作,包括破壞性、刪除性的操作都可以可以回退 。本文中蟲蟲就帶大家了解Git中各種撤消回退大法,等你熟悉了這些方法,可以讓你放開手一心只搞代碼,Git只是幫你插上翅膀,讓你在代碼庫(kù)中自由的翱翔 。
分支策略(工作流)Git是一個(gè)去中心化的分布式版本控制系統(tǒng),這意味著代碼倉(cāng)的版本控制不是統(tǒng)一的,各個(gè)客戶端都是一個(gè)完整的倉(cāng)庫(kù),然后互相通過(guò)Git服務(wù)器基于commits進(jìn)行變更的交換 。為了避免這種多來(lái)源的變更導(dǎo)致混亂,開發(fā)人員必須遵循各自開發(fā)組工作流程(如果沒(méi)有的話,要制定一個(gè)),該流程取決于團(tuán)隊(duì)內(nèi)部工作流程:如何撤消、如何更改某些變化?如何提交PR/MR?如何審核和合并分支? 。

git更新代碼到本地命令使用 git取消本地修改更新

文章插圖
有三個(gè)典型的協(xié)作流程:Git flow,Github flow和 GitLab flow 。利用可以在開發(fā)相同功能和無(wú)縫協(xié)作的情況下解決開發(fā)人員沖突和開發(fā)平衡 。
Git flow由Vincent Driessen提出,主要是建立兩個(gè)長(zhǎng)期分支Master和Devlop開發(fā)分支,同時(shí)又臨時(shí)性的功能分支、補(bǔ)丁分支和預(yù)發(fā)布分支 。版本衍變流程圖如下:
git更新代碼到本地命令使用 git取消本地修改更新

文章插圖
GitHub flowGithub flow 是Github提出的相比較Git flow簡(jiǎn)配版,是 Github網(wǎng)站使用的工作流程 。
git更新代碼到本地命令使用 git取消本地修改更新

文章插圖
該流程簡(jiǎn)練,主要為配合CI/CD(持續(xù)集成和發(fā)布),實(shí)現(xiàn)快速迭代 。
Gitlab flowGitlab flow結(jié)合了上面兩種流的優(yōu)點(diǎn),是gitlab產(chǎn)品使用的方法 。Gitlab flow以master分支為基礎(chǔ),只有master接受的commit才可以合并得到其他分支
git更新代碼到本地命令使用 git取消本地修改更新

文章插圖
在該流程下,版本發(fā)布也是基于master分支來(lái)推進(jìn) 。
git更新代碼到本地命令使用 git取消本地修改更新

文章插圖
撤消本地的變化在你沒(méi)有執(zhí)行push變化推送到遠(yuǎn)程庫(kù)(Git服務(wù)器)之前,所有變化只會(huì)影響你自己,不會(huì)影響其他人 。所以你可以隨意處置這些變化,就算全部丟了,也可以通過(guò)clone重新復(fù)制一份 , 你所丟失的只不過(guò)是本地一些變化,包括未push的歷史記錄(已經(jīng)commit未push),本地索引區(qū)staging(已經(jīng)add未commit)和工作區(qū)的變化(未add),以及我們?cè)谥暗奈恼隆蹲屇闾岣吖ぷ餍实腉it的技巧 》中提到的四種文件狀態(tài):已暫存 (Staged),已修改(Modified),未修改(Unmodified)以及未跟蹤(Untracked) 。
git更新代碼到本地命令使用 git取消本地修改更新

文章插圖
對(duì)于不同的階段的變化,撤銷的方法也各不相同:未分級(jí)的本地更改(在您提交之前)
未commit的工作區(qū)文件變化對(duì)已經(jīng)更改但還沒(méi)有添加到暫存區(qū)的變化時(shí),Git本身提供一種解決方案來(lái)撤銷對(duì)某個(gè)文件的更改 。假如我們我們編輯了一個(gè)文件vim <file>,沒(méi)有添加的暫存區(qū),文件應(yīng)為unstaged文件(如果文件已創(chuàng)建,未跟蹤Untracked) ??梢酝ㄟ^(guò)git statu命令查看文件狀態(tài):
git更新代碼到本地命令使用 git取消本地修改更新

文章插圖
在該狀態(tài)下,你有三種方法選擇撤銷這個(gè)更改:
放棄所有本地更改,但保存它們以便以后重復(fù)使用git stash。
撤銷本地變化(永久丟棄)git checkout — <file>。
永久丟棄對(duì)所有文件的所有本地更改 git reset –hard。
快速保存本地更改(git stash)你在開發(fā)正當(dāng)中,接到一個(gè)緊急bug修復(fù)任務(wù) 。由于你功能沒(méi)完全寫,你沒(méi)法馬上就commit,但你需要換到另一個(gè)分支 , 以完成緊急的修復(fù) 。這時(shí)候你就需要祭出神器git stash來(lái)保存你時(shí)下的工作,切換到需要修復(fù)的分支,修復(fù) , commit,push 。再用git stash pop回到你的工作狀態(tài),繼續(xù)寫你的代碼 。
git stash 還支持如下其他操作:
git stash save xxx :可以在保存時(shí)添加備注信息(類似于commit信息),這這樣對(duì)于多個(gè)stash管理和識(shí)別將更加方便,設(shè)定備注信息后 , 可以在list中顯示這個(gè)信息 。
git更新代碼到本地命令使用 git取消本地修改更新

文章插圖
git stash list :列出所有以前暫儲(chǔ)過(guò)的工作狀態(tài)(支持多次的git stash暫存) 。
git stash pop :用戶回到上一個(gè)存儲(chǔ)的工作狀態(tài)并將其從stash存儲(chǔ)列表中刪除(類似于數(shù)組的pop的操作) 。
git更新代碼到本地命令使用 git取消本地修改更新

文章插圖
git stash apply xxx : 回到指定的一個(gè)stach存儲(chǔ)列表的工作狀態(tài) , 但將不會(huì)從stashed列表中刪除 。
git更新代碼到本地命令使用 git取消本地修改更新

文章插圖
commit之前分階段的本地更改假設(shè)已經(jīng)添加了一些文件到暫存區(qū),但是你不想在該該次commit中包含他們 。但是又不想撤銷對(duì)這些文件的修改 , 只是想將他們從暫存區(qū)移除 。當(dāng)然如果你想撤銷這些變化的話,和上一部分提到那樣可使用git reset –hard或者git stash 。讓我們回到我們示例倉(cāng)庫(kù):
首先,用git status 看看目前的狀態(tài):
git更新代碼到本地命令使用 git取消本地修改更新

文章插圖
我要要從暫存去移除一些文件,比如我們移除four.txt:
git reset HEAD four.txt
結(jié)果,被移除的文件處于未跟蹤狀態(tài):
git更新代碼到本地命令使用 git取消本地修改更新

文章插圖
如果不添加文件,則會(huì)從暫存去移除所有的文件,但是文件修改都保存,都位于工作區(qū) 。
git rest
git更新代碼到本地命令使用 git取消本地修改更新

文章插圖
可以使用git stash 保存所有工作區(qū)文件變化,以及添加到暫存區(qū)的文件狀態(tài),這是工作區(qū)會(huì)回到上一次commit狀態(tài)的文件狀態(tài) 。但是可以之后隨時(shí)返回到該工作狀態(tài) 。
如果要丟棄所有文件變化,和暫存區(qū)的狀態(tài) , 則使用git reset –hard 。結(jié)果和上一個(gè)方法類似 。但是沒(méi)有stash的暫存項(xiàng),也無(wú)法在會(huì)到該工作狀態(tài) 。
commit的本地變更c(diǎn)ommit提交后,版本控制系統(tǒng)就會(huì)正式記錄該變化,以git對(duì)象的形式保存修改,進(jìn)入歷史存檔,可以push到遠(yuǎn)程倉(cāng),并和其他人做版本交換 。在未push之前,該的修改是仍未公開(無(wú)法與其他開發(fā)者交換) 。所以,做撤消操作不會(huì)影響別人 , 我們可以隨意操作 。一旦代碼push到遠(yuǎn)程倉(cāng),我們的做撤銷操作就要格外注意了,盡量不要影響,不然整改團(tuán)隊(duì)都不能pull,push,別人會(huì)拿刀砍你,釀出血案的 。
git更新代碼到本地命令使用 git取消本地修改更新

文章插圖
不修改歷史(revert)在實(shí)際的使用中,有可能有些預(yù)先的commit可能最終不是預(yù)期要push到遠(yuǎn)程倉(cāng)的,或者是一個(gè)有bug的commit 。這是我們可以可以簡(jiǎn)單地用git revert commit-id撤銷這個(gè)commit 。此命令會(huì)反轉(zhuǎn)該commit中的增加的git對(duì)象,并刪除commit , 它不會(huì)修改git歷史記錄 。
假設(shè)有以下順序提交的A,B , C , D,E提交:A-B-C-D-E,現(xiàn)在我們想要撤銷有問(wèn)題代碼的到B的commit 。至于如何判別B是否bug問(wèn)題,蟲蟲之前的文章中有提到過(guò)就是使用git bisect,這兒就不在詳述,可以關(guān)注蟲蟲 , 瀏覽以前的文章 。git bisect A..??E
bisect會(huì)我們通過(guò)二分法reset到A到E之間的一個(gè)commit , 我們做測(cè)試,然后判斷代碼是否正常,根據(jù)這個(gè)狀態(tài)來(lái)迭代知道找到問(wèn)題的commit B 。
撤銷B的commit引入的狀態(tài) , 我們使用:
git revert B-commit-id
如果僅僅是撤銷部分文件或者目錄,但是保存在暫存區(qū),則用:
git checkout B-commit-id <file>
如果要撤銷B的commit狀態(tài) , 并且暫存區(qū)移除則使用rest
git reset B-commit-i <file>
還有一個(gè)方法,我們也可以選用,那就是創(chuàng)建一個(gè)新分支,從有問(wèn)題的地方開一個(gè)bug分支 。比如A-B-C-D歷史記錄 , 現(xiàn)在發(fā)現(xiàn)C和D有問(wèn)題 。這是除了我們重置到B commit,并強(qiáng)推 F(這會(huì)導(dǎo)致與其他開發(fā)人員沖突) 。這是新的歷史揭露為A-B-F,大家都必須強(qiáng)制reset -f 才跟上你的push 。另一個(gè)更可取得方法是,不改變當(dāng)前的歷史,從B開始新創(chuàng)建一個(gè)新的分支,并在該分支commit F 。
git checkout B-commit-i
git checkout -b new-path-of-feature
git commit -a
git更新代碼到本地命令使用 git取消本地修改更新

文章插圖
修改commit歷史(rebase)還有一個(gè)常用的修改的命令就死git rebase 。他也提供-i選項(xiàng)實(shí)現(xiàn)交互式的操作 。在-i模式下,可以打開一個(gè)編輯器你在該編輯器中使用一些指令來(lái)操作commit歷史:
reword commit信息還,編輯最近一次commit的消息 。(可以用命令行g(shù)it commit –amend)
edit 編輯提交內(nèi)容(提交引入的修改)和消息
squash 將多個(gè)提交合并為一個(gè)提交,并且提供自定義或整合的commit消息
drop 刪除commit
我們來(lái)舉個(gè)實(shí)例 。假想現(xiàn)在我們的倉(cāng)庫(kù)歷史為all-hello-new,要?jiǎng)h除hello 。
rebase當(dāng)前提交范圍:
git rebase -i fbaf080184ed
命令打開你默認(rèn)的編輯器,你編輯其中只需寫下指令drop New,但你保留所有其他pick提交的默認(rèn)內(nèi)容 。
git更新代碼到本地命令使用 git取消本地修改更新

文章插圖
保存并退出編輯會(huì)自動(dòng)執(zhí)行rebase 。結(jié)果:
git更新代碼到本地命令使用 git取消本地修改更新

文章插圖
如果你想修改commit hello中引入的東西,類似的方法:
git rebase -i fbaf08018
命令打開編輯器,您可以在提交前編寫edit new,但保留所有其他pick提交的默認(rèn)內(nèi)容 。
git更新代碼到本地命令使用 git取消本地修改更新

文章插圖
保存并退出編輯器執(zhí)行 , 進(jìn)行編輯和提交更改:
git commit -a
反悔你的撤消有時(shí)你撤銷了一些修改,但是又發(fā)現(xiàn)這些修改還是有用的,又想反悔 。通過(guò)命令git reflog我們可以追回所有已經(jīng)分離的(git log不顯示)commit-id 。
要查看存儲(chǔ)庫(kù)歷史記錄并跟蹤舊提交,可以使用以下命令:
git reflog show
git更新代碼到本地命令使用 git取消本地修改更新

文章插圖
輸出顯示存儲(chǔ)庫(kù)的歷史記錄 。第一列為commit-id,其他列HEAD旁邊的數(shù)字表示之前commit了多少次,可以當(dāng)做下表來(lái)做引用該次的commit , 在git命令(commit,rebase,merge,…)中當(dāng)做參數(shù)代替commit-id使用,最后一列該記錄的描述 。
撤銷遠(yuǎn)程倉(cāng)中的變更不修改commit歷史撤消遠(yuǎn)程變更這操作和修改本地提交的本地不修改歷史撤銷更改大致相同 。它是撤消任何遠(yuǎn)程庫(kù)上或者公共分支的commit的首選方法 。對(duì)這種需求 , 最好的的方法是使用分支,分支使能夠在新開發(fā)中引入現(xiàn)有修改(通過(guò)合并)和還可以提供了明確的commit時(shí)間序列和開發(fā)結(jié)構(gòu) 。
git更新代碼到本地命令使用 git取消本地修改更新

文章插圖
要撤銷某些commit-id中引入的更改,我們可以通過(guò)revert簡(jiǎn)單地創(chuàng)建的commit中恢復(fù)commit-id(置換添加和刪除),比如上圖的需求刪除B,我們可以通過(guò)revert
git revert B-commit-id
或創(chuàng)建一個(gè)新分支:
git checkout B-commit-id
git checkout -b new-path-of-feature
修改歷史記錄的撤消遠(yuǎn)程更改
git更新代碼到本地命令使用 git取消本地修改更新

文章插圖
當(dāng)你想隱藏遠(yuǎn)程倉(cāng)中有些敏感新的信息時(shí)候,則必須要用該方法(一般不要用,不然結(jié)果見(jiàn)第三部的圖) 。比如倉(cāng)庫(kù)中包含了token,密碼,SSH私鑰等 。這樣做的會(huì)讓你失去了真正的commit 歷史進(jìn)程 。還要注意的是,即便是修改了歷史記錄,commit被分離(detach了),依然可以通過(guò)commit-id訪問(wèn)(git沒(méi)有執(zhí)行自動(dòng)清理分離commit之前) 。還有就是別人如果還沒(méi)有同步該修改,他客戶端里的信息也是完全的 。
修改歷史記錄確定好要修改的內(nèi)容之后(歷史記錄的范圍或范圍舊提交),使用git rebase -i commit-id 。然后,此命令將顯示所有提交當(dāng)前版本選擇commit-id并允許修改,壓縮 , 刪除提交 。
git rebase -i commit1-id..commit3-id
然后根據(jù)我們第三部分提到指令做修改 。
修改后,通過(guò)git push -f強(qiáng)制推送到遠(yuǎn)程庫(kù)生效(慎用慎用慎用?。?。
篩選要?jiǎng)h除的敏感信息文件(git filter-branch)Git還允許從過(guò)去的提交中刪除敏感信息 。我們可以使用行g(shù)it filter-branch , 它允許我們對(duì)rebase歷史記錄做過(guò)濾 。這個(gè)命令也是通過(guò)rebase修改歷史記錄,比如要?jiǎng)h除某些歷史記錄歷史文件一共使用:
git filter-branch –tree-filter ‘rm filename’ HEAD
【git更新代碼到本地命令使用 git取消本地修改更新】注意git filter-branch命令在大型庫(kù)上可會(huì)很慢 。還有一些相對(duì)較快的,讓我們篩選特定文件的第三方工具,比如BFG Repo-cleaner 。


    以上關(guān)于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關(guān)的問(wèn)題,請(qǐng)您及時(shí)就醫(yī)或請(qǐng)專業(yè)人士給予相關(guān)指導(dǎo)!

    「愛(ài)刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對(duì)您有所幫助: