gpt4 book ai didi

git - 如何仅使用管道命令复制 git-checkout?

转载 作者:IT王子 更新时间:2023-10-29 00:33:46 24 4
gpt4 key购买 nike

我想避免从我的脚本中调用陶瓷命令,但是有没有办法获得 git checkout <commit> 的某些行为?仅使用像 checkout-index 这样的管道命令?我对工作副本的影响特别感兴趣:假设一切都是干净的,checkout删除在旧 HEAD 中跟踪但在新 HEAD 中不存在的文件。 checkout-index似乎没有任何删除文件的概念。我能想到的最接近的事情就是打电话

git diff-tree -p <old> <new> | git apply

但是计算整个差异似乎不必要地昂贵。有没有更好的办法?

最佳答案

您正在寻找 the two-tree git read-tree -um .它使用一个基础树(通常你给它输入 HEAD),一个目标树,以及(隐含地)索引和工作树。描述其行为的表格对我来说很难理解,所以我有自己的备忘单,无论如何,重新格式化的备忘单对我来说更有意义。无论如何,它实现了 git checkout

git read-tree -um H M  # `I` is the (implicit) index, GIT_INDEX_FILE

Legend

H Original tree (usually HEAD:)
I Indexed tree
M Merge target tree

H->I \
H->M } status in second relative to first
I->M /

"-" file exists in neither
new exists only in second
deleted exists only in first
same exists in both, unchanged
changed exists in both, different
(blank) irrelevant or all cases not otherwise given

keep keep current version
fail whole command fails, no changes
delete delete worktree file


H->I H->M I->M

same keep

deleted changed fail
deleted deleted delete
deleted same delete unless Index empty, else use M
same keep

same changed worktree clean: use M; dirty: fail
same deleted worktree clean: deleted; dirty: fail

new - keep
new new changed fail
changed changed changed fail
changed deleted fail


note: "index empty" identifies an initial checkout, where HEAD has been
set but never loaded. git can't currently distinguish between a
delete-everything index and an initial-checkout index.

关于git - 如何仅使用管道命令复制 git-checkout?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24921595/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com