【问题标题】:Git pull origin <branch> overwrites master?Git pull origin <branch> 覆盖master?
【发布时间】:2013-05-04 15:20:13
【问题描述】:

我在 Github 上有一个存储库,aav1

在我的笔记本电脑上,我有两个分支,一个叫 ma​​ster,一个叫 vs12up master分支是在软件是Visual Studio 2008的时候,vs12up转成Visual Studio 2012的。

在我的笔记本电脑上一切似乎都很好,我将新分支推送到 github,看起来是正确的。

在我的桌面上,我尝试拉取远程分支:

git pull origin vs12up

它在桌面上将更改写入我的 master 分支,git log 显示在 vs12up 分支上所做的提交,但 git 分支只显示 ma​​ster,即当前分支。

如何恢复对 ma​​ster 分支的更改并拉取桌面上的 vs12up 分支以匹配笔记本电脑上的存储库?

【问题讨论】:

    标签: git github git-branch remote-branch


    【解决方案1】:

    如果您使用远程分支名称执行git pull,它将获取远程分支,然后将其合并到您当前的本地分支中。因此,要撤消该操作,您首先必须将本地分支重置为远程master,然后从相应的远程分支创建一个新的本地vs12up 分支。

    1. 重置您的本地 master 以匹配远程存储库的 master(警告:在发出以下命令之前,请确保您没有任何要保留的未提交更改):

      git reset --hard origin/master
      
    2. 获取所有远程分支到本地存储库:

      git fetch origin
      
    3. 从远程vsup12 分支创建一个新的本地vsup12 分支,并切换到这个新的本地分支:

      git checkout -b vsup12 origin/vsup12
      

    请注意,当您随后在切换到 vsup12 分支时执行 git pull 时,您将从 Github 上的 vsup12 分支获取最新更改并将其合并到本地 vsup12

    【讨论】:

    • 谢谢。两个问题,-b参数有什么作用?
    • 我是否只是通过 git checkout master 切换回来?
    • -b 指定新分支的名称。 git checkout -b foo 是创建名为foo 的分支(使用git branch foo)然后切换到它(使用git checkout foo)的简写。
    • 在桌面上,按照上面的说明进行操作后 git status 返回 # 你的分支比 'aav1/vs12up' 领先 1 个提交。 - 但它说一切都是最新的,没有什么可提交的。这正常吗?
    • 假设您的远程确实被称为aav1 而不是origin,这将表明您在本地有一个新的提交,它还没有在您的远程存储库中。做上述的时候,那是不正常的。也许您在两者之间进行了无意的拉/合并?但我担心这要么是一个单独的问题,要么是 chat 的问题。
    猜你喜欢
    • 2011-02-22
    • 2020-07-27
    • 2012-01-31
    • 2018-07-05
    • 2017-10-20
    • 2014-03-12
    • 2021-10-14
    • 1970-01-01
    相关资源
    最近更新 更多