【问题标题】:Git force pull branch from remoteGit 强制从远程拉取分支
【发布时间】:2012-03-03 08:54:16
【问题描述】:

所以我在 GitHub 上有 2 个分支:master 和 branchA。假设我一直在研究 master 并且 master 领先 3 次提交或其他东西。因此,master 上的提交 d、e 和 f 不在分支 A 中。接下来说我的同事用 commit g 将 branchA 上传到了 GitHub。所以我们有:

master: a, b, c, d, e, f
branchA: a, b, c, g

现在说我想切换到 branchA 并准确提取 GitHub 上的内容。我遇到的问题是,当我使用 git branch branchA 时,它会自动使用 master 作为我的起始位置,因此添加 d,e,f 并且当我拉出 branchA 时,我会遇到冲突,因为 g 和 d,e,f 还没有兼容。

有没有办法从 GitHub 中提取,以便我的本地提交日志与 GitHub 上的一致?我试过git pull -f,但显然也没有用。

【问题讨论】:

    标签: git merge github fetch pull


    【解决方案1】:

    你应该

    git fetch
    

    然后检查发生了什么类似的事情

    git log --all --oneline --graph --decorate
    

    现在您可以合并或变基同时完成的工作。任何以“origin”为前缀的分支都将是 github 上的内容(假设这是您克隆的地方)。本地分支的颜色也会不同。

    如果你想处理一个你还没有处理的被拉下的分支,检查它并在本地分支中跟踪它

    git checkout -t origin/someBranch
    

    我只会在合并或重新定位我自己的工作的特殊情况下使用 pull。根据其他人所做的,我可能会选择变基而不是合并。

    【讨论】:

    • git checkout -t origin/someBranch 运行良好。谢谢! (我不能再接受 7 分钟的回答,但我会接受)
    • 没问题。我希望你能理解我关于首先获取、检查然后根据所做的工作决定变基或合并的观点:)
    • 我已经获取了所有内容,我只是不知道如何切换到我尚未创建的分支而不拉入我所有的主分支。但是 -t 参数创造了奇迹。我会使用日志,但是我需要整理几百个提交,而且我很懒=P
    • 当然。 git log 也将分支名称作为参数,您可以排除合并等内容。值得研究,因为它确实可以帮助破译很多工作。
    【解决方案2】:
    git fetch origin
    git checkout origin/branchA -b <local branch name>
    

    这将使用您指定的名称创建一个本地分支,该名称是branchAorigin 上的精确复制。如果您的 GitHub 远程名称不是 origin,请进行相应调整。

    你也可以只用git branch指定起点:

    git fetch origin
    git branch <local branch name> origin/branchA
    git checkout <local branch name>
    

    如果您打算检查正在创建的分支,git checkout-b 标志只会使事情缩短一步。

    此外,如果您希望本地分支名称与远程分支相同,还有更短的方法:

    git fetch origin
    git checkout -t origin/branchA
    

    这将创建一个与originbranchA 匹配的本地branchA

    【讨论】:

    • 是的,我添加了更短的方式,然后您编辑并添加到您的答案中:)
    • 任何可以做出更好答案的方法。
    猜你喜欢
    • 2011-05-02
    • 2020-08-01
    • 2022-06-11
    • 1970-01-01
    • 2011-08-31
    • 1970-01-01
    • 2015-04-24
    • 2012-03-21
    相关资源
    最近更新 更多