2017-11-30 2 views
0

私のローカルリポジトリで私はコードに多くの変更を加えました。それをやりながら、私は何度か引っ張って、さまざまなブランチを作成し、何度もコミットし、マージしました。しかし、良いことは、私がやったことがすべて、私はローカルでしかなかったということです。私はリモートリポジトリにプッシュしたことはありません。したがって、私が行ったgitの複雑な操作にもかかわらず、私はまだ非常に単純な精神的な画像を持っています:(1)リモートリポジトリにコードがあり、(2)今、私はすべてを次のようにしてきれいにしたい:多くのコミットを1つに結合し、2つまたは3つに分割する方法はありますか?

  1. リモートとローカルのリポジトリのコードの違いを知りたい。
  2. 私はを一緒に持っているすべての変更をパックしたいので、コミット(1つのコミットメッセージで)から来るように見えるようにします。私は遠くのリポジトリに行くために私が今までに生成したすべてのコミットメッセージを望んでいません。
  3. 私はまた、2つまたは3つの部分(それぞれが対応するコミットメッセージと別のコミットとして来る)で私の変更を分割したいと思うかもしれません。

gitで行うことはできますか?そして、それが事実なら、どうすればいいのですか?

+0

具体的な問題は何ですか? – mkrieger1

+0

1. git diffの起源 2. git cherry-pick 3.「私の変更を分ける」ということはどういう意味ですか? – jburtondev

+0

私はいくつかの具体的な問題を抱えていると思います。(1)正確に何を変更したのですか?(2)すべてのコミットを1つにまとめる方法、3)コミットを複数に分割する方法。 – Roman

答えて

0

git rebaseがお手伝いします。まず、コミット最新のを離れて分割する

$ git reset HEAD~ 

あなたは、あなたが欲しい異なる部分をコミットすることができます。あなたが上にスカッシュ、その後、使用したいコミットハッシュ見つけ退治使用を使用することができます別のコミット参加するための

上記と同じ
git reset *mentioned_hash* 
1
  1. git fetch --all && git diff master origin/master
  2. git checkout -b new-master && git branch -D master && git checkout master && git merge --squash new-master
  3. を、しかし、マスターに戻る前にgit rebase -iを使用してnew-masterの履歴に書き換えてください

1は簡単です:リモートリポジトリから最新の変更を取得し、ローカルの変更を比較します。 masterが比較したいブランチであると仮定します。

2はより複雑です。ローカルの変更から新しいブランチを作成し、続いてローカルマスターを削除します(これも作業ブランチであると仮定します)。その後、マスターを再度チェックアウトし、リモート・リポジトリーのマスターブランチのコピーを取得します。次に、git merge --squashは、すべての変更をnew-masterから組み合わせて、master

に追加します。私はあなたがgit rebase

1

上に読むことをお勧めしますが、以下の状況にあると仮定します

o--o--o--o--o--o--o [remote branch] 
     \  \ \ 
     o--o (... lots of commits ...) o--o [your branch] 

は、お近くの支店やリモートブランチとの違いを調べるには、

$ git diff <your branch> <remote branch> 

を作成するために使用します1つまたは複数のコミットを行い、リモートブランチの上に作業を適用するには、次の手順を実行します。

  1. にリモートブランチが既に指していることをコミット作成し、同じでは新しいブランチに切り替える:

    o--o--o--o--o--o--o [remote branch] [new branch] 
         \  \ \ 
         o--o (... lots of commits ...) o--o [your branch] 
    
  2. コピー新しいブランチと、既存の違いを:これは、その結果

    $ git checkout -b <new branch> <remote branch> 
    

    インデックスへの分岐、新しいコミット準備:

    :あなたは満足していたら、コミットを作成

    $ git checkout -p <your branch> 
    

    をにあなたの新しいブランチをプッシュ

         o--o--o--o [new branch] 
            /
    o--o--o--o--o--o--o [remote branch] 
         \  \ \ 
         o--o (... lots of commits ...) o--o [your branch] 
    
  3. :新しいブランチと、既存のローカル枝の間には多くの違いがなくなるまで

         o [new branch] 
            /
    o--o--o--o--o--o--o [remote branch] 
         \  \ \ 
         o--o (... lots of commits ...) o--o [your branch] 
    

    繰り返しgit checkout -pgit commit:に結果の

    $ git commit 
    

    リモートリポジトリを作成したり、プルリクエストを作成したり、プロジェクトのワークフローが何であってもかまいません。

関連する問題