成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

那些你應該知道的,但是你一定不知道的 Git 騷操作

開源
如果兩個地方代碼不沖突的話還好,可以直接在本分支修改然后提交,但是當遇到需要修改同一個類文件的時候就比較麻煩了。這種情況如何優雅的處理呢?讓阿粉來帶你了解 Git 的高級騷操作!

Hello 大家好,我是阿粉,作為團隊中的主程阿粉經常參與很多核心功能的開發,而且很多時候一個需求沒做好中間又插入新的緊急的需求或者 bug 修復,每次遇到這種情況,如果兩個地方代碼不沖突的話還好,可以直接在本分支修改然后提交,但是當遇到需要修改同一個類文件的時候就比較麻煩了。這種情況如何優雅的處理呢?讓阿粉來帶你了解 Git 的高級騷操作!

[[335438]]

Git stash

git stash save messge 將本分支的修改暫存起來。

在詳細介紹這個功能之前我們先說一下 Git 的幾個空間,如下圖所示,圖片來自官網

 

工作區

工作區就是我們看到的文件夾,我們在項目當中任何創建,修改的文件都存放在工作區中。我們通過 git clone 的時候就是直接把 git 倉庫里面的文件下載到本地形成一個項目的工作區。在項目目錄下我們可以使用命令git status 查看當前分支修改的文件列表。如下圖所示,會顯示出當前工作區修改了哪些文件,哪些文件沒有被加入 git 管理,我們一覽無余。

 

暫存區

當我們使用命令git add xx 命令的時候就把 xx 文件放入的暫存區,如果全部文件都需要放入的話可以使用git add . 將所有修改的文件都加入暫存區,這里的文件是為了下一步提交做準備的。

Git 本地倉庫

當文件被上一步加入到暫存區的時候,下一步我們使用命令git commit -m message 即可將文件進行提交到本地倉庫,然后在執行git push origin branch 命令將修改推送到遠程倉庫。

重點來了!

Git stash

上面的步驟都是正常的步驟,但是如果遇到前面阿粉說的這種情況,代碼寫到一半需要修改一個 bug,但是這個時候也不想提交未寫完的代碼,那該怎么辦呢?這個時候 git stash 命令就能幫助你了。

我們在當前修改代碼的分支里面先執行一下git status 看下本地的修改,然后再執行git stash save 'message' 將本地修改暫存起來。如下圖所示,我們可以看到一開始顯示有四個新文件,在執行了git stash 命令后再執行git status 命令顯示沒有修改了。

 

image-20200725140352378

這個時候我們就可以放心大膽的去修復 bug,不管是在本分支,還是創建新的分支都沒有問題。假設我們花了三五分鐘把 bug 修復了,現在想繼續寫原來的需求怎么辦呢?很簡單,我們只要在暫存區將我們的代碼恢復回來就好了。使用命令git stash pop 直接將最近一次 stash 的代碼 pop 出來,也可以通過命令git stash list 找到對應的記錄對應的記錄,采用 git stash apply xxx 命令也行。不過這里建議不要暫存太多,就放一個就好,直接使用 pop 彈出即可。如下圖所示:

 

可以看到我們修改的代碼又回來了!是不是很神奇!

找回清除的 stash 數據

再來點刺激的,既然我們能將代碼暫存起來,當然也能將暫存區的數據刪除,萬一一個不小心手抖,將暫存區的數據刪掉了怎么辦?不要以為不可能,阿粉就干過!畢竟手速太快,一行命令錯了就沒了。刪除的命令我這里不說,大家想知道的自己查,阿粉只說刪除了過后怎么解決。刪除過后千萬不要慌,我們執行下面命令找到對應的記錄,然后應用回來就好。git log --graph --oneline --decorate $( git fsck --no-reflog | awk '/dangling commit/ {print $3}') 找到對應的 id,然后git stash apply id 。如下圖所示:

 

仔細看上圖的命令執行過程,會發現我們將刪除的代碼又找回來了,爽歪歪啊。(刪除的命令假裝沒有看到,然后提醒大家不管是提交還是暫存代碼備注信息都要寫清楚,不要每次都更新代碼,提交代碼,update,這樣的話就算找到丟失列表,你也不知道要恢復哪一個)。上面截圖中為了演示多次使用了如下命令

  • git status :查看工作區文件狀態
  • git stash save 'messag' : 暫存工作區的文件
  • git stash list: 查看所有暫存列表
  • git stash apply id: 恢復暫存的文件

idea 對應的功能

任何強大的命令在 IDE 里面都會有對應的功能,同樣的git stash 的功能在 IDEA 里面也有可視化的操作,如下圖所示:

 

在這里我們可以 stash 相關代碼,也可以 apply 相關的代碼,操作起來簡單方便。恢復的時候找到對應的記錄,apply 一下就可以了,同樣的也可以進行 drop 和 clear。apply 過后可以 drop 掉對應的 stash,clear 命令謹慎操作,誤操作過后,參考上面命令進行恢復。

 

Cherry-pick

下面介紹另一個強大的功能,還是上面的場景,我們拉取新的分支進行 bug 的修復,那么同樣的 bug 在當前分支肯定也是存在的,按照常理來說我們也需要在當前分支進行同樣的代碼修改,不然后續提交過后,bug 會依然存在。那么問題來了,同樣的代碼不想寫兩遍怎么辦?這個時候就可以使用 git 的 cherry-pick 命令,將之前在其他分支的修改重放到當前分支。

來全場跟著阿粉的步伐,我們整齊劃一模擬一下這個場景

假設我們當前的需求代碼開發在分支 master 上面(當然正常的代碼開發肯定是在 dev 分支,阿粉這里是以寫文檔的一個項目所以直接在 master 上面了,后面提到的測試環境也只是虛擬出來的),這個時候測試環境有個緊急 bug 需求修復,本地的代碼沒寫完不想提交,通過上面的 stash 命令一頓操作,暫存的相關代碼,然后我們從測試環境拉取新的分支 bug01 ,將相關的 bug 修復了,并提交了代碼。阿粉這里模擬在 bug01 分支上面創建一個新文件,然后使用該命令放到 master 分支里面。

使用git checkout -b bug01 創建新的分支,增加,修改并提交 test-cherry-pick.md 文件,如下圖所示,復制提交過后的 ID,在這里是a755c56,然后我們使用git checkout master切換到 master 分支,這個時候 master 分支的 test-cherry-pick.md 文件并沒有在 bug01 分支的修改。下面我們使用該命令看下效果,

 

通過上面的操作,可以看到 master 分支已經有了在 bug01 分支上面修改的代碼。爽歪歪啊!不得不說這個功能太強大了。到這里阿粉不得不致敬一下林納斯大佬。

小結一下cherry-pick 命令主要分兩步,第一步在其他分支上修改并提交代碼,第二步切換到同樣需要修改的分支,執行命令從而達到效果。同樣的這個功能在 idea 中也有可視化的操作,只要在需要修改的分支,點擊該圖標就好了。

 

關聯遠程倉庫

常規的操作都是在遠程服務器上面已經有了一個倉庫,我們通過git clone url 拉取相關代碼,但是有時候會是我們在本地創建了一個文件夾,并且初始化成為 git 倉庫了,這個時候需要推送到遠程服務器上面,這種情況我們現在遠程服務器上創建倉庫,然后使用命令git remote add origin git@server-name:path/repo-name.git 推送到服務器上即可。

其他常用 git 命令

  • git branch: 查看分支列表;
  • git push origin master: 推送代碼到遠程服務器;
  • git checkout -b brandName或者新版本 git git switch -c brandName 創建并切換到新分支;
  • git merge branchName : 合并某分支代碼到當前分支;
  • git log: 查看提交記錄;

總結

 

Git 作為代碼版本管理工具已經成為主流了,全球最大的同性網站 GitHub 也是根據 Git 而來的,這么好的一個工具強烈推薦大家都進行使用,對于一些還是使用 svn,csv 的伙伴真的需要換一下了。Git 的出現其實是一個偶然,官網有它的介紹,喜歡的朋友可以去看看,廖雪峰老師寫過一個 Git 的教程,很不錯,阿粉的這些騷操作也是在廖老師的網站上看到的,大家可以去深入學習一下。

 

責任編輯:武曉燕 來源: Java極客技術
相關推薦

2020-04-27 10:34:23

HTTPDNSDNS網絡協議

2015-06-19 13:54:49

2015-10-21 11:09:08

Xcode7調試神技

2014-03-12 09:23:06

DevOps團隊合作

2020-06-12 09:20:33

前端Blob字符串

2020-07-28 08:26:34

WebSocket瀏覽器

2022-05-30 08:18:35

門面模式子系統對象

2015-10-30 09:56:10

WiFiWiFi技術傳感

2018-11-25 10:08:44

阿里巴巴技術開源

2021-11-11 06:57:00

架構

2010-08-23 09:56:09

Java性能監控

2011-09-15 17:10:41

2021-02-01 23:23:39

FiddlerCharlesWeb

2022-10-13 11:48:37

Web共享機制操作系統

2009-12-10 09:37:43

2014-07-29 16:21:57

Git

2014-12-02 10:38:41

5G

2011-10-27 14:55:22

公有云私有云云計算

2013-09-12 14:24:31

2025-03-17 00:45:00

JavaScriptAPI頁面
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久久久国产一区二区三区 | v片网站| 欧美成人h版在线观看 | 亚洲一区二区在线播放 | 成人午夜电影在线观看 | 日韩久久久一区二区 | 欧美区日韩区 | 中文字幕在线二区 | 亚洲一区二区免费 | 欧美a级网站 | 91免费看片 | 天堂在线中文 | 国产夜恋视频在线观看 | a精品视频| 日韩精品在线视频 | 欧美日韩亚洲在线 | 国产色| 精品视频一区二区三区在线观看 | 91视频久久 | 成人在线观看网址 | 天堂在线中文 | 中文在线一区二区 | 日韩亚洲视频 | 九色国产| www.国产日本 | 日韩在线观看一区 | 日本成人中文字幕 | 欧美精品一区二区在线观看 | 久久69精品久久久久久久电影好 | 成人在线视频免费播放 | 亚洲视频中文字幕 | 黄色在线免费看 | 一二三在线视频 | 日本久久久久久 | 一级黄色大片 | 久久精品国产一区二区三区不卡 | 亚洲人成网站777色婷婷 | 精久久久久| 久久久成人精品 | aaaa日韩 | 久久久久久久一区二区 |