2016-11-07 11 views
2

gitを使ってプロジェクトに取り組んでいます(チームメイトなし、私だけ)。 私はコミットを行い、それらをマージしてリモートにプッシュしています(後でリベースして履歴を修正することを覚えていることをすべて邪魔しています)ので、すでにリモートにあるすべての変更をリベースしたい1ユーザー)、rebaseによって私はいくつかのコミットをスカッシュして名前を変更したいということです。ここで、私はHow to squash commits in git after they have been pushed? ...彼らは、このリンクで勧めのコマンドを使用していたが、問題は、私はいくつかのエラーを取得し、私はそれを理解しないということであるgitを押してもコミットできません - Visual studio

は、問題を示すスクリーンショットは以下のとおりです。

image - git cmd rebasing error

TEXT AS

image - part of visual history tree

=========================== ERROR ============== ==================

コマンド使用:

=========

interactive rebase in progress; onto 9bdd944 
Last commands done (15 commands done): 
    pick 7af3656 "commit message" 
    pick 7355eff "another commit message" 
Next commands to do (110 remaining commands): 
    pick fc10330 "another commit message" 
    pick f22d8c0 "another commit message" 
You are currently rebasing branch 'master' on '9bdd944'. 

nothing to commit, working tree clean 
The previous cherry-pick is now empty, possibly due to conflict resolution. 
If you wish to commit it anyways, use: 

    git commit --allow-empty 

Otherwise, please use 'git reset' 
Could not apply 7355eff... "another commit message" 

git rebase -i origin/master~2 master 

エラーメッセージを(それが唯一の2コミットを示す必要がありますが、何らかの理由でそれが40以上のように、2つ以上を示しています) ==================テキストとしてのエラー=========================== ===

私はこの問題を解決するのに役立つヒントは、私はgitを使用して新しく、これはいくつかの先進的なユーザーのために簡単になります賭けていただければ幸いです。あなたは簡単にこれを行うことができます

+0

エラーをテキストとして送信してください。誰もあなたの画像を読むことができません... –

+0

投稿した画像から「スクワッシュ」の代わりに「ピック」を選んだようです...すべてを「ピック」しただけでは、現在のコミットが再適用されます...代わりに各行を編集し、アクションを「s」または「squash」に設定します。 – jessehouwing

+0

@umläute申し訳ありません、私はそれを知らなかった、私は今テキストとして投稿します..... – lbtg

答えて

1

もう一つの方法は、発行することです:

git reset -soft d0b8a84d 
git commit -m "squashed everything after d0b8a84d" 
git push -f 

これは最初のバックコミット言及し、本質的に「元に戻す」であるすべての変更に履歴がリセットされますが、彼らはまだ上の保存されていますステージング領域。

これで、すべての変更を一度にコミットしてコミットします。

次に、それらをリモートに戻します。既に公開されている履歴を書き換えているので、力が必要です。


Gitのリベースを行うこともできますが、あなたがしたいすべてが単一のコミットに特定のポイントの後、すべてのコミットを圧縮している場合は、上記の方がはるかに簡単です。マージの場合、rebaseはすべてのコミットを引き込みます。

特定のコミットを組み合わせたり、古いコミットなどのコミットメッセージを変更する場合は、対話型のリベースがより強力です。しかし、あなたの場合、上記の方法は非常に簡単です。

+0

はい、私がやってみたいのは、コミットをスカッシュして名前を変更することです。私の履歴には200件のコミットがあり、最大3回のマージがあります。私はあなたの提案を試してみるか、それがうまくいくか、後で結果を投稿する – lbtg

+0

私はすでにそれを試しましたが、コミットの最初のグループにはうまくいきますが、2番目のグループでもう一度やりたいのですが、最初のグループのコミットメッセージが失われます。 – lbtg

+0

ええ、その場合は、リベースを使用する必要があります。そして、マージをリベースするときは、リベースするときに実際のマージをやり直す必要があります。多くのデータをクリーンアップする必要があるときは、かなり不快に感じることがあります。 – jessehouwing

関連する問題