package org.my.domain;
public class BestClassEver{}
通过一些重构,我改变了这个类的包。
package org.another.domain;
public class BestClassEver{}
我使用git将其提交到我的本地存储库并将其推送到远程存储库。
git add .
git commit -m "Refactoring"
git push origin master
另一位开发人员修改了该类,但没有提取我的更改。
package org.my.domain;
public class BestClassEver{
private String something;
}
然后提交并推送到远程存储库
git add .
git commit -m "Some Changes"
git push origin master
答案 0 :(得分:1)
它会抛出两个引用不匹配的错误,因此需要使用远程引用更新其本地分支。
几乎所有人都知道这一点。如果远程存储库中有更改,除非您执行强制推送,否则如果远程更改,git将不允许您推送更改。
修改强>
一旦他拉出,如果文件中有任何冲突,开发人员将不得不纠正任何冲突,提交它们,然后他才能推送。
如果没有冲突,git会自动合并这些更改,开发人员可以在拉动后推送。
再次编辑
我没有意识到你正在移动文件。在任何情况下,运行git status
都可以让您了解拉动后本地存储库的状态。如果有任何冲突,您可以纠正它们。
注意强>
On git rebase
或git pull --rebase
通常用于为您提供更清晰的提交历史记录,因为它们几乎会在任何其他更改的基础上应用任何本地更改。
另一方面,git pull
和git merge
通常会进行额外的提交以链接分支上的更改。
有关详情,请参阅本指南Git Rebasing
答案 1 :(得分:1)
让人们在计划的不同部分工作总是好主意。
在这种情况下,合并或变换应该是完全自动的,但在现实世界中,它总是有点戏剧性,有时会有一些冲突。当然,这个merge / rebase将在服务器拒绝推送非快进之后完成。
答案 2 :(得分:0)
当这样的事情失败时,一些解决方法包括:
git format-patch
),编辑修补程序(将“refactor”应用于它)并应用已编辑的修补程序(git am
)。这就像手动变基。我认为最好将合并复杂的重构(例如涉及重命名的重构)和通常的次要重构分开。
有时,对于合并复杂的重构,可以编写脚本(例如find -name '*.c' -exec sed 's/something/anything/g' -i '{}' ';'
)。该脚本用于在我们需要时在不同的地方多次重复重构,因此避免将重构的代码与非重构的代码合并。