35

これが私をかなり悩ませているシナリオです。

Jack は foobar というソフトウェア ハウスで働いています。Jack はワーキング プログラマーであり、コーディングが大好きで、頻繁にコミットしています。jack のマネージャーである Paul は、新しいコード レビュー ツールである phabricator の使用を開始することを彼に伝えました。ジャックは同意し、ジャックはローカル ブランチを作成して作業を開始します。彼は頻繁にローカル ブランチに機能を追加し、コミットしています。1 日の終わりに、彼は phabricator リクエストを送信します。

arc diff development

jacks チームのメンバーである John は、自分のコードをレビューし、変更を受け入れます。ここで、Jack はターミナルを開き、自分のリポジトリ ディレクトリに移動します。Jack は次のコマンドを入力してリビジョンを閉じ、自分のコードを開発ブランチにマージします。

arc land --onto development

次のメッセージが表示されます。

Landing current branch 'feature-awesome-features'.
Switched to branch development. Updating branch...
The following commit(s) will be landed:

b2ff76e  Added the foo to bar
33f33ba  Added a really important check which can destroy the project or save it
31a4c9a Added that new awesome feature
8cae3bf rewrote that awful code john wrote
bc54afb  bug fixes

Switched to branch feature-awesome-features. Identifying and merging...
Landing revision 'D1067: Added the awesome feature'...
Rebasing feature-awesome-features onto development
Already up-to-date.
Pushing change...

ジャックは Github を開いて、自分のコード、美しいコミットを確認します。しかし、彼が見ているのは純粋な恐怖です。彼のすべてのコミットは、基本的にこのようなことを言っている単一のコミットに置き換えられました

Summary: Added the awesome feature

Test Plan:  do foo bar testing

Reviewers: John

Reviewed By: John

CC: Paul

Differential Revision: http://phabricator.foobar.com/D1067

ジャックは自分のすべてのコミットを見たいと思っているので、悲しんでいます。ジャックは、このコミットが自分をThe Hoarder のように見せていると考えていますが、彼はそうではありません。彼はこれを修正したいので、stackoverflow で質問に行きます。

That how may he prevent phabricator from eating his commit history.
4

7 に答える 7

19

asherkin's answer は、この動作の理論的根拠と、これがデフォルトである理由を説明しています。

その引数が説得力を持たない場合は、--mergeフラグを使用して、マージの代わりにマージarc landを実行できます。これらのマージは、ローカル コミットを破棄しません。--no-ff--squash

history.immutableで true に設定すると.arcconfig、デフォルトでマージされます。arc land--no-ff

gitの動作が気に入らない場合は、生のコマンドを使用することもできますarc land。便宜上のみ提供されています。

あなたの例では、5 つの個別のレビューを作成することをお勧めします。複数の異なるアイデアが実装されており、それらは関連性がなく、簡単に分離できるように見えます。レビュー可能なコードを書くを参照してください。バグ修正、スタイルの変更、新機能を 1 つの変更にまとめること買いだめです。

于 2013-12-24T16:08:32.013 に答える
10

git merge代わりにやなどのネイティブ git フローをgit push直接使用する必要があります。phabricator arc のドキュメントから:

変更が受け入れられたら、通常、それらをプッシュしてリビジョンを閉じます。arc には、これを支援するいくつかのワークフローがあります。

* squashing or merging changes from a feature branch into a master branch
* formatting a good commit message with all the information from Differential
* and automatically closing the revision.

これらのワークフローを使用する必要はありません。git push、hg push、または svn commit を実行してから、Web から手動でリビジョンを閉じることができます。

arc意図的にコミットを押しつぶしています。

于 2013-12-24T07:49:09.340 に答える
4

history.immutable: 作業コピーの履歴を決して書き換えないワークフローを使用するように arc を構成します。デフォルトでは、arc は Git の一部のワークフローで未公開の履歴の書き換え (コミット メッセージの修正、マージのスカッシュ) を実行します。違いについては、以下で詳しく説明します。

そのため、行を追加するだけです .arcconfig

"history.immutable": true
于 2016-02-18T10:18:47.537 に答える
0

--merge は、マージ コミットを作成するため機能しません。私は正しいことを行う --rebase を持つようにパッチを適用しましたが、arc の人々がこれを望んでいるかどうかはわかりません。

于 2018-06-15T09:53:53.647 に答える