2011-12-30 3 views
4

私は2台のコンピュータAとBを持っており、gitはいくつかのファイルinit.elを同期させます。 Aのレポは公然としていません。 Bのレポはローカルです。
git:チェックアウトせずにプッシュする方法は?

  • Aのinit.elが変更されてプッシュされます。
  • Bのinit.elも変更されています。

質問です:BにAのすべてのファイルを展開せずに、 をBさんにAの変更をマージし、unfuddle(A)に最終init.elをプッシュする方法について説明します。

もっと良い解決策がありますか?

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

+0

強制押しオプションのgit bookをチェックしてください。 – jake

+0

@jake:これはBの変更をAからの変更で上書きします。これはOPの意図ではないと思います。彼は合併したい – Koraktor

+0

'' AのすべてのファイルをB "'に展開せずに、ファイルが大きすぎるので、ファイルをBに引っ張らないでください。 – Kjuly

答えて

0

いくつかのオプションがあります:

  • あなたはAの変更、git push -f origin masterを維持したくない場合。プッシュを強制すると、あなたから分岐してマージしたい人にはいくつかの問題が発生することに注意してください。
  • AとBの間の最後の共通コミットにソフトリセット(git stash)、プッシュ、マージ、スラッシュ(現在のコードでマージ)、コミット、プッシュ。その共通のコミット後に誰かがあなたから分岐してしまった場合、彼らは非常に簡単に元に戻すことはできません。
2

あなたはAで変更されたファイルを引っ張っしたくないのであれば、あなたは次のように行うことができます:B

新しいブランチを作成し、あなたのようにリモートサービス(unfuddle、それをプッシュします)言った:A

cd path/to/init.el 
git branch featureModifiedInB 
git checkout featureModifiedInB 
git push origin featureModifiedInB 

、マージ&紛争を管理、Bで作成したブランチの更新を引っ張っ:

cd path/to/init.el 
git pull origin featureModifiedInB // Or you can do fetch and manually do merging. 
git checkout master 
git merge featureModifiedInB 

// After solve the conflict if it exists. 
git push origin master 

Bを使用している人は、Aを使用している人が編集したファイルを見ることができません。しかし、これは問題を引き起こします:pBは、作成したコードに関するフィードバックを得ることができません。しかし、pAはfeatureModifiedInBブランチを修正し、pB(mum ..itはちょっと面倒です..)で引っ張ることもできます。

0

AとBが完全に無関係である場合(「AのファイルはBのファイルを認識していない、またはその逆の場合」を参照)、それらをマージする必要はありません。ちょうどAとBを押して、それらをマージしないでください。

さらに分離したい場合は、B.に作品を格納する別のリポジトリを作成します。unfuddleを使用してアクセスを許可/禁止します。

関連する問題