790

複数のブランチを持つプロジェクトがあります。私はそれらをGitHubにプッシュしてきましたが、他の誰かがプロジェクトに取り組んでいるので、GitHubからブランチをプルする必要があります。マスターでは問題なく動作します。しかし、誰かがブランチを作成したとしましょうxyz。GitHubからブランチをプルして、自分のxyzブランチにマージするにはどうすればよいですか?xyzlocalhost

私は実際にここに私の答えがあります: Gitでブランチをプッシュおよびプルします

しかし、「![拒否]」というエラーと「早送りしない」というエラーが表示されます。

助言がありますか?

4

13 に答える 13

931

しかし、「![拒否]」というエラーと「早送りしない」というエラーが表示されます。

これは、Gitがブランチからの変更を現在のマスターにマージできないためです。ブランチをチェックアウトmasterし、リモートブランチにマージしたいとしますother-branch。これを行うとき:

$ git pull origin other-branch

Gitは基本的にこれを行っています:

$ git fetch origin other-branch && git merge other-branch

つまり、pullaのfetch後には。が続きmergeます。ただし、pull-ingの場合、Gitは早送りマージを実行できる場合にのみマージします。早送りマージは、マージしようとしているブランチのヘッドが、マージするブランチのヘッドの直接の子孫であるマージです。たとえば、この履歴ツリーがある場合、マージすると早送りのマージになります。other-branch other-branch

O-O-O-O-O-O
^         ^
master    other-branch

ただし、これは早送りのマージではありません。

    v master
O-O-O
\
 \-O-O-O-O
         ^ other-branch

問題を解決するには、最初にリモートブランチをフェッチします。

$ git fetch origin other-branch

次に、それを現在のブランチにマージし(これを想定しますmaster)、マージの競合を修正します。

$ git merge origin/other-branch
# Fix merge conflicts, if they occur
# Add merge conflict fixes
$ git commit    # And commit the merge!
于 2009-11-10T19:17:47.140 に答える
356

リモートブランチを明示的に追跡するだけで、簡単git pullに必要な処理を実行できます。

git branch -f remote_branch_name origin/remote_branch_name
git checkout remote_branch_name

後者はローカル操作です。

または、フォークに関するGitHubのドキュメントにさらに適合します。

git branch -f new_local_branch_name upstream/remote_branch_name
于 2009-11-10T19:09:08.913 に答える
169

安全なアプローチは、最初にローカルブランチ(つまりxyz)を作成してから、リモートブランチをローカルにプルすることです。

# create a local branch
git checkout -b xyz

# make sure you are on the newly created branch
git branch

# finally pull the remote branch to your local branch
git pull origin xyz

リモートブランチをローカルブランチにプルできる構文は次のとおりです。

git pull {repo} {remotebranchname}:{localbranchname}

git pull origin xyz:xyz
于 2009-11-10T16:28:48.947 に答える
109

最良の方法は次のとおりです。

git checkout -b <new_branch> <remote repo name>/<new_branch>
于 2012-06-29T06:12:10.977 に答える
54

git fetchブランチの最新リストを取得します。

今、あなたはすることができますgit checkout MyNewBranch

終わり :)


詳細については、ドキュメントを参照してください:git fetch

于 2014-10-14T01:02:07.760 に答える
41

問題を完全に理解しているかどうかはわかりませんが、既存のブランチをプルすることはこのように行われます(少なくとも私にとってはうまくいきます:)

git pull origin BRANCH

これは、ローカルブランチがorigin/BRANCHから作成されていることを前提としています。

于 2009-11-10T16:23:46.693 に答える
17

簡単に言えば、GitHubからブランチをプルしたい場合the_branch_I_want

git fetch origin
git branch -f the_branch_I_want origin/the_branch_I_want
git checkout the_branch_I_want
于 2018-11-19T19:38:10.380 に答える
16

これは、他のブランチにマージする前にリモートブランチを取得するのに役立ちました。

git fetch repo xyz:xyz
git checkout xyz
于 2016-02-15T21:25:49.210 に答える
11

GitHubからブランチをプルするために使用できます

git checkout --track origin/the-branch-name

ブランチ名が完全に同じであることを確認してください。

于 2020-06-05T20:23:15.340 に答える
8

やった

git branch -f new_local_branch_name origin/remote_branch_name

それ以外の

git branch -f new_local_branch_name upstream/remote_branch_name

@innaMによって提案されたように。アップストリームバージョンを使用すると、「致命的:有効なオブジェクト名ではありません:」「upstream/remote_branch_name」と表示されました。コメントが示唆するように私はしませんでしgit fetch originたが、代わりに単に。に置き換えupstreamましたorigin。私はそれらが同等だと思います。

于 2018-07-25T15:44:58.663 に答える
4
git pull <gitreponame> <branchname>

通常、コードにリポジトリのみが割り当てられている場合は、gitreponameがoriginになります。

1つがローカルでもう1つがリモートのように2つのリポジトリで作業している場合は、gitremote-vからリポジトリのリストを確認できます。これは、現在のコードに割り当てられているリポジトリの数を示しています。

BranchNameは、対応するgitreponameに存在する必要があります。

次の2つのコマンドを使用して、リポジトリを追加または削除できます

git remote add <gitreponame> <repourl>
git remote remove <gitreponame>
于 2017-12-08T04:23:02.380 に答える
3

あなたもすることができます

git pull -r origin master

マージの競合がある場合は修正

git rebase --continue

-rはリベース用です。これにより、からの分岐構造になります

        v  master       
o-o-o-o-o
     \o-o-o
          ^ other branch

        v  master       
o-o-o-o-o-o-o-o
              ^ other branch

これは、よりクリーンな履歴につながります。注:すでに他のブランチをオリジン(または他のリモート)にプッシュしている場合は、リベース後にブランチを強制的にプッシュする必要があります。

git push -f origin other-branch
于 2017-08-28T09:10:46.930 に答える
2

あなたはで試すことができます

git branch -a

またはgit fetchブランチの最新リストを取得します。

git checkout theBranch//ブランチに移動します

git checkout -b "yourNewBranch"//ベース「theBranch」の独自のブランチで作業する

于 2021-11-24T03:12:06.553 に答える