git - 解决被我们删除的 git rebase
问题描述
我有一个文件说我已经修改过的 a.java。
与此同时,在我将更改推送到 master 之前,另一个开发人员删除了该文件(基本上重命名了包)。
现在,当我重新调整我的更改时,我看到了
Unmerged paths:
deletedbyus: a.java
现在因为我想保留更改,所以我做了..我尝试了 git add a.java 但它似乎不起作用我仍然看到
Unmerged path:
deltedbyus: a.java
如果我执行 git rm 或 rm,文件将被暂存,但它会显示为已删除,从而将文件一起删除。
在我的更改完好无损的情况下恢复文件的正确方法应该是什么。
解决方案
假设您在master
分支上,并且其他人将文件的包更改推送到并且a.java
您master
现在在提交更改后正在分支上进行,让我们澄清一下它的确切含义git rebase
:master
在这种情况下,git 会将HEAD
您的master
分支重置为远程origin/master
分支之一。然后 git 正在接受你的每一个提交,并在新的 master 之上重写它们HEAD
。
实际上,它们是您正在重写的提交,但从 git 的角度来看,它们是它们的更改,因为它们属于分支 git 重新基于您当前的分支(实际上不是您的更改,但它现在是我们的分支,因此我们的更改)。
在这种情况下,当 git 告诉你deletedbyus
这意味着在提交中 git 正在重写,该文件再次存在,因为它已经在我们的分支中(被我们)删除了,但是我(git)应该如何处理对 a 的更改文件不再存在?有人故意删除了它,我(git)在没有确认的情况下无法再次创建文件(这确实是正确的)。
那么,你应该怎么做才能解决这种情况呢?实际上,您应该在文件现在存在的位置(在新包上,假设您要保留包更改)中包含您的更改(在 rebase 期间从 git 的角度来看他们的更改)。完成此操作后,您应该这样做
# Manually carry the changes you made to
# file/on/old/package/a.java
# to file/moved/to/new/package/a.java
git add file/moved/to/new/package/a.java # To confirm your changes
git rm file/on/old/package/a.java # To confirm deletion
git rebase --continue # To continue with your rebase
但是,您对文件做了哪些更改?你可以看到它git diff HEAD:file/moved/to/new/package/a.java file/on/old/package/a.java
推荐阅读
- sql - 检查所有参加过两门特定课程 SQL 的员工
- sql - SQL Server:用户定义函数(返回指定日期的星期几)
- javascript - 从 JSON 中提取键值数组
- haskell - 关于懒惰的“和”条款的评估
- javascript - 将两个不同的页面合二为一。如何?
- angularjs - Angularjs返回错误无法在ng-repeat中设置未定义的属性'subcomment_like'
- java - 如何使用 JAVA 将图像从 HTML 保存到数据库
- mysql - 嵌套查询的 SQL 速度和优化
- swift - 移动 UIImageview 的位置
- c - 为什么有人会为第一个参数定义宏,包括 C 中的逗号?