別のリモートを追加せずにフォークの同期を保つにはどうすればよいですか?


302

someone/foobar私がフォークしたGitHubにリポジトリがあるとしましょうme/foobar

別のリモート追加して定期的にそこからプルすることを忘れに、新しいコミットを親リポジトリから直接フォークプルするにはどうすればよいですか?

目標は次のとおりです。

  • git pull 親リポジトリからフェッチする
  • git push すべてを私のフォークに送る

26
@Olufemiによる意外な答えは、ChristianGoschがコメントでメモしているように、ブランチの上部に「マージコミット」が表示され、「比較するもの」が表示されないことを除いて、望みどおりの動作をしているようです。ブランチを作成してプルしたい多くのプロジェクトでは、それは受け入れられないようです。では、パーソナルコンピュータで難解なgitコマンドを実行せずに、githubでこの最も基本的なコントリビューターワークフローを実行する方法は本当にありませんか?または多分私は貢献したいたびに私のリポジトリ全体を捨てて再フォークするべきですか?
nealmcb 2014




@nealmcbリベースすれば、ブランチの上部にある「マージコミット」の問題は回避されませんか?
マルコ

回答:


586

フォークされたGitリポジトリーme / foobarを開きます。

比較をクリックしてください

こちらがページのサンプル画像です

通知が届きます。

比較するものは何もありません。
someone:masterは、からのすべてのコミットで最新の状態です me:masterです。比較のためにベース切り替えてみてください。

クリック このページでベース切り替えるをてください:

ここにページの例があります

次に、分岐した日の後に、誰か/ foobarに対して行われたすべてのコミットを確認できます。

クリック プルリクエストの作成]をます

こちらがサンプルページです

プルリクエストにタイトルと説明を入力し、[ プルリクエストを作成 ]をクリックします

次のページで、ページの一番下までスクロールし、プル要求のマージをクリックします確認マージを

Gitリポジトリ me / foobarが更新されます。

編集:リベースオプションは次のとおりです。

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


50
ベースのgithubを切り替えると元のリポジトリのページが表示され、上流のフォークでプルリクエストを開いているように見えるので、これは混乱を招きます。しかし、それは完全に機能します。
エドゥアルド

8
上記の混乱を避けるために、Editボタンをクリックして手動でbase forkto me/foobarhead forktoを切り替えることをお勧めしsomeone/foobarます。このように、それは非常に明確です
マセマー14

26
もう1つ:これがまだ行われていない場合は問題なく機能しますが、その後、コミット履歴の上に「マージコミット」があります。したがって、「比較対象なし」は表示されません。代わりに、「編集」ボタンを使用して、ベースとフォークを手動で入れ替えて機能させる必要があります。
クリスチャンゴッシュ2014年

26
そのばかげたマージコミットを取り除く方法はありませんか?
kumarharsh 2015年

17
@kumar_harsh 2016年9月以降、プルリクエストの「リベースとマージ」オプションがあり、マージコミットを回避しています。
厄介な2017

41
git remote set-url origin git@github.com:someone/foobar
git remote set-url origin --push git@github.com:me/foobar

ただし、注意点が1つあります。
これは、フォークを変更するのが1人だけの場合に最適です。
ただし、他の人と共有している場合は、フォークからプルする必要があります。その場合はがあります。、別のリモートが唯一のソリューションです。

編集:
実際には、警告を取り除くことができ ますgit pull git@github.com:me/foobar
どちらを選択するかは、覚えやすい方です。


8

そのために、GitHub Web UIを使用するかなり単純な方法を使用しました。

  1. 元のGitリポジトリを開きます(フォークされたGitリポジトリではありません) me/foobar
  2. srcフォルダーに移動し、変更するファイルを開きます
  3. ペンのアイコンをクリックします。マスターリポジトリの現在のバージョンに基づいて、「patch-1」という名前の個人用フォークにラベルが自動的に作成されます。 ここに画像の説明を入力してください
  4. 楽しい! ここに画像の説明を入力してください

3
これを試して、基本的に元のgitリポジトリのファイルでエディターを開きます。元のgitリポジトリに(設計上)書き込み権限がありません。この方法ではファイルを変更する必要があるようです。それ以外の場合、ファイルを「保存」する方法はありません。ファイルを保存しないと、「patch-1」ブランチに相当するものをフォークしたリポジトリに表示できませんでした。ここで何が欠けていますか?
Electro-Bunny

5

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

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

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

https://stackoverflow.com/a/58965171/946850でも回答されています


1

別のオプションはUpdate from upstreamRepoName/master、GitHub for Macのボタンを使用することです(私はWindowsのGitHubを想定しています)。

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


TIL:ウェブインターフェース以外にもGitHub用のアプリがあること:-) [そして、それらのエクスペリエンスが統合されていないのは残念です]
Tom Goodfellow

私はこれをWindowsで見ません
Denis

1
@Denisこれは彼らの古いアプリです。彼らの新しいアプリがそれを持っているかどうかはわかりません。
Steve Moser

あは。これは「GitHubデスクトップ」で動作しました(Macの場合、Windowsについては不明)。
michaelok

0

別のリモートを追加せずにそれを行う方法はわかりませんが、私はフォークしたレポをupstreamリモートとして常に追加するので、簡単に行うことができます。

git branch -a|grep remotes/upstream| while IFS="/" read p r b; do echo Syncing $r/$b to origin/$b; git push origin $r/$b:refs/heads/$b; done

これにより、すべてのブランチが同期されます。新しいrefs/heads/ブランチを作成する(既存のブランチのみを更新するために削除します)。分岐のいずれかが分岐すると、その分岐に対してエラーがスローされます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.