Git stash push 备份以后的批改

当咱们应用 git 进行代码治理时, 有一个很好的劣势就是能够应用 git 命令长期备份咱们批改的文件, 并在适时的时候进行还原.

在咱们批改一项性能时, 须要长期插入另外一个性能进行批改时, 咱们须要备份之前的批改, 并把本地的代码进行还原后进行新的性能批改, 这时咱们能够应用 git stash 命令无缝的实现.

git stash push ( 可简写为 git stash ) 命令能够备份咱们当前工作区 ( cache ) 和缓存区 ( index 或 stage ), 当备份胜利后, 会革除掉工作区和缓存区的改变( 默认不带相干参数时 ). 当咱们须要还原时, 应用 git stash apply 或 git stash pop 命令进行还原.
对于 stash push/pop/apply 命令的更多参数的应用, 能够参照 官网文档.

示例

test.sh 文件被批改后, 咱们能够看到工作区存在变动的文件.

➜  stash-git git:(master) ✗ git statusOn branch masterChanges not staged for commit:  (use "git add <file>..." to update what will be committed)  (use "git checkout -- <file>..." to discard changes in working directory)        modified:   test.sh

当执行 git stash 进行备份.

➜  stash-git git:(master) ✗ git stash pushSaved working directory and index state WIP on master: 022d738 init➜  stash-git git:(master) git statusOn branch masternothing to commit, working tree clean

当执行 git stash pop 进行还原.

➜  stash-git git:(master) git stash popOn branch masterChanges not staged for commit:  (use "git add <file>..." to update what will be committed)  (use "git checkout -- <file>..." to discard changes in working directory)        modified:   test.shno changes added to commit (use "git add" and/or "git commit -a")Dropped refs/stash@{0} (7ca79cc65abdb6c2224f5b0f95620e2c50cc420c)

导入 Git stash 的备份为 patch 文件

咱们罕用的 git stash 命令个别罕用于本地电脑仓库文件的备份和还原, 那如何做到跨电脑的备份的还原呢? 可能大家比拟罕用的就是应用 patch 包进行备份和还原了.

git 中能够应用 git diff > xxx.patch 命令生成文本文件的 patch 差别包, 也能够应用 git diff --binary > xxx.patch 命令生成二进制文件的 patch 差别包. 但比拟丧气的是, diff 命令并不能同时把批改的文本文件和二进制文件同时生成差别包.

要达到这个要求, 咱们有一个更好的办法就是导出 git stashpatch 包, 因为 stash 能够同时反对文本文件和二进制.

首先咱们应用 git stash 命令备份咱们的本地批改, 接着咱们能够应用 git stash show "stash@{0}" -p > changes1.patch 命令抉择某一个 git stash 的备份为 patch 文件. ( : {0} 示意为最近的一个备份 )

示例

当应用 git stash 备份本地批改, 能够应用 git stash list 查看备份列表.

➜  stash-git git:(master) git stash liststash@{0}: WIP on master: 022d738 init

应用 git show 生成 patch 文件, 并查看生成的 patch 文件.

➜  stash-git git:(master) git stash show "stash@{0}" -p > changes1.patch➜  stash-git git:(master) ✗ cat changes1.patchdiff --git a/test.sh b/test.shindex 1dd57dc..6babd0c 100644--- a/test.sh+++ b/test.sh@@ -1,3 +1,5 @@...

Git 利用 patch 文件

git 中咱们应用 git apply xxx.patch 利用 patch 文件, apply 命令有几个罕用的参数须要晓得下:

-p                 指定补丁中文件门路的绝对深度, 如果咱们打 patch 是在我的项目上一级目录进行,                    那么在我的项目目录能够应用 `-p1` 进行补丁利用.( 默认为-p0 ).--3way             合并时如果失败了, 采纳 3way 的算法进行合并.--reject           采纳以上办法合并失败时, 能够自行解决 .rej 文件的抵触.--whitespace=fix   疏忽空格.

比方应用 --reject 的合并命令:

git apply --reject --whitespace=fix -p0 patches/rtc/rtc_patch_all_lib.patch