我正在尝试找出在进行更改时在代码版本之间来回切换的最简单方法。当我处于某事的中间并且想要测试其他东西时我会使用git stash,但在这种情况下这似乎有些过分,因为它不能在单个文件上完成。
我尝试做的是git add {file}
暂时存储更改,然后git checkout {file}
以恢复到以前的状态。目的是将暂存作为文件的临时保留区域,然后将暂存文件拉回到我的工作目录中。我很惊讶,虽然在暂存文件后,结帐对工作目录中的文件没有影响。是否有一系列命令选项可以让这个工作流按我的意愿运行?
更新1:
根据文档显示,如果第2步有办法不覆盖索引,这将会起作用
更新2:
在受到ElpieKay的帖子的启发后,我看到将命令输出写入文件,我发现another answer克服了上述第2步的限制。使用git show HEAD:{file} > {file}
我现在可以覆盖文件的工作目录版本而不覆盖索引。然后调用checkout将索引版本拉入工作目录。结合git checkout-index,我得到了这个......
答案 0 :(得分:0)
如果git commit
不够好,您可以使用git stash
。
首先让我们制作一个标签来跟踪当前分支的尖端。
git tag start
对某些文件进行更改后,
git add .
git commit -m 'version 1'
git tag v1
#do the test
进行其他更改,
git reset start --hard
git add .
git commit -m 'version 2'
git tag v2
假设您对file-a
的不同版本感兴趣,请使用git checkout v1 -- file-a
或git checkout v2 -- file-a
或git checkout start -- file-a
在工作树中切换file-a
。最后,git tag -d start v1 v2
删除标记。在此之前,如有必要,请运行git reset start --hard
。分支也可以代替标签。
直接操作blob是另一种方法。
#make some changes to file-a
#modify, modify, modify
#create the blob of this file-a and make a tag for it.
git tag v1 $(git hash-object -w file-a)
#restore file-a to HEAD's version
git checkout -- file-a
#make some other changes to file-a
#oh, oh, ah, ah
#create the blob of this file-a and make another tag for it.
git tag v2 $(git hash-object -w file-a)
#now we want version1's file-a
git cat-file -p v1 > file-a
#now we want version2's file-a
git cat-file -p v2 > file-a
完成所有操作后,运行git tag -d v1 v2
。至于临时斑点,如果你不再需要它们就把它们留下来,它们不会打扰你。