大家好,我是 17。
今天和大家聊一聊 git check-pick,git patch 与 git stash 的用法。
git cherry-pick
为什么要用 cherry-pick?
不适合 merge 的场景就可以考虑 cherry-pick。
试想下面这些场景
-
只想同步分支的部分提交。两个分支是两上完全独立的 feature,不适合 merge。
-
不想过早的同步分支。
下面举几个例子。 dev 为 分支 ,A、B 为 commit。
git cherry-pick dev 将 dev 分支的最近一次提交,转移到当前分支。
git cherry-pick A 可以转移有权访问的任意分支的任意提交。
git cherry-pick A B 一次可以同步多个提交
转移从 A 到 B 的所有提交,不包含 提交 A。提交 A 必须早于提交 B,否则命令将失败,但不会报错。
git cherry-pick A..B
包含提交 A
git cherry-pick A^..B
如果没有冲突会在当前分支形成一个新的提交,提交的内容和 message 完全一样,只是 hash( commit id) 值不一样。
如果有冲突,解决冲突的方法前面在 git checkout
那一节已经说过,解决的方法是一样的,最后用 git cherry-pick --contine
,如果想撤销用 git cherry-pic --abort
git patch
为什么要用 patch?
不适合 merge,也不方便 cherry-pick 的场景,可以考虑 patch。
试想下面这些场景
- 两个不同的 git 库,其中的某段代码需要同步。
- 有些修改会影响所有开发者,但你想做这个修改,来验证一些东西。你需要另一个开发配合,需要把这个修改同步给他。直接 copy 是个办法,但如果修改较多,容易出错,用 patch 比较合适。
虽然 check-pick 也可以同步不同的库,但实操的时候,因为权限或安全问题,不大方便联网同步。
patch 方案
pach 有两种方案,diff 和 format-patch。
diff 仅保留了文件重 A 状态变成 B 状态的差别,而不会保留 commit 记录消息等信息,diff可以多个commit生成单个patch。用 git apply
应用补丁。
format-patch 完整保留了每次提交的完成信息,每个commit都生成一个patch文件。用 git am
应用 补丁。
检查都是用 git apply --check。查看 都是 git applay -stat
diff 生成 patch,apply 应用patch
制作 patch
git diff >fix.patch
git diff 38d8e02 >fix.patch 相当于
git diff 38d8e02 HEAD >fix.patch
总之,diff 的结果都可以制作 patch。
应用 patch
git apply --check fix.patch
git apply fix.patch
format-patch 制作 patch ,am 应用 patch
git format-patch -2 用最近的两次提交制作 patch
git format-patch commitId 某次提交以后的所有patch,不包括本次提交
git format-patch --root commitId 从第一次提交到指定提交的所有 patch
git format-patch -o patch -2 输出 patch 文件到 patch 文件夹
format-patch
制作的 patch 是一个提交一个文件,正序排列。
0001-第一次提交.patch
0002-第二次提交.patch
应用提交
git apply --check *.patch
git am *.patch
git stash
stash 的英文原意是 贮藏。git stash
的功能就是把当前工作区的内容存起来。和提交到暂存区不同,git stash
贮藏的内容不受分支切换的影响。
应用场景文章来源:https://www.toymoban.com/news/detail-405579.html
- 开发了一阵,发现分支错了。这时最好的文案就是
git stash save
,切到新分支后git stash pop
。 - 开发到一半,有一个紧急的 bug 要 fix,这时提交会造成无效的提交记录。可以先
git stash save
,切换分支修复 bug,再切回来git stash pop
。
注意:没有被 add 过的文件不会被 stash 起来,如果想把这些文件也一起 stash,可以加上
-u
参数,它是--include-untracked
的简写, git stash -u。文章来源地址https://www.toymoban.com/news/detail-405579.html
到了这里,关于git check-pick,git patch 与 git stash 详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!