51

現在のブランチに対してスカッシュ リベースを実行する方法を取得できません。コンソールコマンドは次のようになります

git rebase -i HEAD~2

その後、通常どおりスカッシュします。しかし、TGit で同じことを行うにはどうすればよいでしょうか。

ケースを初期化するスクリプト

git init .
touch 1
git add 1
git commit -m "1"
touch 2
git add 2
git commit -m "2"
touch 3
git add 3
git commit -m "3"

その結果、スカッシュ後、3 つのファイルで 1 つのコミットが行われます。

何か提案はありますか?

4

6 に答える 6

64

これは、TortoiseGit 1.7.12 を使用して動作します。

  1. 対話型リベースを実行する作業ディレクトリを右クリックし、コンテキスト メニューからTortoiseGit[-> ] を選択します。Show log
  2. 表示された「ログ メッセージ」ダイアログで、リベースしたくない最新のコミットを右クリックしRebase master onto this...、コンテキスト メニューから選択します。
  3. 表示される「リベース」ダイアログで、Force Rebaseチェックボックスをオンにしてからコミットを右クリックしてPickSquash、などから選択するかSquash ALL、場合によってはチェックボックスをオンにします。
  4. Start Rebase成功するとボタンに変わりCommit、次にボタンに変わるボタンを押しDoneます。それらをすべて押します。

サンプル スクリプトでは、ルート コミットに squash / fixup することに注意してください。これは特殊なケースであり、ルート コミットには手順 2 で選択できる親がないため、上記のようには機能しません。

于 2012-09-26T19:29:38.227 に答える
5

これが私がTortoise Gitを使用してAssemblaにレポを保存したことです(これは明らかにGitHubに似ています)。

コミット履歴全体を効果的に削除し、リポジトリを最初からやり直すことにしました。ローカルの git フォルダーと対応する Assembla のリポジトリを削除してから再作成することもできましたが、これを「正しい方法」で行う方法を見つけたほうがよいと考えました。

だから、これが私がそれを達成した方法です:

1) Tortoise Git を使用して、リポジトリのログを表示します。すべてのコミットを強調表示し、それらを右クリックして、「combine into one commit」を選択します。

2) ポップアップするダイアログで、コミット コメント (以前のすべてのコメントの組み合わせになります) を削除し、REBASE などの単一のコメントに置き換えます。次に、コミットを開始します。ローカル リポジトリは、削除して再作成する必要なく、効果的にゼロから開始されます (もちろん、すべてのファイルが追加されたままです)。

3) 残念ながら、Assembla にプッシュすることはできません。あなたの「頭」はリモートブランチの後ろにあると主張して、これを拒否します。それを解決するには、まず、Assembla のレポの「設定」ページに移動します。「–force プッシュを許可」を有効にします。

4) 「強制プッシュ」を実行します。Tortoise Git にこのための gui オプションがあるかどうかはわかりませんが、コマンド プロンプトから簡単に実行できます。

cd [your repo folder]
git push -f origin

終わり!

アップデート:

TortoiseGit で「プッシュを強制」するには、プッシュ ダイアログに「既知の変更」と「不明な変更」を強制するチェックボックスがあります。違いはわかりませんが、どちらも git --force スイッチを使用することになります。最初に「既知の変更」を試してください。

于 2015-08-07T14:33:37.457 に答える
1

これは、Rebase ウィンドウから実行できます。このビデオはそれをよくカバーしています: https://youtu.be/qrMubRPkkrE?t=490

ビデオに示されているように:

  1. 右クリックTortoiseGit/Rebase...
  2. Upstream:に変更FETCH_HEAD
  3. Pick ALLに変更Squash ALL
  4. クリックStart Rebase
于 2021-01-21T22:39:07.613 に答える
0

1 つの方法: ログ ダイアログに移動して "rebase into *" を選択し、"Force" チェックボックスをオンにして "squash" のコミットをマークします (たとえば、'q' と入力します)。

于 2012-09-21T15:54:59.050 に答える