2016-04-07 4 views
2

チケットごとに新しいブランチを作成します。チケットが完了すると、ブランチはマスターにマージされます。各チケットブランチには通常、複数のコミットがあります。クリーンなブランチを取得するために、コミット間で変更が移動しますか?

は、読みやすさとテストのために、私が作成しようとすることをコミット:

  • は一つだけ話題に
  • 焦点アトミックです

は時々私が知っている解決策に壊れません私がブランチでやろうとしていることを正確に事前に確認してください。たとえば:

  1. 訪問者の登録のためのバックエンドAPIを作成
  2. リファクタリング訪問者の分類機能
  3. 訪問者の登録のためのフロントエンドを作成し
  4. 簡単な訪問者登録確認ページを作成します

しかし、非常に頻繁に、私はトピックを前回のコミットに含めるべきであるという改善を行う機会を発見します。上記の例を続けると、コミット2では、「訪問者」がより良い名前になったと思うときに変数を「v」に変更したことがわかります。

私はどちらも悪いと思う2つのオプションのどちらかを選択します: - 私はすでにコミット2で変更されたものを変更するコミット5を作成します。テストとプロジェクト履歴の読みやすさを混乱させるので、このオプションは悪いと思います。 - 私はコミット2-4をリセットしてやり直しました。後で気づいた改善をコミット2に挿入しました。これには時間がかかるので、このコミットは悪いと思う。

私は、2番目のオプションが優れたコミット履歴を生成すると思いますが、それには時間がかかります。

これは私の質問につながります。この変更をコミット2に移行する方法はありますか?

私は、Webstormのdiffインターフェイスに似たインターフェイスを夢見ています(どこに変更を加えて元に戻すことができますか)が、変更を設定したいコミットを選択することもできます。

どのような解決策がありますか?

答えて

1

あなたは(rebaseを使用してアクティブ)これらのアルゴリズムを使用することができます秒から始まる追加のブランチを作成

  • をコミットし、新しいブランチに切り替える第五初期ブランチから変更を適用
  • このブランチにコミット追加(第三及び第四のコミット)
  • スカッシュは、第2及び第5

コミットより詳細には


下記のアルゴリズムは、我々は、このようなgitのログ出力を持っていると仮定しましょう:

git log --pretty=format:"%h %s" --graph 
* 43e94d8 fourth commit 
* 8bfc119 third commit 
* d5c9a25 second commit 
* e17b227 first commit 

その後、我々は、第二のコミットから新しいブランチを作成します。

git branch feature-to-change d5c9a25 
git checkout feature-to-change 

そして、第五の作成します機能を変更するブランチにコミットし、その上に3番目と4番目のコミットを適用します。

# create and commit fifth commit 
git log --pretty=format:"%h %s" --grap 
* 86660c9 fifth commit 
* d5c9a25 second commit 
* e17b227 first commit 

git rebase feature-to-change feature 

git log --pretty=format:"%h %s" --graph 
* ee0a502 fourth commit 
* 2e0e2c6 third commit 
* 86660c9 fifth commit 
* d5c9a25 second commit 
* e17b227 first commit 

は、今、私たちは適切な順序でコミットをして、私たちは、第二スカッシュ第五あなたはこれらのステップは多くを取ることはありません。この歴史

git log --pretty=format:"%h %s" --graph 
* 758d85c fourth commit 
* 3761310 third commit 
* ee739dd second commit 
* e17b227 first commit 

を取得します退治した後

git rebase -i HEAD~4 

    pick d5c9a25 second commit 
    squash 86660c9 fifth commit 
    pick 2e0e2c6 third commit 
    pick ee0a502 fourth commit 

をコミットする必要があります時間があり、最後にブランチを取得するfeature-to-changeコミットの履歴がかなりある

+0

投稿されたプロセスは、私が望むより複雑ですので、まだ解決策としてマークしません。数日後に簡単な回答が掲載されなければ、その答えを解決策としてマークします。良い答えをお寄せいただきありがとうございました。 – user1283776

関連する問題