我在Github上有一个Java项目,现在我将其更改为使用Gradle并且必须更改整个项目结构。为此,我创建了一个全新的Java项目并复制粘贴代码文件。正如我所料,我不能将项目合并到Github上的主分支。有没有办法如何覆盖旧的主分支?我不需要旧结构,代码是一样的。我也不想在不同的文件夹上复制代码。我该如何解决这个问题?
摘要
我想用新代码覆盖旧代码,因为这是一个包含共享代码和多平台的复杂多项目解决方案,如果我保持这样的话,会有很多冲突会更容易解决新代码并抛弃旧代码。
答案 0 :(得分:3)
因此,假设您将旧主服务器作为本地存储库中的master
分支,将新主分支作为new-master
。您希望将new-master
中的更改合并到master
,并在发生冲突时始终采用new-master
引入的更改。为此,请执行以下操作:
git checkout master
git merge -X theirs new-master
之后,master
将包含new-master
中所做的所有更改。现在,您只需将master
分支推送到github即可。您不会丢失任何版本历史记录。
来自the git-merge man page的-X theirs
的说明。
ours
This option forces conflicting hunks to be auto-resolved cleanly by
favoring our version. Changes from the other tree that do not conflict
with our side are reflected to the merge result. For a binary file,
the entire contents are taken from our side.
This should not be confused with the ours merge strategy, which does
not even look at what the other tree contains at all. It discards
everything the other tree did, declaring our history contains all
that happened in it.
theirs
This is the opposite of ours.
如果要删除历史记录并重新开始使用新存储库,则需要强制将新的本地存储库推送到github存储库。
git push --force origin master
另见:
在执行命令之前,请务必了解您在做什么。强制推送到公共存储库通常是一个坏主意。特别是,如果您不是唯一的开发人员。
答案 1 :(得分:2)
这是我的建议 -
或 -
1) Just make the changes in new master
2) Push it as a new branch
3) Use it as the origin for your future forks.
你可以弃用旧的主人,这样你也会有变化的历史记录,唯一可以改变的是你的原始URI
重命名你的分支 -
git branch -m old_branch new_branch
git push origin new_branch