閱讀本文大概需要 8 分鐘。

官方解釋:當您想記錄工作目錄和索引的當前狀態,但又想返回一個干凈的工作目錄時,請使用git stash。該命令將保存本地修改,并恢復工作目錄以匹配頭部提交。

git?stash
復制代碼
git?stash?apply
復制代碼
#?保存當前未commit的代碼
git?stash
#?保存當前未commit的代碼并添加備注
git?stash?save?"備注的內容"
#?列出stash的所有記錄
git?stash?list
#?刪除stash的所有記錄
git?stash?clear
#?應用最近一次的stash
git?stash?apply
#?應用最近一次的stash,隨后刪除該記錄
git?stash?pop
#?刪除最近的一次stash
git?stash?drop
復制代碼
$?git?stash?list
stash@{0}:?WIP?on?...
stash@{1}:?WIP?on?...
stash@{2}:?On?...
復制代碼
$?git?stash?apply?stash@{1}
復制代碼




完全不接觸索引文件或工作樹(但會像所有模式一樣,將頭部重置為)。這使您的所有更改的文件更改為“要提交的更改”。
git reset \--hard?會被提及的比較多,它能讓 commit 記錄強制回溯到某一個節點。而?git reset \--soft?的作用正如其名,--soft?(柔軟的) 除了回溯節點外,還會保留節點的修改內容。reset \--soft?之后,你只需要:#?恢復最近一次?commit
git?reset?--soft?HEAD^
復制代碼
reset \--soft?相當于后悔藥,給你重新改過的機會。對于上面的場景,就可以再次修改重新提交,保持干凈的 commit 記錄。git push \-f?來覆蓋被 reset 的 commit。reset \--soft?指定 commit 號時,會將該 commit 到最近一次 commit 的所有修改內容全部恢復,而不是只針對該 commit。
git?reset?--soft?1a900ac29eba73ce817bf959f82ffcb0bfa38f75
復制代碼

給定一個或多個現有提交,應用每個提交引入的更改,為每個提交記錄一個新的提交。這需要您的工作樹清潔(沒有從頭提交的修改)。


cherry-pick?把 b 應用到當前分支。
cherry-pick?多個 commit 要如何操作。git?cherry-pick?commit1?commit2
復制代碼
git?cherry-pick?commit1^..commit2
復制代碼
cherry-pick?多個commit時,可能會遇到代碼沖突,這時?cherry-pick?會停下來,讓用戶決定如何繼續操作。下面看看怎么解決這種場景。

cherry-pick。可以看到 c 被成功復制,當進行到 d 時,發現代碼沖突,cherry-pick?中斷了。這時需要解決代碼沖突,重新提交到暫存區。
cherry-pick \--continue?讓?cherry-pick?繼續進行下去。最后 e 也被復制進來,整個流程就完成了。cherry-pick:gits?cherry-pick?--abort
復制代碼
cherry-pick:git?cherry-pick?--quit
復制代碼
cherry-pick?成功的 commit,并退出?cherry-pick?流程。給定一個或多個現有提交,恢復相關提交引入的更改,并記錄一些這些更改的新提交。這就要求你的工作樹是干凈的(沒有來自頭部的修改)。

git?revert?21dcd937fe555f58841b17466a99118deb489212
復制代碼




通常無法 revert 合并,因為您不知道合并的哪一側應被視為主線。此選項指定主線的父編號(從1開始),并允許 revert 反轉相對于指定父編號的更改
git?revert?-m?1?
復制代碼


此命令管理重錄中記錄的信息。
reset \--soft?是后悔藥,那 reflog 就是強力后悔藥。它記錄了所有的 commit 操作記錄,便于錯誤操作后找回記錄。reset \--hard,結果緊張不小心記錯了 commitHash,reset 過頭,把同事的 commit 搞沒了。沒辦法,reset \--hard?是強制回退的,找不到 commitHash 了,只能讓同事從本地分支再推一次(同事瞬間拳頭就硬了,怎么又是你)。于是,你的技術形象又一落千丈。


git reflog?查看歷史記錄,把錯誤提交的那次 commitHash 記下。
git?config?--global?alias.ps?push
復制代碼
vim?~/.gitconfig
復制代碼
[alias]?
????????co?=?checkout
????????ps?=?push
????????pl?=?pull
????????mer?=?merge?--no-ff
????????cp?=?cherry-pick
復制代碼
#?等同于?git?cherry-pick?
git?cp?
復制代碼
stash:存儲臨時代碼。reset --soft:軟回溯,回退 commit 的同時保留修改內容。cherry-pick:復制 commit。revert:撤銷 commit 的修改內容。reflog:記錄了 commit 的歷史操作。—— EOF —— 你好,我是飛宇,本碩均于某中流985 CS就讀,先后于百度搜索以及字節跳動電商等部門擔任Linux C/C++后端研發工程師。
最近跟朋友一起開發了一個新的網站:編程資源網,已經收錄了不少資源(附贈下載地址),如果屏幕前的靚仔/女想要學習編程找不到合適資源的話,不妨來我們的網站看看,歡迎掃碼下方二維碼白嫖~
同時,我也是知乎博主@韓飛宇,日常分享C/C++、計算機學習經驗、工作體會,歡迎點擊此處查看我以前的學習筆記&經驗&分享的資源。
我組建了一些社群一起交流,群里有大牛也有小白,如果你有意可以一起進群交流。
歡迎你添加我的微信,我拉你進技術交流群。此外,我也會經常在微信上分享一些計算機學習經驗以及工作體驗,還有一些內推機會。
加個微信,打開另一扇窗