我想创建一个执行以下操作的脚本:1) git stash 2) git checkout myBranch 3) git stash pop
有哪些 git 管道命令可以替代上述 git 瓷器命令?
编辑:
基于 Mark Adelsberger 和 Torek 非常详细和冗长(谢谢你们)的回答,我将坚持使用瓷器命令。我还要注意以下声明,我发现它对何时使用瓷器与管道命令非常有帮助。
引自 Mark Adelsberger 的回答:
“由于您使用的命令不会产生驱动脚本的输出,因此我不会太担心寻找管道等效项。”
首先,值得快速提醒的git stash save
是,它的工作方式是进行一次新的提交——或者实际上,至少有两次提交,但其中一个是主要提交,这是从那时起用来处理它的哈希 ID上。所以我们可以将其称为“存储提交”:它就像任何其他提交一样,除了(a)它不在分支上,并且(b)它看起来像一个合并提交,但永远不应该用作合并提交。
该git stash
命令本身是一个非常有没有直接的管道相当于复杂的脚本。但是,它确实(自 Git 1.8.4 起)有自己的方式用作管道,通过git stash create
(可选地,后跟git stash store
以分配存储提交名称)。
create 步骤使 stash 提交git stash save
,但不会为其分配条目,因此所有现有的 stash 都以通常的方式命名。请注意,就像,如果没有任何东西可以隐藏,它什么都不做。的输出是新的主存储提交的哈希 ID,如果没有新提交,则根本没有。stash@{number}
git stash save
git stash save
如果这会创建一个存储提交,您有 14 天(默认情况下)为其命名或完成使用。如果您预计您的命令序列需要超过 14 天,您可能希望使用git stash store
它作为 将其推入存储堆栈stash@{0}
,将所有其他人重新编号为一个。如果您认为您的脚本将在 14 天的宽限期内完成,您甚至不需要发明一个名称:您只需将存储提交哈希传递给git stash apply
.
因此:
commit=$(git stash create)
... do your thing here ...
if [ "$commit" != "" ]; then git stash apply $commit; fi
(正如Mark Adelsberger 指出的,您应该检查是否apply
成功,如果没有,您可能应该给存储提交一个名称)。
至于git checkout
,管道相当于是一个有点复杂(它由原子决定结账是否会成功,然后如果是这样,使用git symbolic-ref
重新绑定HEAD
,同时使用git read-tree
和git checkout-index
更新索引和工作树以匹配新的HEAD
承诺,维护可以保留的索引和工作树修改)。如果您刚刚完成了成功git stash save
或等效的操作,则仅在以下情况下会发生剩余的失败案例:
--skip-worktree
或--assume-unchanged
设置,将通过切换提交在索引中更改(因此在工作树中)所以几乎可以将其简化为一些简单的管道命令。但无论如何都可以用作管道。你可能还不如直接使用它。git checkout branchname
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句