【问题标题】:update git branch to remote in spite of rebase尽管有变基,但仍将 git 分支更新到远程
【发布时间】:2015-05-04 11:35:35
【问题描述】:

当我知道一个分支已被 rebase -i '清理',我发现自己在做:

git fetch
git checkout master
git branch -D tracking-branch
git checkout -t origin/tracking branch

某些 git 命令是否包含此选项?请注意,当我需要在多个系统上进行测试时,这会出现我完全私有的任务分支。

【问题讨论】:

    标签: git


    【解决方案1】:

    您可以简单地硬重置远程分支并保留您的工作目录,而不是删除本地分支:

    git fetch
    git checkout tracking-branch
    git reset --keep origin/tracking
    

    如果您完全确定应该丢弃本地更改,请执行

    git reset --hard origin/tracking
    

    【讨论】:

    【解决方案2】:

    如果您的跟踪分支已经在跟踪其远程分支,
    以下命令应该可以解决问题:

    git fetch
    git branch -f tracking-branch origin/tracking
    

    这样:

    • 您不必切换到 master 和返回。
    • 避免使用git reset --hard,这可能会删除工作树中正在进行的一些工作。
    • 避免git checkoutgit reset --hard 中涉及的昂贵的磁盘I/O
      (在这种情况下完全没有必要)

    【讨论】:

    • checkout to master问题中最有可能使人删除当前分支...
    【解决方案3】:

    如果您确定要丢弃本地历史记录,请查看有关 git resetgit branch -f 的其他答案。

    如果您不能 100% 确定自己没有重要的本地更改(或者当您确实知道自己有不想丢弃的重要本地提交时),那么另一种方法可能会更安全使用git rebase:

    git checkout tracking-branch
    git pull --rebase
    

    当要应用的补丁与上游提交引入的补丁相同时,Git 会自动通知上游已经应用了哪些补丁。当某些补丁被重写时,您可能会遇到一些冲突,但是您可以手动检查该补丁是否真的要跳过,并使用git rebase --skip手动跳过它。

    【讨论】:

      【解决方案4】:

      使用git reset --hard origin/tracking 强制跟踪分支的状态可以达到目的,而无需删除并重新创建本地分支。

      【讨论】:

        猜你喜欢
        • 2015-08-27
        • 1970-01-01
        • 2014-04-27
        • 1970-01-01
        • 2015-02-25
        • 2012-09-27
        • 1970-01-01
        • 1970-01-01
        • 2020-06-27
        相关资源
        最近更新 更多