如何将下面的2个git命令拼接成一个?
How to splice the following 2 git commands into one?
以下命令更改工作目录以及阶段:
git checkout <commit> <file>
以下命令不会触及工作目录,它只会更改阶段:
git reset <commit> <file>
我只想更改工作目录,但不想接触舞台。我可以使用以下命令执行此操作:
git checkout <commit> <file>
git reset <file>
我怎样才能用一条命令做到这一点?
最正确的答案是"you can't"。不过有两个简单的解决方法(好吧,第一个比第二个简单,第二个有点像 "you can"):
使用git show
,例如git show HEAD~3:path/to/foo.txt > path/to/foo.txt
这里的缺点是,除了必须将文件 name/path 写入两次之外,show
命令不应用任何污迹过滤器。如果您没有任何污迹滤镜,那没什么大不了的。
您可以在 git checkout
期间选择不同的 "index file"(暂存区),这样触及的阶段就不是您将用于下一次提交的阶段:
GIT_INDEX_FILE=/tmp/dummy git checkout <commit> <path>
这里的缺点是有点笨拙,你应该记得清理你的虚拟索引文件(假暂存区)。此外,以上假定 shell (sh/bash) 语法;您可能需要在其他 shell 中使用 env
程序或其他形式。
以下命令更改工作目录以及阶段:
git checkout <commit> <file>
以下命令不会触及工作目录,它只会更改阶段:
git reset <commit> <file>
我只想更改工作目录,但不想接触舞台。我可以使用以下命令执行此操作:
git checkout <commit> <file>
git reset <file>
我怎样才能用一条命令做到这一点?
最正确的答案是"you can't"。不过有两个简单的解决方法(好吧,第一个比第二个简单,第二个有点像 "you can"):
使用
git show
,例如git show HEAD~3:path/to/foo.txt > path/to/foo.txt
这里的缺点是,除了必须将文件 name/path 写入两次之外,
show
命令不应用任何污迹过滤器。如果您没有任何污迹滤镜,那没什么大不了的。您可以在
git checkout
期间选择不同的 "index file"(暂存区),这样触及的阶段就不是您将用于下一次提交的阶段:GIT_INDEX_FILE=/tmp/dummy git checkout <commit> <path>
这里的缺点是有点笨拙,你应该记得清理你的虚拟索引文件(假暂存区)。此外,以上假定 shell (sh/bash) 语法;您可能需要在其他 shell 中使用
env
程序或其他形式。