2016-12-14 8 views
2

私たちは、BitBucketの中央リポジトリを使用して、プロジェクトに取り組んでいる2人の開発者です。Git:プロジェクトに関連付けられたすべてのリポジトリの履歴をリセットするにはどうすればよいですか?

時々私は(私は、これは情報を失う知っている)特定のリビジョンに歴史をリセットしたい:

​​

これは正しく、私がしたいリビジョンに歴史をリセットします。しかし、2人目の開発者が同じことをしない場合、自分自身のリポジトリをリセットしないと、を作成する次のプッシュは、そのリセットで削除したすべてのコミットを追加します。

プロジェクトに2人の開発者しかいない場合、それほど悪くはありません。私はおそらく他のデベロッパーにそのローカルレポで同じリセットを実行するように依頼することができ、BitBucketの履歴は私が望むように残ります。しかし、私は方法がある場合はの力の履歴をリセットするすべてのリポジトリに関連する方法があるかどうかを知りたいですか? BitBucketに再び押し入る前に、2番目の開発者にローカルリポジトリを私のように再設定させる方法?

それとも私が何かを明らかに(私はGitのマスターはないよ)欠けている...

+1

ちょうど好奇心から、定期的にこれを行う理由は何ですか? – castis

答えて

4

あなたは、単には別々のブランチを作成リセットできます。

git checkout -b newBranch 0e827d5fcb7d9b 
git push -u origin newBranch 

新しいブランチを押すと、2番目のデベロッパーを気にすることなく、リセットして強制的にプッシュすることができます。あなたが戻ってプッシュする前に、彼/彼女の自身のワークスペースをリセットするために第二現像剤を強制したい場合は

しかし、あなたがする必要があります強制(コミット修正

  • (あなたがやっているよう)

    • リセット

      git commit --amend -m "reset branch" 
      
    • 力プッシュ

    )新しいSHA1を持つように0e827d5fcb7d9bコミット

    他の開発者からのプッシュは、デフォルトでは早送りではないとして拒否されます。
    彼らはフェッチして、origin/masterの上に自分のブランチをリベースする必要があります。または、彼らは新しい作業ツリーをupstream/masterにリセットします。

  • +1

    --amendでニースのトリック、そのような目的のために使用されて見たことがない –

    0

    いいえ、他の開発者に何かを強制する方法はありません。

    gitの支店が実質的なものではないことを理解している場合は、役立ちます。これは単に文字通りコミットを指す文字列です。それは構造もそれ以外のものもありません。

    git push --all --forceは、リモートのすべてのブランチの「付箋」をローカルリポジトリのどこにコミットしているかを指すように更新する以外は特別なことはありません。

    他の開発者に変更を適用させるには、git fetch ; git branch -D somebranch ; git checkout somebranchのようなものを通知して、自分のsomebranchという付箋を削除し、あなたのものと置き換える必要がありますリモートから)。 somebranchmasterになる可能性があります。masterブランチについてはまったく魔法がありません。コミットを指し示すちょっとしたメモです。

    あなたが言ったように、つまりresetに続いて強制的にプッシュすると、他の開発者と混乱を招きました。彼らは基本的にあなたの変更をそのまま、または同じファシィンで上書きするかのどちらかの選択肢しか持っていません。合併やその他の事柄は、混乱の中で終わる可能性があるので、疑問から外れる。

    1

    "中央"レポへの書き込みアクセス権を持つすべての開発者の現在のモデルでは、これは不可能です。

    しかし、このワークフロー全体は、あまりにも多くの開発者にとってうまく拡張されません。 reposの別のトポロジを検討したいかもしれません。それぞれの開発者はプライベートとパブリックのrepoを持っています。すべての開発者は、独自の公開リポジトリ(SSH)への書き込みアクセス権と、他の公開リポジトリ(HTTP?)への読み取り専用アクセス権を持ちます。

    各開発者は、自分の変更を自分の公開リポジトリにプッシュし、独裁者にそれを引き出すよう求めます。独裁者は、開発者の公開リポジトリから自分のローカルrepoを取り出し、支店を検査します。以前に削除されたコミットに基づいている場合、彼はそれを拒否します。

    これは、他人のものをマージする責任を持つ独裁者がプロジェクトに存在することを前提としています。独裁者のoriginは、彼自身の公開リポジトリを指し示し、彼は他の開発者の公開リポジトリから引き離すために他のリモートを持ちます。他の開発者は、プロジェクトの正式な状態を取得するために、独読者の公開レポを指し示す、最も遠隔の、upstreamとも呼ばれることもあります。

    関連する問題