我希望避免在我的脚本中调用porcelain命令,但是否有一种方法可以仅使用plumbing命令(例如checkout-index)获得git checkout <commit>
的某些行为呢? 我特别关注对工作副本的影响:假设一切都很干净,checkout
删除旧HEAD中跟踪的并且在新HEAD中不存在的文件。 checkout-index
似乎没有任何删除文件的概念。我能想到的最接近的方法是调用:
git diff-tree -p <old> <new> | git apply
但计算整个差异似乎是不必要的昂贵操作。是否有更好的方法?
git checkout ...
命令呢? - Oliver Charlesworthcheckout
命令可以清除被忽略的文件,但我希望避免这样做(增加安全性)。不过,我确实希望覆盖已删除的文件(降低安全性),而不使用--force
参数来覆盖所有文件。这是一个使用 Git 存储文件树的脚本的一部分,checkout
命令与我期望脚本行为非常接近,但还不完全符合我的要求。我认为如果能通过内部命令获取checkout
的功能,然后进行调整,但如果有其他方法可以实现这种控制,请告诉我。 - Jack O'Connordiff-tree
很慢吗?checkout
基本上会进行所有差异比较以确定首先要做什么。(当然,checkout
不会创建补丁然后应用它们,也可能您也不应该这样做。) - Edward Thomsondiff-tree
可能是我想要的,但我不确定要将其输出导入到哪里。除了上面的git apply
hack 之外,有没有一种方法可以将此 diff 应用于工作副本?编写一个 Python 脚本以获取删除列表并实际执行它们很容易,但我担心这会很慢。 - Jack O'Connor