我有一堆上演的变更和一堆未上演的变更。是否存在git命令来完全协调所有我已分阶段执行的更改,同时保持我未分阶段进行的更改?
我不希望已存在分阶段的更改。我只希望他们离开这个世界,但我想保持我的未分级更改不变。
答案 0 :(得分:3)
假设已进行的阶段性更改和未进行的非阶段性更改都没有冲突,
这是实现此目标的方法:
git stash save --keep-index
git reset --hard
git stash pop
第一个命令[使用--keep-index存储]将仅存储未暂存的文件。 Second [reset --hard]将摆脱所有现有更改(现在仅包括暂存文件)。第三个[stash pop]将隐藏以前未暂存的文件。
替代方法可以是: 提交暂存的文件,隐藏剩余的更改,删除顶部的提交,弹出隐藏的更改。如下所示:
git commit -m "temp commit"
git stash
git reset --hard HEAD~1
git stash pop
答案 1 :(得分:1)
最简单的解决方案-不涉及创建tmp提交(git stash
实际上也创建tmp提交):
首先,在索引和HEAD
提交之间创建补丁,并保存到tmp文件:
git diff --cached -R > ~/tmp.patch
注意-R
选项可以反转差异的方向。
第二,重置索引:
git reset
最后,将补丁应用到工作目录:
git apply ~/tmp.patch
答案 2 :(得分:0)
要取消暂存所有文件(请参阅注释:不是OP想要的)
git reset
(如果没有提供参考,则暗示{HEAD
)
您的本地更改将保留,但索引(暂存区)将被清除。