检查Git是否以编程方式进行了更改

Casebash

我想编写一个脚本,使我可以轻松更改分支,以保持当前更改。

git stash
go checkout main
git stash pop

问题是如果存储库中当前没有更改。然后stash pop将弹出以前的存储。检查弹出的更改是否最简单的方法是什么?

周二

git stash实际上是一个shell脚本(普通sh而不是bash脚本),因此您可以查看它是如何决定是否进行隐藏的:

no_changes () {
        git diff-index --quiet --cached HEAD --ignore-submodules -- &&
        git diff-files --quiet --ignore-submodules &&
        (test -z "$untracked" || test -z "$(untracked_files)")
}

untracked_files () {
        excl_opt=--exclude-standard
        test "$untracked" = "all" && excl_opt=
        git ls-files -o -z $excl_opt
}

因此,您可以重复这些测试以查看是否git stash可以执行任何操作,但这实际上不是最佳选择:

  • 如果git stash愿意,则首先重复这些测试(他们说有东西要藏起来),在这种情况下,它们会发生两次。
  • 如果“正确”的测试集发生了变化,您可能会错误地预测git stash的操作并惹上麻烦。

显然,您想要执行以下操作:

  1. 运行git stash,并跟踪它是否有任何作用。
  2. git checkout在目标分支上运行
  3. 如果git stash藏有东西,请运行git stash pop(或--apply --keep-index首先,看是否能解决问题,并--keep-index仅在需要时才申请,等等)。

棘手的部分是第一步。事实证明这很容易,您只需要知道它是如何git stash工作的,嗯,广泛的细节,以及有关git的“管道命令”的其他一些知识。您只需步骤之前获取先前的存储堆栈顶部(如果有的话)git stash save,然后获取新的存储堆栈顶部(如果有的话),然后进行比较:

old_stash=$(git rev-parse -q --verify refs/stash)
git stash save [additional arguments here if desired, e.g., -q]
new_stash=$(git rev-parse -q --verify refs/stash)

如果两个引用的名称不同,或者旧的引用为空,而新的引用不为空,则将git stash新的暂存器推入堆栈。如果两个ref都为空,或者两个ref命名相同的提交,则git stash什么都不做:

if [ "$old_stash" = "$new_stash" ]; then ...; else ...; fi

或者,就您而言,也许更像是:

[ "$old_stash" != "$new_stash" ] && git stash pop

(这些测试利用了一个事实,即两个空字符串彼此相等,并且在结果/bin/[和外壳程序的内置副本方面不等于任何非空字符串)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

检查是否对numpy数组进行了排序

如何知道jtextarea中是否进行了任何更改?

如何修改并检查是否在Java 8中进行了修改?

内核是否进行了碎片整理

检查ConcurrentHashMap的computeIfAbsent是否进行了更改

检查用户登录的页面是否在Angular 2中进行了更改

Git:以编程方式检查是否已分阶段进行

是否对克隆语句进行了优化?

检查用户是否仍在angularfire2中进行了身份验证

检查用户是否对某项投票进行了投票

vscode是否在git commit消息框中进行了拼写检查?

检查元素是否在Angular2中对attr / class进行了动态标记

SQL [email protected]@ ROWCOUNT的替代方法,用于检查表中是否进行了UPDATE

检查客户是否对Woocommerce中的产品进行了评论

以编程方式找出是否对Java类进行了修补?

如何检查我的应用程序是否已针对Android进行了电池优化配置?

有没有一种方法可以检查远程git repo是否进行了更改,而没有实际获取更改?

在关闭Angular材质对话框之前,检查用户是否对Reactive表单进行了更改

Google Play应用内审核API。如何检查用户是否对该应用进行了评分?

如何检查电子邮件是否已在Firebase中使用参数进行了验证?

如何检查rsync是否对bash进行了任何更改?

如何使用JavaScript检查是否对服务器进行了调用

如何检查用户是否在24小时滑轨之前进行了投票4

客户端检查是否在Firebase中进行了身份验证

尽管进行了边界检查,但ArgumentOutOfRangeException

检查onbeforeunload中的ace编辑器以查看是否进行了更改

仅保存如果进行了更改

检查用户是否对范围进行了投票

检查用户是否在不安全的路由上进行了身份验证