2

私はしばらく Git を使用していますが、ブログやチュートリアルに何時間も費やしているにもかかわらず、いくつかの機能を理解するのにまだ苦労しています... :)

私は、上司が bitBucket でレポを作成した他の人々と一緒にプロジェクトに取り組んでいます。

私はそれをローカルに複製し、すでにいくつかのコミットを master ブランチに行い、他の人によっていくつかの変更をプルしました。私は今、長期的に修正を加えたいと思っています。それらのいくつかは master ブランチにプッシュし、残りは自分用に保持する必要があります。master ブランチを fork して、独自のバージョン (?) を持つことができると思います。

どのような手続きをすればよいのか、少し混乱しています。自分のブランチを作成する必要がありますか? またはフォーク?

私が正しければ、フォークすると別のバージョンが作成され、私の BitBucket アカウントに別のバージョンが作成されます。変更を行うには、これを自分のコンピューター (マスター ブランチ プロジェクトとは別のディレクトリ?) にコピーする必要があります。

一方、GIT の優れた機能は、すべての異なる既存のブランチを含む単一のディレクトリでローカルに動作し、あるブランチから別のブランチに切り替え、完了したらリモート リポジトリに変更をプッシュすることです (そして、場合によっては master ブランチに)。

決定する前に、皆さんにいくつか質問があります。

質問 1: フォークしたバージョンでファイルを変更した場合、それらをマスター ブランチにプッシュできますか? どうやって?

質問 2: 他のユーザーからの新しいコミット (マスター ブランチ上) をフォークされたバージョンに組み込むにはどうすればよいですか?

質問 4: フォークしたバージョンのリモート リポジトリは、マスター リポジトリと何か関係がありますか?

質問 5: フォークされたバージョンのコンテンツは、チームの他のメンバーに表示されますか?

誰かが私のためにこれを明確にすることができれば、私はたくさん感謝します!

ありがとうございました。

4

1 に答える 1

3

フォークなし:フォークは、(BitBucketで)独自のリポジトリを取得するためにBitBucketでそのリポジトリのクローンを作成しています:サーバー側のクローンです。
イラストについては、を参照してください。

フォークが必要になるのは、アップストリームリポジトリに直接プッシュできない場合のみです。フォークにプッシュし、アップストリームリポジトリにプルリクエストを送信します。
ここではそうではありません。

ブランチして、必要な唯一のBitBucketリポジトリ(書き込みアクセス権がある)にブランチをプッシュするだけです。

変更がある場合は常にmaster、ブランチとブランチの両方で公開する必要があります。

x--x--x(マスター=>オリジン/マスター)
       \
        y--y--c--y--c--y(yourBranch => origin / yourBranch)
  • 一般的なコミットが最初に表示されるように、上記のブランチを並べ替えます(インタラクティブなリベース)。
x--x--x(マスター=>オリジン/マスター)
       \
        c--c--y--y--y--y(yourBranch => origin / yourBranch)
  • git pull mastermasterローカルクローンが他の人がBitBucketで公開した最新のコミットを反映していることを確認するため)
x--x--x--x--x(マスター=>オリジン/マスター)
       \
        c--c--y--y--y--y(yourBranch => origin / yourBranch)
  • ブランチを上にリベースし、masterすべてがまだコンパイルされてテストに合格するかどうかをテストします
x--x--x--x--x(マスター=>オリジン/マスター)
             \
              c--c1-y--y--y--y(yourBranch => origin / yourBranch)
  • ブランチからの新しい共通コミットを次の場所にマージしますmaster
    git checkout master; git merge c1
x--x--x--x--x--c--c1(マスター=>オリジン/マスター)
                   \
                    y--y--y--y(yourBranch => origin / yourBranch)
  • git push mastermasterプッシュする前にプルしたので:ローカルmasterはBitBucketに対して最新でした' origin' master。プッシュはBitBucket側での些細なマージです:新しいコミットのみを導入しています)

  • git checkout yourBranch && git push -f origin yourBranch
    リベースしたのでyourBranch、その履歴を書き直したので、BitBucket側に強制的にプッシュする必要があります。
    しかし、それはあなたのブランチなので、それは大丈夫です(他の誰もそれから引っ張っていなかったでしょう、そしてあなたの新しい歴史を考慮に入れるためにそれをリセットする必要があるでしょう)。


rebase --interactive一般的なコミットを並べ替える手順を回避する別の方法は、からにcherry-pick直接コミットすることです。 しかし、私はさくらんぼ狩りが嫌いです。yourBranchmaster

于 2012-11-19T07:03:47.407 に答える