【问题标题】:Github overwrite old projectGithub 覆盖旧项目
【发布时间】:2016-02-10 16:36:10
【问题描述】:

我在 Github 上有一个 Java 项目,现在我将其更改为使用 Gradle,并且不得不更改整个项目结构。为此,我创建了一个全新的 Java 项目并复制粘贴了代码文件。正如我所期待的,我不能将项目合并到 Github 上的 master 分支。有没有办法覆盖旧的主分支?我不需要旧的结构,代码是一样的。我也不希望在不同文件夹上重复代码。我该如何解决这个问题?

总结

我想用新代码覆盖旧代码,因为这是一个复杂的多项目解决方案,具有共享代码和多平台,如果我保留很多冲突会更容易解决新代码,扔掉旧代码。

【问题讨论】:

    标签: java git github


    【解决方案1】:

    因此,假设您在本地存储库中将旧 master 分支作为 master 分支,并将新 master 分支作为 new-master。您希望将 new-master 中的更改合并到 master 中,并在发生冲突时始终采用 new-master 引入的更改。为此,请执行以下操作:

    • git checkout master
    • git merge -X theirs new-master

    之后,master 将包含在 new-master 中所做的所有更改。现在,您可以简单地将 master 分支推送到 github。您不会丢失任何版本历史记录。

    -X theirs 的描述来自the git-merge man page

    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
    

    另见:

    请务必在执行命令之前了解您在做什么。强制推送到公共存储库通常是一个坏主意。特别是,如果您不是唯一的开发人员。

    【讨论】:

    • 我在新分支中有新的项目结构(已经在 GitHub 上)。我想我必须先检查一下?谢谢。 PS:只有我在私人分支工作。
    • 如果您已经在同一个存储库中进行了更改,则应该将分支合并到 master 中。这将改变那里的项目结构。无需删除项目历史记录。使用 git 的原因是为了保留历史记录。
    • 我不想删除历史记录,但我遇到了很多冲突,我认为覆盖旧的东西会更容易......并保留新的
    • 好的,在这种情况下,我的回答对你没有帮助。我会编辑它。
    【解决方案2】:

    这是我的建议-

    1. 从原点导入旧的 master 分支
    2. 切换分支并将分支命名为“new master”之类的
    3. 在“新主人”中进行更改
    4. 现在合并新的 master 和你本地的 master
    5. 解决冲突
    6. 构建它,如果成功推送它。

    或者-

    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.
    

    您可以弃用旧的 master,这样您也将拥有更改的历史记录,唯一会改变的是您的原始 URI

    重命名你的分支 -

      git branch -m old_branch new_branch
      git push origin new_branch
    

    【讨论】:

    • 谢谢,我已经这样做了。我被困在第 5 步:解决冲突。这就是为什么我认为覆盖旧分支可能更容易。
    • 覆盖有时是不受欢迎的,但如果冲突无法解决,你不妨核对旧代码并强制将其推送到原点。
    • 确保你的团队成员意识到这一点,否则这将是一场灾难,你可能会被解雇。
    • 他们知道。我只是在空闲时间做自己的项目,所以我希望我不会被解雇。如果我强制推送它,我是否会在不同的文件夹(新旧文件夹结构)中有两个文件(来自新项目和旧项目)?
    • 或者只是在新 master 中进行更改并将其推送为新分支并将其用作未来分叉的起点,您可以弃用旧 master,这样您将拥有历史也会发生变化,唯一会改变的是您的原始 URI。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-29
    • 2020-03-27
    • 2015-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多