質問: sourcetreeを利用しているのですが、手違いで別のブランチに2つ連続で変更をプッシュしてしまったのですが これをもとに戻す方法はないでしょうか?下図のような感じです リベースするのはわかるのですが、sourcetreeでの手順を調べてもどういう手順かよくわかりませんでした 変更2(これが最新) ↑ 変更1 ↑ dev_dev201703
回答: 通常推奨される方法: ``` git revert {変更1のハッシュ} git revert {変更2のハッシュ} git push origin HEAD ``` これで変更1,2の **取り消しコミット** が作られ,pushすることでリポジトリの状態を戻すことが出来ます. 「変更2」の取り消しコミット(これが最新) ↑ 「変更1」の取り消しコミット ↑ 変更2 ↑ 変更1 ↑ dev_dev201703 あまり推奨されないけどコミットログが綺麗になる方法: ``` git reset --hard HEAD^^ // コミット2つ前にブランチのポインタを戻す - A git push -f origin HEAD // -f オプションで強制push - B ``` 変更2(これが最新) ↑ 変更1 ↑ dev_dev201703 // Aのコマンドでブランチのポインタをここに戻して,Bの操作でリモートに反映 解説: `HEAD` は,現在チェックアウトしているコミットハッシュのエイリアス. `HEAD` のうしろの `^` は 「HEADの前のコミット」を表す. `^` ひとつで1つ前のコミット.今回は2つ前のコミットに戻るので, `HEAD^^` となる. ちなみに,数字で指定することもでき. `HEAD^^ = HEAD~2` と表記できる