2012-05-01 10 views
11

gerritを使用すると、デフォルトですべての変更は前のものに依存するように見えます。私は新しい変更のためにブランチしません、私は単にマスターブランチをオフにし、コミットされた変更をリモートの原点/マスターにプッシュします。依存関係は、2つのコミットが互いに関係しなくても毎回作成されます。gerritで偽の依存関係を取り除く方法

私はgerritと組み合わせてgitを正しく使用していないと思ういくつかの問題に遭遇しました。

私のgit/gerritワークフローで、すべてのコミットが前回のコミットに依存しないようにするにはどうしたらよいでしょうか?これは動作しますが、ゲリットはまだ以前にコミットした項目への依存を報告

> git pull origin master 
> git checkout -b new_branch 
> #make a change 
> git add -A 
> git commit #with gerrit's commit hook in .git/hooks 
> git push origin <sha1>:refs/for/master 

:私はまた、変更のための新しいブランチを作成しようとしました。

+0

私はあなたが何を求めているのか分からない。 「依存関係」とはどういう意味ですか? – ebneter

+0

Gerritは、どの問題が依存するか/依存関係を示しています。例えば、私はgerritに問題#1をチェックインし、同じファイルには触れない完全に異なる#2をチェックインします。 #2は#1に依存しているとGerritは報告しています。これは間違っているようです。 – Shellum

+0

git rebase -iを使って自分自身の依存関係を削除することも、依存関係を取り除く方法になります。 – cafebabe1991

答えて

13

これは何であるかGerritは依存関係を意味します - コミットは別のコミットの上にあります。両方がレビュー中の場合、新しいものは古いものに依存します。

お互いに頼りすぎないようにするには、お互いの上にコミットを作成しないでください。 1つのコミットを作成し、次のコミットのためにマスターに基づいて新しいブランチを作成します。

(git checkout origin/master -b NEW_BRANCH_NAME)

レビュー用に2番目のコミットをプッシュすると、その親は既に公開されており、何も依存しません。

+0

私は各コードの変更のための分岐の言及を見たことが...私の編集した質問のように、これはまだ同じ結果を生成するようです。これ以上のアイデアは? – Shellum

+7

ブランチを作成するコマンド(git checkout -b new_branch)は、現在のコミットの上に新しいブランチを作成します。サーバーが現在コミットしているものにリセットしたいので、checkoutコマンドで指定します。git checkout * origin/master * -b new_branchです。 – Brad

+1

@Bradあなたのコメントは理にかなっています。 git-checkoutのドキュメントには、最後のパラメータとして開始点があることを指摘したかっただけです。 git checkout [-q] [-f] [-m] [[-b | -B | -orphan] ] [] だからあなたの例では、次のようになります。 Gitチェックアウト-b new_branch _origin/master_ – Plazgoth

0

私はの後にgit reset --hard HEAD~1を実行してこれを回避するよう教えられました。 git reset --hard HEAD~1への変形として

+3

あなたはこれが間違っていると思われる理由、誤情報を永続させないように、より良く知らせるためにコメントしますか? – Mitch

+3

このアプローチの問題は、プッシュした後に完全にコミットを取り除くことです。さて、あなたはgerritに関する反復的なレビューをしている、あなたはコメントに基づいて前のコミットを変更することができます。このアプローチでは、チェリーに変更を取り入れて、それに取り組むことができるようにする必要があります。 私は大規模な修正を行い、そのコードでセットアップを実行するように分岐した場合には、これが困難であることがわかりました。マイナーな修正プログラムを同じコード行にプッシュしたい場合は、このマイナーな修正プログラムの主なコミットを失いたくないので、レビューに基づいてさらに多くの変更を加える可能性があります。 –

+1

全く問題ありません。プッシュされたすべてのコミットは、サーバーおよびローカルに格納されます。あなたは1つで作業し、それを押してから別のワークで作業します。あなたが1つにフィードバックを得て、それをもう一度修正したいときは、それをチェックアウトして作業してください。ブランチの名前を付けるのは便利ですが、それ以上のことはありません。 – clacke

0

私の代わりにこれを使用する:

git reset --hard origin/master 

は、私はクイックチェンジのためにmasterで働いている、と仮定。

それ以外の場合は、トピックブランチで作業する方がはるかに優先します。

トピックブランチの管理を支援するために多くのGitのスクリプトがあります。

私は他の人があることを確認しています。

+0

私は "git reset - hard origin/master"が優れていると思います。上記のコマンドはエラーを出して、スペースを与えた後に働きました。 –

関連する問題