【问题标题】:How to pull latest code to a different branch without checkout to that branch?如何在不签出该分支的情况下将最新代码拉到不同的分支?
【发布时间】:2019-01-04 04:09:32
【问题描述】:

我有一个 git 存储库,我在分支 A。如何在不签出 master 的情况下将最新代码拉到本地 master 分支?我知道我可以执行以下代码:

git checkout master
git pull

但如果我更改了当前分支 A 中的文件。在更改到主分支之前,我必须提交或存储它。有没有办法在我当前的分支A 中做到这一点?

我在 master 中没有任何本地提交,因为我总是在个人分支上工作,并且我仅将 master 用于只读目的。

【问题讨论】:

标签: git


【解决方案1】:

如果master 没有任何本地提交,则它指向与origin/master 完全相同的提交。在这种情况下,拥有它没有多大意义。无论出于何种目的需要master,都可以使用origin/master,这样就不用维护本地的master了:

$ git branch <feature> origin/master # make new feature branch
$ git log ..origin/master # see what is new in the upstream
$ git diff origin/master...HEAD # see your changes

...等等。

【讨论】:

    【解决方案2】:

    获取最新的develop 并将其合并到您当前的分支:

    git fetch origin develop && git merge origin/develop
    

    【讨论】:

    • 这将如何防止存储操作? git merge 仍然会抱怨分支在合并远程分支之前有未提交的更改。另外,你的意思是A?因为在这种情况下没有develop 分支。
    【解决方案3】:

    您似乎想让您的 master 分支保持最新,以便您以后可以这样做:

    $ git checkout master
    $ git merge A
    

    但是你不需要严格保持你的master 分支保持最新直到你完成A,因为origin/master 远程跟踪分支将在你这样做时保持最新一个 fetch(这将保持分支 A 不受影响,因为 fetch 只会从远程存储库中获取更改,而根本不会更改本地分支。)。事实上,这正是远程跟踪分支的目的。

    然后,当您准备好将您的分支 A 合并到 master 中时,您可以在您的 master 分支上进行合并(git pull 会自动执行 - 它只是一个获取,然后是一个合并):

    $ git checkout master
    $ git fetch
    $ git merge FETCH_HEAD
    

    FETCH_HEADgit fetch 更新,并由git merge 命令用来存储它要合并到的提交 - 当您执行git pull 时,这是合并到您本地的最新提交分支。

    来自git-merge 文档:

    如果没有从命令行给出提交,则合并当前分支配置为用作其的远程跟踪分支 上游。另请参阅本手册页的配置部分。

    当指定FETCH_HEAD(且没有其他提交)时,将先前调用git fetch合并到.git/FETCH_HEAD文件中记录的分支合并到当前分支。

    【讨论】:

      【解决方案4】:

      可以使用以下:

      git pull origin origin-branch-name:local-branch-name
      

      以上将源分支与本地分支合并

      git merge another-local-branch:another2-local-branch
      

      它应该(未测试)合并两个不同的分支,同时保持活动完整

      【讨论】:

        猜你喜欢
        • 2017-12-10
        • 2011-12-17
        • 2015-07-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-18
        • 2021-05-17
        相关资源
        最近更新 更多