我的临时区域发生了变化,还有一些还没有暂存(某些文件在暂存区域内外都有变化)。 我想反转暂存区域的内容以及未暂存的更改。为了做到这一点,是否存在一个快捷方式,而不需要执行更复杂的操作,如本地侧枝提交,差异或存储[等]?谢谢。Git反转临时区域
回答
这是我用来解决这个问题。
第一个git reset
它将删除所有文件从'staging'到''文件没有提交'提交'。这是两个“分期”和文件“没有上演提交的文件”,则会保留最近当前在更改“文件没有上演犯”
然后
git add /path/to/file
你所需要的特定文件要添加到分期
不完全是一条捷径,但它能够完成
反向地工作,你git reset
后,你可以git checkout /path/to/file
对于目前“没有上演承诺”你不要的文件”你想添加到分期。这将从“不上演犯”
然后运行git add .
这将增加在“未上演承诺”到“升级”的所有文件删除特定的文件 - 无论是你的情况更容易
很可能有不止一个办法做到这一点,但我想我会采取这种方式 - 我们目前无法预建的快捷方式,但你可以很容易地编写自己的脚本来遵循这个过程:
生成为您目前正在使用的东西打补丁rking目录,但不是在你的指数,但(东西你没有为做
git add
)git diff-files -p > /tmp/unstaged.patch
生成了你已经添加到索引与目前
HEAD
git diff-index --cached -p HEAD > /tmp/staged.patch
- 补丁
重置您的索引和工作目录到你
HEAD
git reset --hard HEAD
一pply你不分阶段的补丁都工作目录和索引,导致这些变化正在上演
git apply --index /tmp/unstaged.patch
应用您上演补丁只针对你的工作目录
git apply /tmp/staged.patch
根据具体更改的性质,步骤4和/或5可能会导致您需要手动解决的一些合并冲突,但我不确定是否有完全避免这种可能性的干净方法。
你也许可以使用git stash
完成步骤1和4,而不是上面的命令,但我不知道,真的会得到你任何东西
此外,您还可以查看该手册页git diff-*
和git apply
首先查看是否有其他选项可能对您有用。
这里是我如何做到这一点:
- 提交索引到一个临时提交
- 提交,其余为二次临时提交
- 开关的提交的顺序与互动变基
- 混合复位
- 软复位
它可以被输入了手动蛮快的,特别是如果你使用Vim的提交信息:
git commit -m tmp1
git add . # optionally with `git add -u` if there are deletions
git commit -m tmp2
git rebase -i HEAD~2 # swap the order of the commits; `ddp:wq` in vi
git reset HEAD~1
git reset HEAD~1 --soft
我喜欢这个,除了手动编辑交换提交。 http://stackoverflow.com/questions/16203562/programmatically-swap-last-two-commits –
好点。但对我个人而言,这个问题并不足以写出一个快捷方式脚本,并记住它的名称和工作原理。互动式重新装订我几乎每天都会这样做,它对我来说非常直观和高效。 – gtd
基于GTD的答案和脚本的能力反转提交,这是我现在使用什么:
[alias]
swaplast = !git tag _invert && git reset --hard HEAD~2 && git cherry-pick _invert _invert~1 && git tag -d _invert
invertindex = !git commit -m tmp1 && git add -A && git commit -m tmp2 && git swaplast && git reset HEAD~1 && git reset HEAD~1 --soft
发布在我的博客在这里:http://blog.ericwoodruff.me/2013/12/inverting-git-index.html
- 1. git的临时区域
- 2. GIT - 编译和测试临时区域
- 3. “git commit --amend”without“git add”/正在更改临时区域
- 4. 工作目录干净时,git临时区域包含什么?
- 5. IntelliJ IDEA git集成和临时区域(索引)
- 6. “git commit files”是否将文件放入临时区域?
- 7. Git合并影响工作目录和临时区域
- 8. 使用PowerShell检查Git临时区域中的xml文件
- 9. 如何在git中将提交移动到临时区域?
- 10. git add将文件添加到临时区域
- 11. 临时区域的推动变化
- 12. 实现Qt临界区域
- 13. Git临时提交
- 14. git:自动添加目录中更新的任何文件到临时区域
- 15. 如何下载git中的临时区域中存在的差异
- 16. 绘图反转时HighCharts范围区域绘图不起作用
- 17. 反转色区域的反色结果int
- 18. HTACCESS将流量从临时域转发到新域
- 19. git的临时服务器
- 20. 用临时缓冲区使用ofstream写入临时缓冲区
- 21. 如何反转`git submodule init`
- 22. 反转一个git获取
- 23. 如何反转git rebase?
- 24. Autotools将数据文件复制到临时区域
- 25. 创建树,而无需使用临时区域
- 26. GetSaveFileName()没有返回CD刻录临时区域的路径XP
- 27. 混帐:文件不被添加到该临时区域
- 28. Magento的商店标识与秩序#秒 - 临时区域
- 29. Hadoop的例外 - 清理临时区域/staging/test/.staging/job_201211221353_0010
- 30. 如何保存我的临时区域的当前状态?
的可能重复[?什么是交换的最短途径演出和Git中不分阶段的变化(http://stackoverflow.com/questions/3573410/what-is-最短路到交换分阶段和非分段更改在git) –
哇,感谢您的链接。不一样的搜索条件,但同样的问题,的确如此。 – moala