23204
リモートリポジトリをcloneし、ローカルでトピックブランチを切ってそこで開発をしています。  
ちょっとした機能の完了や一日の終わりといったタイミングでちょくちょくコミットしているのですが、  
リモートリポジトリにpushする前にトピックブランチのコミットを１つにまとめて  
「１タスクの完了」という粒度にしたい場合のベストプラクティスを教えて下さい。

またトピックブランチでの開発完了のみならず「そろそろまとめとくか」というタイミングで  
ブランチ内の幾つかのコミットを１つにまとめる、という使い方がしたいと考えています。

rebaseだとトピックブランチが統合されて消えてしまう為使えませんでした。
CC BY-SA 3.0
2016-03-16T15:32:01.393
23203
2016-03-17T09:38:55.480
11050
question
git
gitでpush前にローカルのcommitをまとめたい
ベストプラクティスというか、「ローカルのコミットを操作する方法」はそもそもいくつか存在します。今回のケースにで一番使いやすいのは rebase
だと思います。

rebase だとトピックブランチが統合されてしまうということですが、多分こんな使い方をしたのではないでしょうか。

```

    # トピックブランチ上で
    git rebase develop
    
```

そうではなくて、

```

    git rebase -i $(git merge-base HEAD develop)
    
```

で、「interactive な rebase 」を起動し、最初のコミット以外を "squash"
すれば、やりたいことは達成できると思います。そのやり方は、検索すればいくらでもでてくるとはおもいますが、たとえば[このページ](http://tkengo.github.io/blog/2013/05/16/git-
rebase-reference/) などはどうでしょうか。

* * *

ただ、そこまで git の操作に自信がない、ということでしたら、そもそもコミットするタイミングで、

```

    git commit --amend
    
```

でもってコミットして、「直前のコミットを直に書き換える」ことを繰り返していく方が、解りやすいかとは思います。
CC BY-SA 3.0
2016-03-16T16:05:43.147
23204
2016-03-16T16:12:01.353
2016-03-16T16:12:01.353
754
754
23203
answer
私はこういう場合  
`git reset`の`--mixed`または`--soft`を使用して、新しくコミットを作りなおしています。

参考：<https://stackoverflow.com/a/3528483/1979953>

SourceTree（Version2.2.3）を使用しているので、  
まとめたい位置のコミットで右クリックして  
`Reset ブランチ名 to this commit`を選択し、  
`Soft`また`Mixed`を選択しています。（間違っても`Hard`は選択してはいけません。消えてしまいます）

[![画像の説明をここに入力](https://i.stack.imgur.com/dYrBf.png)](https://i.stack.imgur.com/dYrBf.png)
CC BY-SA 3.0
2016-03-17T09:31:35.543
23220
2016-03-17T09:38:55.480
2017-05-23T12:38:56.467
-1
9008
23203
answer