您好,登錄后才能下訂單哦!
這篇文章主要介紹“git stash 命令的應用”,在日常操作中,相信很多人在git stash 命令的應用問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”git stash 命令的應用”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
版本控制是軟件開發人員日常生活中不可分割的一部分。很難想象有哪個團隊在開發軟件時不使用版本控制工具。同樣也很難想象有哪個開發者沒有使用過(或沒有聽說過)Git。在 2018 年 Stackoverflow 開發者調查中,74298 名參與者中有 87.2% 的人 使用 Git 進行版本控制。
Linus Torvalds 在 2005 年創建了 Git 用于開發 Linux 內核。本文將介紹 git stash
命令,并探討一些有用的暫存變更的選項。本文假定你對 Git 概念 有基本的了解,并對工作樹、暫存區和相關命令有良好的理解。
首先要明白為什么在 Git 中暫存變更很重要。假設 Git 沒有暫存變更的命令。當你正在一個有兩個分支(A 和 B)的倉庫上工作時,這兩個分支已經分叉了一段時間,并且有不同的頭。當你正在處理 A 分支的一些文件時,你的團隊要求你修復 B 分支的一個錯誤。你迅速將你的修改保存到 A 分支(但沒有提交),并嘗試用 git checkout B
來簽出 B 分支。Git 會立即中止了這個操作,并拋出錯誤:“你對以下文件的本地修改會被該簽出覆蓋……請在切換分支之前提交你的修改或將它們暫存起來。”
在這種情況下,有幾種方法可以啟用分支切換:
在分支 A 中創建一個提交,提交并推送你的修改,以修復 B 中的錯誤,然后再次簽出 A,并運行 git reset HEAD^
來恢復你的修改。
手動保留不被 Git 跟蹤的文件中的改動。
第二種方法是個餿主意。第一種方法雖然看起來很傳統,但卻不太靈活,因為保存未完成工作的修改會被當作一個檢查點,而不是一個仍在進行中的補丁。這正是設計 git stash
的場景。
git stash
將未提交的改動保存在本地,讓你可以進行修改、切換分支以及其他 Git 操作。然后,當你需要的時候,你可以重新應用這些存儲的改動。暫存是本地范圍的,不會被 git push
推送到遠程。
下面是使用 git stash
時要遵循的順序:
鴻蒙官方戰略合作共建——HarmonyOS技術社區
將修改保存到分支 A。
運行 git stash
。
簽出分支 B。
修正 B 分支的錯誤。
提交并(可選)推送到遠程。
查看分支 A
運行 git stash pop
來取回你的暫存的改動。
git stash
將你對工作目錄的修改存儲在本地(在你的項目的 .git
目錄內,準確的說是 /.git/refs/stash
),并允許你在需要時檢索這些修改。當你需要在不同的上下文之間切換時,它很方便。它允許你保存以后可能需要的更改,是讓你的工作目錄干凈同時保持更改完整的最快方法。
暫存你的變化的最簡單的命令是 git stash
:
$ git stashSaved working directory and index state WIP on master; d7435644 Feat: configure graphql endpoint
默認情況下,git stash
存儲(或稱之為“暫存”)未提交的更改(已暫存和未暫存的文件),并忽略未跟蹤和忽略的文件。通常情況下,你不需要暫存未跟蹤和忽略的文件,但有時它們可能會干擾你在代碼庫中要做的其他事情。
你可以使用附加選項讓 git stash
來處理未跟蹤和忽略的文件:
git stash -u
或 git stash --includ-untracked
儲存未追蹤的文件。
git stash -a
或 git stash --all
儲存未跟蹤的文件和忽略的文件。
要存儲特定的文件,你可以使用 git stash -p
或 git stash -patch
命令:
$ git stash --patchdiff --git a/.gitignore b/.gitignoreindex 32174593..8d81be6e 100644--- a/.gitignore+++ b/.gitignore@@ -3,6 +3,7 @@ # dependencies node_modules/ /.pnp+f,fmfm .pnp.js # testing(1/1) Stash this hunk [y,n,q,a,d,e,?]?
你可以用 git stash list
命令查看你的暫存。暫存是后進先出(LIFO)方式保存的:
$ git stash liststash@{0}: WIP on master: d7435644 Feat: configure graphql endpoint
默認情況下,暫存會顯示在你創建它的分支和提交的頂部,被標記為 WIP
。然而,當你有多個暫存時,這種有限的信息量并沒有幫助,因為很難記住或單獨檢查它們的內容。要為暫存添加描述,可以使用命令 git stash save <description>
:
$ git stash save "remove semi-colon from schema"Saved working directory and index state On master: remove semi-colon from schema $ git stash liststash@{0}: On master: remove semi-colon from schemastash@{1}: WIP on master: d7435644 Feat: configure graphql endpoint
你可以用 git stash apply
和 git stash pop
這兩個命令來重新應用暫存的變更。這兩個命令都會重新應用最新的暫存(即 stash@{0}
)中的改動。apply
會重新應用變更;而 pop
則會將暫存的變更重新應用到工作副本中,并從暫存中刪除。如果你不需要再次重新應用被暫存的更改,則首選 pop
。
你可以通過傳遞標識符作為最后一個參數來選擇你想要彈出或應用的儲藏:
$ git stash pop stash@{1}
或
$ git stash apply stash@{1}
刪除不再需要的暫存是好的習慣。你必須用以下命令手動完成:
git stash clear
通過刪除所有的暫存庫來清空該列表。
git stash drop <stash_id>
從暫存列表中刪除一個特定的暫存。
命令 git stash show <stash_id>
允許你查看一個暫存的差異:
$ git stash show stash@{1}console/console-init/ui/.graphqlrc.yml | 4 +-console/console-init/ui/generated-frontend.ts | 742 +++++++++---------console/console-init/ui/package.json | 2 +-
要獲得更詳細的差異,需要傳遞 --patch
或 -p
標志:
$ git stash show stash@{0} --patchdiff --git a/console/console-init/ui/package.json b/console/console-init/ui/package.jsonindex 755912b97..5b5af1bd6 100644--- a/console/console-init/ui/package.json+++ b/console/console-init/ui/package.json@@ -1,5 +1,5 @@ {- "name": "my-usepatternfly",+ "name": "my-usepatternfly-2", "version": "0.1.0", "private": true, "proxy": "http://localhost:4000"diff --git a/console/console-init/ui/src/AppNavHeader.tsx b/console/console-init/ui/src/AppNavHeader.tsxindex a4764d2f3..da72b7e2b 100644--- a/console/console-init/ui/src/AppNavHeader.tsx+++ b/console/console-init/ui/src/AppNavHeader.tsx@@ -9,8 +9,8 @@ import { css } from "@patternfly/react-styles"; interface IAppNavHeaderProps extends PageHeaderProps {- toolbar?: React.ReactNode;- avatar?: React.ReactNode;+ toolbar?: React.ReactNode;+ avatar?: React.ReactNode;} export class AppNavHeader extends React.Component<IAppNavHeaderProps>{ render()
你可能會遇到這樣的情況:一個分支和你的暫存中的變更有分歧,當你試圖重新應用暫存時,會造成沖突。一個簡單的解決方法是使用 git stash branch <new_branch_name stash_id>
命令,它將根據創建暫存時的提交創建一個新分支,并將暫存中的修改彈出:
$ git stash branch test_2 stash@{0}Switched to a new branch 'test_2'On branch test_2Changes not staged for commit:(use "git add <file>..." to update what will be committed)(use "git restore <file>..." to discard changes in working directory)modified: .graphqlrc.ymlmodified: generated-frontend.tsmodified: package.jsonno changes added to commit (use "git add" and/or "git commit -a")Dropped stash@{0} (fe4bf8f79175b8fbd3df3c4558249834ecb75cd1)
在極少數情況下,你可能需要創建一個暫存,同時保持暫存參考日志(reflog
)的完整性。這些情況可能出現在你需要一個腳本作為一個實現細節來暫存的時候。這可以通過 git stash create
命令來實現;它創建了一個暫存條目,并返回它的對象名,而不將其推送到暫存參考日志中:
$ git stash create "sample stash"63a711cd3c7f8047662007490723e26ae9d4acf9
有時,你可能會決定將通過 git stash create
創建的暫存條目推送到暫存參考日志:
$ git stash store -m "sample stash testing.." "63a711cd3c7f8047662007490723e26ae9d4acf9"$ git stash liststash @{0}: sample stash testing..
到此,關于“git stash 命令的應用”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。