git - 如何在 git 中将修改和重命名提交拆分为单独的提交?
问题描述
在 git 工作树中,我有一个文件“foo”。我对该文件进行了重大修改,然后将其重命名为“bar”。Git 将此检测为已删除/新文件。根据这个答案,为了让 git 检测到它们是同一个文件,应该先提交移动,然后再提交修改。鉴于文件已被修改和移动(但尚未暂存或提交),首先提交移动操作,然后是修改(确保我不会在此过程中丢失我的修改)的程序是什么?
同样,如果移动/修改已经在单个提交中提交,那么执行此操作的过程是什么?
解决方案
老实说,最安全的做法是:
$ mv bar bar.safe # move bar someplace safe
$ git checkout foo # get the old copy of foo
$ git mv foo bar # tell git about the move
$ git commit -m 'I moved foo to bar'
$ mv bar.safe bar
$ git add bar
$ git commit -m 'But bar is totally changed now'
如果已经提交了移动/修改,最安全的做法是撤消提交(在默认--mixed
模式下,更改索引但保持工作目录不变):
$ git reset HEAD^
然后使用上述程序。
从技术上讲,您可以使用git update-index
独立于工作目录的内容来直接操作索引(请参阅--cacheinfo
参数),但我认为上述方法更直接。
推荐阅读
- flutter - 如何使用未来
? - r - 替换以空格分隔的字符串中的特定字母结尾的每个匹配项
- c#-4.0 - 向 Salesforce 插入表单数据
- c++ - 如何用pair保留二维向量
- unit-testing - 如何在 Flutter 中测试(单元测试)一个 BehaviorSubject?
- spring - 通过 Zuul 在 Spring Boot 微服务之间进行身份验证
- javascript - 使用单个复选框显示多个密码字段
- javascript - 如何在 JavaScript 中有效地组合多个 Maybe monad?
- reactjs - 有没有办法在 body 标签附近包含 react-select 下拉菜单
- grammar - 在语法中重新定义 ws