GitHub forkリポジトリを更新するにはどうすればよいですか?


3606

私は最近プロジェクトを分岐し、いくつかの修正を適用しました。次にプルリクエストを作成し、それが受け入れられました。

数日後、別の貢献者によって別の変更が行われました。したがって、私のフォークにはその変更が含まれていません。

どうすればその変化をフォークに取り入れることができますか?貢献するためにさらに変更がある場合、フォークを削除して再作成する必要がありますか?または更新ボタンはありますか?


120
これはgithub UIからも実行できます。[この他のポスター] [1]にクレジットを付けたいと思います。[1]:stackoverflow.com/a/21131381/728141
Mike Schroll

2
これに関するもう1つの優れたブログ投稿
-GitHub

3
これはGithubヘルプ記事で見つかりました:help.github.com/articles/syncing-a-fork
Pranav


これは、2つのgithubアカウントを使用してこれを行うビデオデモですyoutube.com/watch?v=kpE0gTX4ycE
ライフバランス

回答:


3981

フォークしたリポジトリのローカルクローンに、元のGitHubリポジトリを「リモート」として追加できます。(「リモート」は、リポジトリのURLのニックネームのようなoriginものです。たとえば、1です。)次に、そのアップストリームリポジトリからすべてのブランチをフェッチし、作業をリベースして、アップストリームバージョンでの作業を続行できます。次のようなコマンドの観点から:

# Add the remote, call it "upstream":

git remote add upstream https://github.com/whoever/whatever.git

# Fetch all the branches of that remote into remote-tracking branches,
# such as upstream/master:

git fetch upstream

# Make sure that you're on your master branch:

git checkout master

# Rewrite your master branch so that any commits of yours that
# aren't already in upstream/master are replayed on top of that
# other branch:

git rebase upstream/master

masterブランチの履歴を書き直したくない場合(たとえば、他の人がそれを複製した可能性があるため)、最後のコマンドをに置き換える必要がありgit merge upstream/masterます。ただし、できるだけクリーンなプルリクエストをさらに行うには、リベースすることをお勧めします。


ブランチをリベースしたupstream/master場合は、GitHubの独自のフォークされたリポジトリーにブランチをプッシュするために、強制的にプッシュする必要がある場合があります。あなたはそれを行うでしょう:

git push -f origin master

-fリベースした後、初めて使用する必要があるだけです。


94
フォークはgithubにのみ存在し、githubにはWebインターフェイスを介してマージを行うためのツールがないため、アップストリームマージをローカルで実行し、変更をフォークにプッシュするのが正しい答えです。
Tim Keating

29
これが私がgithubでの作業で見つけた素晴らしいチュートリアルです:gun.io/blog/how-to-github-fork-branch-and-pull-request
Tim Keating

50
クリーンな状態で開始するために独自のマスターブランチをリベースする必要があるのではなく、別のブランチで作業し、そこからプルリクエストを行う必要があることに注意してください。これにより、今後のマージのためにマスターがクリーンに保た-fれ、バージョンを複製した可能性のあるすべてのユーザーを混乱させる履歴を書き直す必要がなくなります。
Mateusz Kowalczyk 2013年

11
rebaseコマンドの代わりに、私は次のコマンドを使用しました。 git merge --no-ff upstream/masterこれにより、コミットが最優先されなくなりました。
Steckdoserich

52
別のGit障害。このツールが分散コラボレーションをサポートすることになっているとしたら、なぜ基本的なワークフローを実行することがそれほど難しいのでしょうか。400万人と2200賛成票は、ツールが失敗したことを意味します。「元のGitHubリポジトリを「リモート」として追加できます -なぜこれを行う必要があるのですか?フォーク中にそれが行われないのはなぜですか?このツールの何がそんなに壊れているのですか?
jww

740

2014年5月から、GitHubから直接フォークを更新できるようになりました。これはまだ2017年9月のように動作し、しかしそれは歴史をコミット汚れにつながります。

  1. GitHubでフォークを開きます。
  2. をクリックしPull Requestsます。
  3. をクリックしNew Pull Requestます。デフォルトでは、GitHubはオリジナルをフォークと比較します。変更を加えなかった場合、比較するものはありません。
  4. switching the baseそのリンクが表示されたらクリックします。そうでない場合は、手動でbase forkドロップダウンをフォークに設定head forkし、をアップストリームに設定します。これでGitHubがフォークをオリジナルと比較し、最新の変更がすべて表示されるはずです。 ここに画像の説明を入力してください
  5. Create pull request予測可能な名前をプルリクエストに割り当てます(例:)Update from original
  6. まで下にスクロールしますがMerge pull request、まだ何もクリックしないでください。

これで3つのオプションがありますが、いずれもコミット履歴がクリーンではなくなります。

  1. デフォルトでは、醜いマージコミットが作成されます。
  2. ドロップダウンをクリックして[スカッシュしてマージ]を選択すると、間にあるすべてのコミットが1つにスカッシュされます。ほとんどの場合、これは望ましくないものです。
  3. をクリックするとRebase and merge、すべてのコミットが「一緒に」行われ、元のPRが自分のPRにリンクし、GitHubが表示されますThis branch is X commits ahead, Y commits behind <original fork>

つまり、GitHubウェブUIを使用して、アップストリームでリポジトリを更新し続けることができますが、そうすることで、コミット履歴が汚くなります。固執するコマンドラインの代わりに-それは簡単です。


19
これは1回うまくいきました。2回目にこのプロセスは同じように機能しませんでした。「ベースの切り替え」リンクが表示されませんでした。そして、「クリックしてプルリクエストを作成」をクリックすると、SOURCEリポジトリにPRが作成されました。私が欲しかったものではない..
javadba

29
「ベースの切り替え」リンクは存在しませんが、機能します(Marchi 2015)。[ベース]ドロップダウンを変更する必要があるので、どちらもフォークを指すようにすると、[リポジトリを比較]のプロンプトが表示され、目的の場所に移動します。
mluisbrown 2015年

8
2015年4月。ありがとう。「ベースへの切り替え」を取得しました。ただし、ステップ6は「プルリクエストの作成」->コメントの入力->「プルリクエストの作成」でした。元のコミットよりも1コミット前に終了します。
カートランド2015

5
@cartland(または他の人)-はい、「このブランチは1つ先のコミットです...」と書かれていますこれは何か心配ですか?そのメッセージを取り除くことは可能ですか?
RenniePet

11
更新または同期ボタンを押すだけで、それがより良くなることはありません!
変圧器

457

フォークの同期に関するGitHubの公式ドキュメントは次のとおりです。

フォークを同期する

セットアップ

同期する前に、上流のリポジトリを指すリモートを追加する必要があります。最初にフォークしたときにこれを行った可能性があります。

ヒント:フォークを同期すると、リポジトリのローカルコピーのみが更新されます。GitHub上のリポジトリは更新されません。

$ git remote -v
# List the current remotes
origin  https://github.com/user/repo.git (fetch)
origin  https://github.com/user/repo.git (push)

$ git remote add upstream https://github.com/otheruser/repo.git
# Set a new remote

$ git remote -v
# Verify new remote
origin    https://github.com/user/repo.git (fetch)
origin    https://github.com/user/repo.git (push)
upstream  https://github.com/otheruser/repo.git (fetch)
upstream  https://github.com/otheruser/repo.git (push)

同期しています

リポジトリをアップストリームと同期するには、2つの手順が必要です。最初にリモートからフェッチし、次に目的のブランチをローカルブランチにマージする必要があります。

フェッチ

リモートリポジトリからフェッチすると、そのブランチとそれぞれのコミットが取り込まれます。これらは、特別なブランチの下のローカルリポジトリに保存されます。

$ git fetch upstream
# Grab the upstream remote's branches
remote: Counting objects: 75, done.
remote: Compressing objects: 100% (53/53), done.
remote: Total 62 (delta 27), reused 44 (delta 9)
Unpacking objects: 100% (62/62), done.
From https://github.com/otheruser/repo
 * [new branch]      master     -> upstream/master

これで、アップストリームのマスターブランチがローカルブランチであるアップストリーム/マスターに保存されました。

$ git branch -va
# List all local and remote-tracking branches
* master                  a422352 My local commit
  remotes/origin/HEAD     -> origin/master
  remotes/origin/master   a422352 My local commit
  remotes/upstream/master 5fdff0f Some upstream commit

マージ

アップストリームリポジトリを取得したので、その変更をローカルブランチにマージします。これにより、ローカルの変更を失うことなく、そのブランチをアップストリームと同期させることができます。

$ git checkout master
# Check out our local master branch
Switched to branch 'master'

$ git merge upstream/master
# Merge upstream's master into our own
Updating a422352..5fdff0f
Fast-forward
 README                    |    9 -------
 README.md                 |    7 ++++++
 2 files changed, 7 insertions(+), 9 deletions(-)
 delete mode 100644 README
 create mode 100644 README.md

ローカルブランチに一意のコミットがない場合、gitは代わりに「早送り」を実行します。

$ git merge upstream/master
Updating 34e91da..16c56ad
Fast-forward
 README.md                 |    5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

ヒント:GitHubでリポジトリを更新する場合は、こちらの手順に従ってください


1
これは私のローカルフォークを更新しますが、Github.com上の私のフォークはまだ「43コミット遅れ」と表示しています。私はlobzikのテクニックを使用して、マスター変更をGithub.comフォークにマージするための自分自身のプルリクエストを作成する必要がありました。
Michael McGinnis

11
@MichaelMcGinnisローカルでマージした後、変更をgithubにプッシュする必要があります。git push origin master
jumpnett 2015

1
プッシュするのが賢明かもしれません--follow-tagsstackoverflow.com/a/26438076/667847
kenny

1
私はすべてのブランチに対して別々git merge upstream/masterにそれをしなければならず、次にブランチを開発して実行するためにチェックアウトしますgit merge upstream/develop
Shobi

stackoverflow.com/a/14074925/470749Permission denied (publickey). fatal: Could not read from remote repository.、FacebookのGithubアカウントアップストリームから取得しようとしたときに取得していたため、役に立ちました。
Ryan

98

多くの答えは、あなたのフォークを親リポジトリの1つのコミットを移動させることになります。この回答は、フォークを親と同じコミットに移動する、ここにある手順を要約しています。

  1. ディレクトリをローカルリポジトリに変更します。

    • そうでない場合はマスターブランチに切り替えます git checkout master
  2. 親をリモートリポジトリとして追加し、 git remote add upstream <repo-location>

  3. 問題 git fetch upstream
  4. 問題 git rebase upstream/master

    • この段階で、マージするものをコミットすることを確認します。 git status
  5. 問題 git push origin master

これらのコマンドの詳細については、ステップ3を参照してください。


13
@MT:ただし、これらのコマンドはどこに入力しますか?質問の要点は、私が理解しているように、個人のGitHubフォークをメインプロジェクトと再同期し、これをすべてGitHubから行う方法です。つまり、ローカルリポジトリなしでリモートフォークを更新するにはどうすればよいでしょうか。
John Y

4
@JohnY GitHubを使用すると、常に追加のコミットが作成されます。この余分なコミットを回避するには、ローカルリポジトリのシェルでこれらすべてを実行する必要があります。
ジョナサンクロス

49

私のように、何も直接masterにコミットしない場合は、次のようにすることができます。

フォークのローカルクローンから、アップストリームリモートを作成します。あなたは一度だけそれをする必要があります:

git remote add upstream https://github.com/whoever/whatever.git

次に、上流のリポジトリマスターブランチに追いつきたいときはいつでも:

git checkout master
git pull upstream master

自分でマスターに何かをコミットしたことがないと仮定すると、すでに完了しているはずです。これで、ローカルマスターをオリジンのリモートGitHubフォークにプッシュできます。また、最新のローカルマスターに基づいて開発ブランチをリベースすることもできます。

最初のアップストリームのセットアップとマスターのチェックアウトが終わったら、次のコマンドを実行してマスターをアップストリームと同期させるだけです:git pullアップストリームマスター


48

序:フォークは「元」であり、フォークしたリポジトリは「上流」です。

次のようなコマンドを使用して、すでにフォークをコンピューターに複製したと仮定します。

git clone git@github.com:your_name/project_name.git
cd project_name

それが指定されている場合は、この順序で続行する必要があります。

  1. 「upstream」を複製したリポジトリー(「origin」)に追加します。

    git remote add upstream git@github.com:original_author/project_name.git
    
  2. 「上流」からコミット(およびブランチ)をフェッチします。

    git fetch upstream
    
  3. フォークの「master」ブランチ(「origin」)に切り替えます。

    git checkout master
    
  4. 「マスター」ブランチの変更を隠しておきます。

    git stash
    
  5. 「upstream」の「master」ブランチからの変更を「origin」の「master」ブランチにマージします。

    git merge upstream/master
    
  6. マージの競合があれば解決し、マージをコミットします

    git commit -am "Merged from upstream"
    
  7. 変更をフォークにプッシュする

    git push
    
  8. 隠された変更(ある場合)を取り戻す

    git stash pop
    
  9. 完了です!おめでとう!

GitHubはこのトピックの手順も提供しています:フォークの同期


1
一部支援:のgit remote add upstream git@github.com:original_author/project_name.git単なるエイリアスgit remote add upstream https://github.com/original_author/project_name.gitですか?
ウルフ

2
オオカミ、今ではこれを知っていると思いますが、後世のために...これはsshの形式です。help.github.com/articles/configuring-a-remote-for-a-fork
ブラッドエリス

2
どうもありがとうございました。git stashそしてgit stash pop一部非常に有用
सत्यमेवजयते

これはうまくいきました。アップストリーム/マスターのgitマージの後、私がgit add -Aを実行し、次にgit commit -m "message"を実行する必要があるマージされていないパスが原因で、自動マージが失敗し、最新でした。
highcenbug

45

2013年11月以降、GitHubで非公式の機能リクエストが開かれ、ローカルフォークをアップストリームと同期させる非常にシンプルで直感的な方法を追加するように依頼されています。

https://github.com/isaacs/github/issues/121

注:機能のリクエストは非公式なので、support@github.comこのような機能を実装するためのサポートを追加するために連絡することもお勧めします。上記の非公式の機能リクエストは、実装されていることに対する関心の高さの証拠として使用できます。


23

この回答の日付の時点で、GitHubはWebインターフェースにこの機能を備えていません(または、もう言う必要はありませんか?)。ただし、support@github.comそのための投票を追加するように依頼できます。

それまでの間、GitHubユーザーbardiharborowがこれを行うためのツールを作成しました: https ://upriver.github.io/

ソースはここにあります:https//github.com/upriver/upriver.github.io


2
私はツールを良いアイデアだと思いますが、現実はそれが壊れています。それは私のアカウントからたった20のリポジトリをロードしました、そしてフッターでさえ存在しないウェブサイトにリダイレクトしました。それが修正されれば、私は大きな支持者になります。
ソリン2016年

2
今日の時点で、アップリバーを使用してアップストリームリポジトリとフォークを同期させることに成功しているので、目的に応じて機能し、引き続き使用します。
NauticalMile 2017

1
@sorinこれらの20のリポジトリ/ブランチの制限(現在は30)は、GitHubのデフォルトのページング設定によるものです。これを処理するには、コードにいくつかの適応が必要です。
アンドレアス


11

実際には、ブラウザのアップストリームのコミットからフォークにブランチを作成することが可能です:

  • Open https://github.com/<repo>/commits/<hash>、ここでrepoはフォークで、hashはコミットの完全なハッシュで、上流のWebインターフェースで見つけることができます。たとえば、https://github.com/max630/linux/commits/0aa0313f9d576affd7747cc3f179feb097d28990を開くことができます。これlinux masterは、執筆時点を示しています。
  • 「ツリー:....」ボタンをクリックします。
  • 新しいブランチの名前を入力して、 Enter

ここに画像の説明を入力してください

その後、そのブランチをローカルクローンにフェッチできます。そのコミットの上に編集をプッシュするときに、すべてのデータをGitHubにプッシュする必要はありません。または、Webインターフェースを使用して、そのブランチの何かを変更します。

どのように機能するか(推測ですが、GitHubが正確にどのように機能するかわかりません):フォークはオブジェクトストレージを共有し、名前空間を使用してユーザーの参照を分離します。したがって、フォークの時点までに存在していなかったとしても、フォークを介してすべてのコミットにアクセスできます。


2
これは素晴らしい!これにより、githubへのこれらのコミットの完全に無意味なアップロードが回避されます。
Rotsor 2017年

9

以下の手順に従ってください。私はそれらを試しました、そしてそれは私を助けました。

ブランチにチェックアウト

構文: git branch yourDevelopmentBranch
例: git checkout master

最新のコードを取得するためにソースリポジトリブランチをプルする

構文: git pull https://github.com/tastejs/awesome-app-ideas master
例: git pull https://github.com/ORIGINAL_OWNER/ORIGINAL_REPO.git BRANCH_NAME


1
GitHubを使用している場合は、GitHubブランチに変更をプッシュすることもできます。 git push HttpsForYourForkOfTheRepo BRANCH_NAME
user3731622

9

次の1行で、分岐したリポジトリを更新します。

git pull https://github.com/forkuser/forkedrepo.git branch

他のソリューションがここに投稿されているため、プロジェクトに別のリモートエンドポイントを追加したくない場合は、これを使用します。


2
これには制限がありますか?つまり、最後の更新以降、コミット、マージ、プルリクエストを追加していない場合、またはプルリクエストをアップストリームにマージしていない場合にのみ適用されますか?
LightCC、2017

1
リモートブランチからの通常のプルのように機能します。ローカルリポジトリでXコミットを実行し、現在は元のリポジトリのYコミットである場合、Yコミットをローカルブランチにもたらし、おそらく競合を解決します。
R.Bravo 2017

1
@LightCCこれは、リモートを追加していないという事実を除いて、以前に追加されたリモートからのプルとまったく同じです。したがって、デメリットは、必要なときに毎回完全なリポジトリURLを入力する必要があることですpull
Marc.2377

1
これは、元のリポジトリから何度もプルする必要がない場合、またはフォークされたプロジェクトが比較的単純な場合に最適なソリューションです。
AxeEffect

7

この答えを補完するものとして、私はクローンされたリポジトリのすべてのリモートブランチ(origin)を上流のブランチから一度に更新する方法を探していました。これは私がやった方法です。

これは、ソースレポジトリ(オリジンが分岐された場所)を指すアップストリームリモートをすでに設定し、それをと同期していることを前提としています。git fetch upstream

次に実行します:

for branch in $(git ls-remote --heads upstream|sed 's#^.*refs/heads/##'); do git push origin refs/remotes/upstream/$branch:refs/heads/$branch; done

このコマンドの最初の部分は、上流のリモートリポジトリのすべてのヘッドを一覧表示し、SHA-1を削除し、その後にrefs/heads/ブランチ名のプレフィックスを付けます。

次に、これらの各ブランチについて、上流側のリモート追跡ブランチ(refs/remotes/upstream/<branch>ローカル側)のローカルコピーを、起点refs/heads/<branch>リモート側)のリモートブランチに直接プッシュします。

これらのブランチ同期コマンドは、次の2つの理由のいずれかで失敗する可能性があります。上流のブランチが書き直されたか、そのブランチのコミットをフォークにプッシュしたかのいずれかです。フォークのブランチに何もコミットしていない最初のケースでは、強制的にプッシュしても安全です(-fスイッチを追加します;つまりgit push -f、上記のコマンドで)。他のケースでは、これは正常です。フォークブランチが分岐し、コミットがアップストリームにマージされるまで、syncコマンドが機能することは期待できません。


6

「プル」アプリが自動セットアップと、忘れているソリューションを。フォークのデフォルトブランチをアップストリームリポジトリと同期します。

URLにアクセスし、緑色の[インストール]ボタンをクリックして、自動同期を有効にするリポジトリを選択します。

ブランチはGitHubで直接1時間に1回更新されます。ローカルマシンでは、ローカルコピーが同期していることを確認するためにマスターブランチをプルする必要があります。


2
基本的なセットアップでは、フォークされたリポジトリで行われた変更が失われる可能性があることに注意してください。変更を維持するには、構成ファイルを設定してを指定しますmergemethod。詳細はこちら
Saurabh P Bhandari

1
基本的なセットアップはプルリクエストを送信し、それらをマージすることに注意しました(ドキュメントに記載されているものとは対照的です)。これは少し面倒ですが、データ損失の問題を解決しますか?
krlmlr

4

Android Studioは、GitHubフォークリポジトリの操作方法を学習しました(コンソールコマンドで「上流」のリモートリポジトリを追加する必要さえありません)。

メニューVCSGitを開く

最後の2つのポップアップメニュー項目に注意してください。

  • GitHubフォークをリベース

  • プルリクエストを作成

それらを試してください。最初のリポジトリを使用して、ローカルリポジトリを同期しています。とにかく、「リモートGitHubフォーク」をクリックすると、Android Studioで親リモートリポジトリ(「アップストリーム」)のブランチにアクセスできるようになり、ブランチを簡単に操作できるようになります。

(「Git統合」および「GitHub」プラグインを備えたAndroid Studio 3.0を使用しています。)

ここに画像の説明を入力してください


4

フォークしたリポジトリのクローンを作成したら、クローンが存在するディレクトリパスとGit Bashターミナルの数行に移動します。

$ cd project-name

$ git remote add upstream https://github.com/user-name/project-name.git
 # Adding the upstream -> the main repo with which you wanna sync

$ git remote -v # you will see the upstream here 

$ git checkout master # see if you are already on master branch

$ git fetch upstream

そして、あなたは行ってもいいです。メインリポジトリで更新されたすべての変更は、フォークリポジトリにプッシュされます。

「fetch」コマンドは、プロジェクトを最新の状態に保つために不可欠です。「git fetch」を実行する場合にのみ、同僚がリモートサーバーにプッシュした変更について通知されます。

詳細なクエリについては、ここにアクセスできます


4

アップストリームを設定した場合。で確認してくださいgit remote -v。これで十分です。

git fetch upstream
git checkout master
git merge --no-edit upstream/master
git push

2

それは、リポジトリのサイズとそれをどのようにフォークしたかによって異なります。

それが非常に大きなリポジトリである場合、特別な方法で管理したいと思うかもしれません(たとえば、ドロップ履歴)。基本的に、現在のバージョンと上流のバージョンの違いを取得し、それらをコミットしてから、マスターに戻すことができます。

これを読んでみてください。大きなGitリポジトリを処理する方法と、最新の変更でそれらをアップストリームする方法について説明します。


2

@krlmlrの 回答に追加したいと思います

最初は、フォークされたリポジトリーには次の名前のブランチが1つありますmaster。新しい機能や修正に取り組んでいる場合は、通常、新しいブランチfeatureを作成して変更を加えます。

フォークされたリポジトリーを親リポジトリーと同期させたい場合は、次のように(機能ブランチでPullアプリの構成ファイル(pull.yml)を設定できます。

version: "1"
rules:
  - base: feature
    upstream: master
    mergeMethod: merge
  - base: master
    upstream: parent_repo:master
    mergeMethod: hardreset

これmasterにより、フォークされたリポジトリのブランチが親リポジトリと一緒に最新の状態に保たれます。featureフォークされたレポのmasterブランチをマージして、フォークされたレポのブランチを介して更新されたブランチを維持します。これは、featureブランチが構成ファイルを含むデフォルトのブランチであることを前提としています。

ここで2つmergemethodsが機能しhardresetます。1つはmaster、フォークされたレポのブランチの変更を親レポと強制的に同期させるのに役立ち、もう1つはですmerge。このメソッドは、featureブランチで行った変更とブランチでの強制同期によって行われた変更をマージするために使用されますmaster。マージの競合が発生した場合、プルアプリを使用すると、プルリクエスト中に次のアクションコースを選択できます。

mergemethods ここでは、基本的な構成と高度な構成、およびさまざまな構成について読むことができます

私は現在、ここでフォークされたリポジトリこの設定を使用して、ここでリクエストさた拡張機能が更新されままであることを確認してます。


1

フォークされたリポジトリを常に最新の状態に保つには、主に2つの点があります。

1.フォークマスターからブランチ作成し、そこで変更行います

したがって、プルリクエストが受け入れられると、貢献したコードがアップストリームで更新されたときにフォークされたリポジトリのマスターに存在するため、ブランチを安全に削除できます。これにより、マスターは常にクリーンな状態になり、新しいブランチを作成して別の変更を行うことができます。

2.フォークマスターが自動的に更新するようにスケジュールされたジョブ作成します

これはcronで実行できます。Linuxで実行する場合のコード例を以下に示します。

$ crontab -e

このコードをに配置しcrontab fileて、1時間ごとにジョブを実行します。

0 * * * * sh ~/cron.sh

次に、cron.shスクリプトファイルとssh-agentとのgit対話を作成し、以下のように期待します

#!/bin/sh
WORKDIR=/path/to/your/dir   
REPOSITORY=<name of your repo>
MASTER="git@github.com:<username>/$REPOSITORY.git"   
UPSTREAM=git@github.com:<upstream>/<name of the repo>.git  

cd $WORKDIR && rm -rf $REPOSITORY
eval `ssh-agent` && expect ~/.ssh/agent && ssh-add -l
git clone $MASTER && cd $REPOSITORY && git checkout master
git remote add upstream $UPSTREAM && git fetch --prune upstream
if [ `git rev-list HEAD...upstream/master --count` -eq 0 ]
then
    echo "all the same, do nothing"
else
    echo "update exist, do rebase!"
    git reset --hard upstream/master
    git push origin master --force
fi
cd $WORKDIR && rm -rf $REPOSITORY
eval `ssh-agent -k`

フォークしたリポジトリを確認してください。時々それは常にこの通知を表示します:

このブランチは<upstream>:master でもあります

ここに画像の説明を入力してください


0

これらのコマンドを使用する(幸運な場合)

git remote -v
git pull
git fetch upstream
git checkout master
git merge upstream/master --no-ff
git add .
git commit -m"Sync with upstream repository."
git push -v
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.