web-dev-qa-db-ja.com

tortoisegitを使用してリベース(スカッシュ)を実行する方法

現在のブランチのスカッシュリベースの実行方法を取得できません。コンソールコマンドは

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つのコミットが行われます。

提案はありますか?

42
zerkms

前のいずれもしないでください!インターフェイスを使用して2つのコミットを結合するだけです。共有リポジトリで既にコミットを結合しないでください。見る: Right click 2 commits

49
regisbsb

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

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

サンプルスクリプトでは、ルートコミット 特殊なケース を押しつぶす/修正することに注意してください。ルートコミットにはステップ2で選択できる親がないため、上記のように動作しません。

52
sschuberth

Tortoise Gitを使用して、Aspoblaにレポジトリを保存しました(明らかにGitHubに似ています)。

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

だから、ここに私がそれを達成した方法があります:

1)Tortoise Gitを使用して、リポジトリのログを表示します。すべてのコミットを強調表示し、右クリックして、「1つのコミットにまとめる」を選択します。

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

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

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

cd [your repo folder]
git Push -f Origin

できた!

更新:

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

3
BuvinJ
  • Show Logに移動し、現在のコミットでタグを作成します(例:「tmp」)。
  • 変更したくない履歴の最初のコミットにハードリセットします。
  • すべてのコミットが表示されない場合は、ログの下部でAll Branchesを切り替えます。
  • 次に、すべての新しいコミットを選択して右クリックします:Cherry Pick selected commits...
  • これで、インタラクティブなリベースモードになりました。そこでは、対話型リベースに一般的なことを行うことができます。
1
armin.miedl