GITリポジトリを以前のコミットに戻すにはどうすればよいですか?
-
29-09-2019 - |
質問
現在の状態から特定のコミットで作成されたスナップショットに戻すにはどうすればよいですか?
私が行った場合 git log
, 、次の出力を取得します。
$ git log
commit a867b4af366350be2e7c21b8de9cc6504678a61b`
Author: Me <me@me.com>
Date: Thu Nov 4 18:59:41 2010 -0400
blah blah blah...
commit 25eee4caef46ae64aa08e8ab3f988bc917ee1ce4
Author: Me <me@me.com>
Date: Thu Nov 4 05:13:39 2010 -0400
more blah blah blah...
commit 0766c053c0ea2035e90f504928f8df3c9363b8bd
Author: Me <me@me.com>
Date: Thu Nov 4 00:55:06 2010 -0400
And yet more blah blah...
commit 0d1d7fc32e5a947fbd92ee598033d85bfc445a50
Author: Me <me@me.com>
Date: Wed Nov 3 23:56:08 2010 -0400
Yep, more blah blah.
11月3日からコミットに戻す方法、すなわちコミット 0d1d7fc
?
解決
これは、「リバート」の意味に大きく依存します。
一時的に別のコミットに切り替えます
一時的に戻りたい場合は、だまされてから、あなたがいる場所に戻ってきてください。
# This will detach your HEAD, that is, leave you with no branch checked out:
git checkout 0d1d7fc32
または、あなたがそこにいる間にコミットをしたい場合は、先に進んで、あなたがそれにいる間に新しいブランチを作ります:
git checkout -b old-state 0d1d7fc32
あなたがいた場所に戻るには、あなたが再び乗っていた枝をチェックしてください。 (変更を行った場合、いつものようにブランチを切り替えるときに、必要に応じてそれらに対処する必要があります。リセットして捨てることができます。あなたがそこに枝が欲しいなら、彼らはそこの枝に行きます。)
未発表のコミットをハード削除します
一方、それ以来、あなたがしたことすべてを本当に取り除きたい場合、2つの可能性があります。 1つは、これらのコミットのいずれかを公開していない場合は、単純にリセットしてください。
# This will destroy any local modifications.
# Don't do it if you have uncommitted work you want to keep.
git reset --hard 0d1d7fc32
# Alternatively, if there's work to keep:
git stash
git reset --hard 0d1d7fc32
git stash pop
# This saves the modifications, then reapplies that patch after resetting.
# You could get merge conflicts, if you've modified things which were
# changed since the commit you reset to.
あなたが台無しにした場合、あなたはすでにあなたの地元の変更を捨てていますが、あなたは少なくともあなたが再びリセットすることによってあなたが以前の場所に戻ることができます。
公開されたコミットメントを元に戻します
一方、作品を公開している場合、おそらくブランチをリセットしたくないでしょう。その場合、実際にコミットを元に戻すことができます。 Gitを使用すると、Revertには非常に具体的な意味があります。リバースパッチを使用してコミットを作成してキャンセルします。このようにして、歴史を書き直しません。
# This will create three separate revert commits:
git revert a867b4af 25eee4ca 0766c053
# It also takes ranges. This will revert the last two commits:
git revert HEAD~2..HEAD
#Similarly, you can revert a range of commits using commit hashes:
git revert a867b4af..0766c053
# Reverting a merge commit
git revert -m 1 <merge_commit_sha>
# To get just one, you could use `rebase -i` to squash them afterwards
# Or, you could do it manually (be sure to do this at top level of the repo)
# get your index and work tree into the desired state, without changing HEAD:
git checkout 0d1d7fc32 .
# Then commit. Be sure and write a good message describing what you just did
git commit
git-revert
マンページ 実際には、その説明でこれの多くをカバーしています。別の便利なリンクはです このgit-scm.comセクションでは、git-revertについて説明します.
結局戻りたくないと判断した場合は、復帰(ここで説明)を戻すか、戻る前にリセットすることができます(前のセクションを参照)。
この場合、この答えが役立つこともあります。
前の場所に戻る方法は? (戸建てヘッド)
他のヒント
ここでは複雑で危険な答えがたくさんありますが、実際には簡単です:
git revert --no-commit 0766c053..HEAD
git commit
これにより、ヘッドからコミットハッシュにすべてが戻ります。つまり、作業ツリーでそのコミット状態を再現することを意味します かのように それ以来のすべてのコミットは戻ってきました。その後、現在のツリーをコミットすることができ、それはあなたが「戻った」コミットと本質的に同等の真新しいコミットを作成します。
( --no-commit
フラグを使用すると、すべてのコミットを一度に元に戻すことができます。そうしないと、範囲内の各コミットのメッセージが求められ、歴史に不必要な新しいコミットが散らばっています。)
これは 前の状態にロールバックする安全で簡単な方法. 。歴史は破壊されていないため、すでに公開されているコミットに使用できます。
ローグコーダー?
自分で作業して、それが機能したいだけですか?以下のこれらの指示に従って、彼らは私と他の多くの人々のために何年も確実に働いてきました。
他の人と一緒に働いていますか? Gitは複雑です。あなたが何か発疹をする前に、この答えの下のコメントを読んでください。
最新のコミットにワーキングコピーを元に戻します
変更を無視して、以前のコミットに戻すには:
git reset --hard HEAD
頭が現在のブランチで最後のコミットです
作業コピーを古いコミットに戻します
最新のコミットよりも古いコミットに戻すには:
# Resets index to former commit; replace '56e05fced' with your commit code
git reset 56e05fced
# Moves pointer back to previous HEAD
git reset --soft HEAD@{1}
git commit -m "Revert to 56e05fced"
# Updates working copy to reflect the new commit
git reset --hard
クレジットは、同様のスタックオーバーフローの質問に行きます、 gitでsha hashによるコミットに戻りますか?.
私にとって最良のオプションとおそらく他のオプションは、Gitリセットオプションです。
git reset --hard <commidId> && git clean -f
これは私にとって最良の選択肢でした!シンプルで速く、効果的です!
ノート : コメントで述べたように、古いコミットのコピーを持っている他の人とあなたの支店を共有しているなら、これをしないでください
また、コメントから、「Ballzy」の少ない方法が必要な場合は、使用できます
git clean -i
答える前に、背景を追加して、これを説明しましょう HEAD
は。
First of all what is HEAD?
HEAD
現在のブランチでの現在のコミット(最新)への参照です。シングルしかありません HEAD
いつでも(除く git worktree
).
の内容 HEAD
内部に保管されています .git/HEAD
, 、および現在のコミットの40バイトSHA-1が含まれています。
detached HEAD
あなたが最新のコミットにいない場合 - つまり HEAD
歴史の以前のコミットを指していますそれは呼ばれています detached HEAD
.
コマンドラインでは、次のようになります-SHA -1 HEAD
現在のブランチの先端を指していません。
分離した頭から回復する方法に関するいくつかのオプション:
git checkout
git checkout <commit_id>
git checkout -b <new branch> <commit_id>
git checkout HEAD~X // x is the number of commits t go back
これにより、目的のコミットを指している新しいブランチがチェックアウトされます。このコマンドは、特定のコミットにチェックアウトされます。
この時点で、ブランチを作成して、次の点から作業を開始できます。
# Checkout a given commit.
# Doing so will result in a `detached HEAD` which mean that the `HEAD`
# is not pointing to the latest so you will need to checkout branch
# in order to be able to update the code.
git checkout <commit-id>
# Create a new branch forked to the given commit
git checkout -b <branch name>
git reflog
いつでも使用できます reflog
同じように。 git reflog
更新された変更が表示されます HEAD
そして、目的のリフェログエントリをチェックアウトすると、 HEAD
このコミットに戻ります。
頭が変更されるたびに、に新しいエントリがあります reflog
git reflog
git checkout HEAD@{...}
これにより、希望するコミットに戻ります
git reset HEAD --hard <commit_id>
頭を「動かして」希望のコミットに戻します。
# This will destroy any local modifications.
# Don't do it if you have uncommitted work you want to keep.
git reset --hard 0d1d7fc32
# Alternatively, if there's work to keep:
git stash
git reset --hard 0d1d7fc32
git stash pop
# This saves the modifications, then reapplies that patch after resetting.
# You could get merge conflicts, if you've modified things which were
# changed since the commit you reset to.
- ノート: (git2.7以来)も使用できます
git rebase --no-autostash
同じように。
このスキーマは、どのコマンドが何をするかを示しています。あなたがそこに見ることができるように reset && checkout
変更します HEAD
.
「不一致」になり、最後のコミットメッセージを消去し、変更されたファイルをステージングに戻す場合は、コマンドを使用します。
git reset --soft HEAD~1
--soft
コミットされていないファイルを、に反対する作業ファイルとして保持する必要があることを示します--hard
それはそれらを捨てるでしょう。HEAD~1
最後のコミットです。ロールバック3コミットを希望する場合は、使用できますHEAD~3
. 。特定のリビジョン番号にロールバックする場合は、Sha Hashを使用してそれを行うこともできます。
これは、間違ったことを犯し、最後のコミットを元に戻したい状況での非常に有用なコマンドです。
私はGitの局所的な変更を戻すために多くの方法を試しましたが、最新のコミット状態に戻したいだけでこれが最適に機能するようです。
git add . && git checkout master -f
簡単な説明:
- それは何も犯しません
git revert
します。 - それはあなたの頭のように切り離されません
git checkout <commithashcode>
します。 - ブランチでの最後のコミット以降、すべてのローカル変更をオーバーライドし、追加されたすべてのファイルを削除します。
- ブランチ名でのみ動作するため、この方法でブランチでの最新のコミットにのみ戻すことができます。
上記の結果を達成するためのはるかに便利で簡単な方法を見つけました。
git add . && git reset --hard HEAD
ヘッドは、あなたの現在のブランチでの最新のコミットを指します。
Boulder_rubyが提案したのと同じコードコードですが、追加しました git add .
前 git reset --hard HEAD
最後のコミット以降に作成されたすべての新しいファイルを消去するために、これはほとんどの人が最新のコミットに戻る際に私が信じていることを期待するものです。
次の2つのコマンドでこれを行うことができます。
git reset --hard [previous Commit SHA id here]
git push origin [branch Name] -f
以前のgitコミットを削除します。
変更を維持したい場合は、使用することもできます。
git reset --soft [previous Commit SHA id here]
その後、変更を節約します。
わかった、 Gitでの以前のコミットに戻るのは非常に簡単です...
戻す 維持せずに 変更:
git reset --hard <commit>
戻す 維持する 変更:
git reset --soft <commit>
説明: Git Resetを使用すると、特定の状態にリセットできます。上記のように、Commit Hashで使用するのが一般的です。
しかし、あなたが見るように、違いは2つのフラグを使用することです --soft
と --hard
, 、デフォルトで git reset
使用 --soft
フラグ、しかしそれは常にフラグを使用して良い習慣です、私は各フラグを説明します:
- 柔らかい
説明されているデフォルトのフラグは、それを提供する必要はありませんが、作業ツリーを変更するのではなく、すべての変更ファイルを追加する準備ができているため、ファイルの変更が舞台に戻るコミットステータスに戻ります。
- 難しい
このフラグに注意すると、作業ツリーとすべての変更が追跡されたファイルにリセットされると、すべてがなくなります!
また、Gitを使用して実際の生活で発生する可能性のある以下の画像を作成しました。
あなたがマスターについて話していると仮定し、それぞれのブランチで(これは、これはあなたが関心を持っている作業部門である可能性があります):
# Reset local master branch to November 3rd commit ID
git reset --hard 0d1d7fc32e5a947fbd92ee598033d85bfc445a50
# Reset remote master branch to November 3rd commit ID
git push -f origin 0d1d7fc32e5a947fbd92ee598033d85bfc445a50:master
私はブログ投稿から答えを見つけました(今はもう存在しません)
これはリセットされ、リモートへの変更を強制していることに注意してください。そうすれば、チームの他の人がすでにGitを引っ張っている場合、問題が発生します。あなたは変化の歴史を破壊しています。これが、人々がそもそもGitを使用する重要な理由です。
リセット以外の復帰(他の回答を参照)を使用する方が良いです。あなたが一人のチームなら、それはおそらく問題ではありません。
この正確な組み合わせ以外に、ここでは何も機能しませんでした:
git reset --hard <commit_hash>
git push origin <branch_name> --force
ここでのキーは、プッシュを強制すること、追加のコミット/コミットメッセージなどです。
名前のテキストファイルに次のコミットがあるとします ~/commits-to-revert.txt
(私は使用しました git log --pretty=oneline
それらを取得するために)
fe60adeba6436ed8f4cc5f5c0b20df7ac9d93219
0c27ecfdab3cbb08a448659aa61764ad80533a1b
f85007f35a23a7f29fa14b3b47c8b2ef3803d542
e9ec660ba9c06317888f901e3a5ad833d4963283
6a80768d44ccc2107ce410c4e28c7147b382cd8f
9cf6c21f5adfac3732c76c1194bbe6a330fb83e3
fff2336bf8690fbfb2b4890a96549dc58bf548a5
1f7082f3f52880cb49bc37c40531fc478823b4f5
e9b317d36a9d1db88bd34831a32de327244df36a
f6ea0e7208cf22fba17952fb162a01afb26de806
137a681351037a2204f088a8d8f0db6e1f9179ca
aを作成します バッシュ それぞれを元に戻すシェルスクリプト:
#!/bin/bash
cd /path/to/working/copy
for i in `cat ~/commits-to-revert.txt`
do
git revert $i --no-commit
done
これにより、ファイルやディレクトリの作成、削除など、すべてが以前の状態に戻り、ブランチにコミットし、履歴を保持しますが、同じファイル構造に戻ってきました。 Gitにはaがありません git revert --to <hash>
私を超えています。
エフロミのソリューションに代わる余分な代替品
ジェフロミのソリューション 間違いなく最高のものであり、間違いなくそれらを使用する必要があります。しかし、完全性のために、私はまた、コミットを元に戻すために使用できるこれらの他の代替ソリューションを見せたかったのです(あなたはあなたの意味で 以前のコミットの変更を元に戻す新しいコミットを作成する, 、何と同じです git revert
します)。
明確にするために、これらの選択肢 コミットを元に戻すための最良の方法ではありません, ジェフロミのソリューションはそうです, 、しかし、私はあなたがこれらの他の方法を使用して同じことを達成することもできることを指摘したいだけです git revert
.
代替1:ハードリセットとソフトリセット
これは、チャールズベイリーのソリューションの非常にわずかに変更されたバージョンです gitでsha hashによるコミットに戻りますか?:
# Reset the index to the desired commit
git reset --hard <commit>
# Move the branch pointer back to the previous HEAD
git reset --soft HEAD@{1}
# Commit the changes
git commit -m "Revert to <commit>"
これは基本的に、ソフトリセットが以前のコミットの状態をインデックス/ステージングエリアでステージングした状態を残し、コミットできるという事実を使用することで機能します。
代替2:現在のツリーを削除して、新しいツリーに置き換えます
このソリューションは、SVICKのソリューションから来ています 古いコミットをチェックアウトし、それを新しいコミットにします:
git rm -r .
git checkout <commit> .
git commit
代替#1と同様に、これはの状態を再現します <commit>
現在の作業コピー。する必要があります git rm
最初は git checkout
以降追加されたファイルを削除しません <commit>
.
がここにあります はるかに簡単です 以前のコミットに戻る方法(そして、あなたが好きなことを何でもするために、コミットされていない状態でそれを持っている):
git reset HEAD~1
だから、コミットIDなどは必要ありません:)
コマンドがあります(コアギットの一部ではありませんが、 git-extras パッケージ)特に古いコミットを元に戻してステージングするためのもの:
git back
あたり 男ページ, 、そのように使用することもできます。
# Remove the latest three commits
git back 3
すべての変更の後、これらすべてのコマンドをプッシュすると、使用する必要がある場合があります。
git push -f ...
そしてだけでなく git push
.
これらすべての初期ステップを自分で完了し、Git Repoに押し戻すことができます。
Bitbucketからリポジトリの最新バージョンを
git pull --all
指図。端末から-n 4を使用してgit logコマンドを実行します。 -nの後の数は、あなたの地元の歴史における最新のコミットから始まるログのコミットの数を決定します。
$ git log -n 4
を使用してリポジトリの履歴の頭をリセットします
git reset --hard HEAD~N
ここで、nは頭を取り戻したいコミットの数です。次の例では、ヘッドはリポジトリ履歴の最後のコミットに1つのコミットを引き戻します。変更をGit Repoにプッシュします
git push --force
強制的に変化を押します。
Gitリポジトリが以前のコミットに必要な場合
git pull --all
git reset --hard HEAD~1
git push --force
に戻ります 最も最近の すべてのローカル変更をコミットして無視します:
git reset --hard HEAD
必要なコミットを選択し、それをチェックしてください
git show HEAD
git show HEAD~1
git show HEAD~2
必要なコミットを取得するまで。頭を指すために、そうしてください
git reset --hard HEAD~1
また git reset --hard HEAD~2
または何でも。
以前のコミットからの変更を頭に保ち、前のコミットに移行するために、次を実行します。
git reset <SHA>
ヘッドへの以前のコミットから変更が必要ない場合は、すべての変更を破棄するだけです。
git reset --hard <SHA>
いくつかの偶発的な変更からコーダーのディレクトリを完全にクリーニングするために、次のことを使用しました。
git add -A .
git reset --hard HEAD
ただ git reset --hard HEAD
変更は取り除かれますが、「新しい」ファイルを取り除くことはありません。彼らの場合、彼らは誤って重要なフォルダをランダムにドラッグし、それらすべてのファイルはGitによって新しいものとして扱われていたので、 reset --hard
修正しませんでした。実行することによって git add -A .
事前に、リセットで一掃するために、Gitでそれらすべてを明示的に追跡しました。
これは、最近のコミットに直接リセットするもう1つの方法です
git stash
git stash clear
最後のコミット以来、あなたが行ってきたすべての変更を直接クリアします。
PS:少し問題があります。また、最近保管されたすべてのスタッシュ変更を削除します。ほとんどの場合、これは重要ではないと思います。
一部の人々は、彼らが主人に行ったコミットされた変更をロールバックする方法を知りたいと思ってこの質問に来るかもしれないと信じています - つまり、すべてを捨てて起源/マスターに戻ります。その場合、これを行います。
git reset --hard origin/master
https://superuser.com/questions/273172/how-to-reset-master-to-origin-master
状況が次の場合 緊急のもの, 、そしてあなたはただ質問者が尋ねたことをしたいだけです 素早く汚い 方法、あなたのプロジェクトがディレクトリ「私のプロジェクト」の下にあると仮定すると:
ディレクトリ全体をコピーして、「私のプロジェクト - コピー」のような他の何かを呼び出します
行う:
git reset --hard [first-4-letters&numbers-of-commit's-SHA]
次に、システムに2つのバージョンがあります...前のコミットから、関心のあるファイルなどを調べたり、コピーまたは変更できます。新しい作品がどこにも行かないと判断した場合、「私のプロジェクト - コピー」の下でファイルを完全に破棄できます...
この取得されたコミットは、ディレクトリを再度変更することであるため、実際に作業を破棄せずにプロジェクトの状態を実行したい場合は明らかです。私のプロジェクト - 「私のプロジェクト」に「ディレクトリ」をコピーします。その後、おそらくすぐに別のコミットを行います。
gitは素晴らしい作品ですが、「それを拾い上げる」ことはできません:それを説明しようとする人も あまりにも頻繁に 他のVC [バージョン制御システム]の事前の知識を仮定し、あまりにも早すぎるほど深く掘り下げ、「チェックアウト」に交換可能な用語を使用するなど、他の犯罪を犯します。
自分自身に多くのストレスを救うには、Gitの本を読む必要があります - 私はお勧めします 「Gitによるバージョンコントロール」. 。そして、もしあなたが私を(またはむしろ私の傷跡)と言うとき、私が「しなければならない」と言うとき、あなたもそれをするかもしれないということです 今. 。 Gitの複雑さの多くは、分岐してから再び登録されています。しかし、あなたの質問からあります 人々が科学であなたを盲目にするべき理由はありません.
特に、たとえば、これが絶望的な状況であり、あなたがGitの初心者である場合!
PS:もう1つの考え:(現在)ワーキングファイルを備えたもの以外のディレクトリにgitリポジトリ( "repo")を保持するのは実際には非常に簡単です。これは、上記のQuick&Dirtyソリューションを使用してGitリポジトリ全体をコピーする必要がないことを意味します。 fryerを使用して、fryerの回答を参照してください - 分離git-dir ここ. 注意してください, ただし、コピーしない「個別ディレクトリ」リポジトリがあり、ハードリセットを実行している場合、リセットのコミットに続くすべてのバージョンは、絶対に必要な場合、定期的にバックされていない限り永久に失われます。あなたのリポジトリを、できればクラウドに対して(例: グーグルドライブ)他の場所の中で。
「クラウドにバックアップする」というこのテーマでは、次のステップは、GitHubまたは(私の見解ではより良い)GitLabでアカウント(もちろん)を開くことです。その後、定期的に行うことができます git push
クラウドリポジトリを「適切に」バックアップするコマンド。しかし、繰り返しますが、これについて話すことはあまりにも早すぎるかもしれません。
復帰は、コミットをロールバックするコマンドです。
git revert <commit1> <commit2>
サンプル:
git revert 2h3h23233
以下のように、頭から射程を取ることができます。ここで1は「最後のコミットを元に戻す」と言います。
git revert HEAD~1..HEAD
そして、します git push
最新のコミットを元に戻します:
git reset --hard HEAD
HEAD
現在のブランチでの現在のコミット(最新)への参照です。シングルしかありません HEAD
いつでも。
古いコミットに戻す:古いバージョンを復元する最速の方法は、 reset
指図:
# Resets index to former commit
git reset 56e05fced
# Moves pointer back to previous HEAD
git reset --soft HEAD@{1}
# Updates working copy to reflect the new commit
git reset --hard
これにより、指定されたバージョンにヘッドブランチが巻き戻されます。このバージョンの後に来たすべてのコミットは、事実上元に戻されます。あなたのプロジェクトは、その時点でまさにその時でした。
リセットコマンドにはいくつかのオプションが付属しています。 --soft
国旗。ではなく使用する場合 --hard
, 、Gitは、現地の修正として、「元に戻された」コミットメントのすべての変更を維持します。
aの改訂を復元します 新しい地元の支店
言ったように、あなたにリセットコマンドを使用します HEAD
ブランチは非常に劇的なアクションです。指定された改訂後に来たコミット(このブランチ)を削除します。これがあなたが望むものであると確信しているなら、すべてが大丈夫です。
ただし、aもあります より安全 現在のヘッドブランチを触れておくことを好む場合の方法。 「ブランチ」はGitが非常に安くて簡単なので、その古い改訂から始まる新しいブランチを簡単に作成できます。
git checkout -b old-project-state 0ad5a7a6
通常、チェックアウトコマンドは、ブランチを切り替えるために使用されます。ただし、-bパラメーターを提供すると、新しいブランチを作成することもできます(名前付き 旧プロジェクト状態 この例で)。現在のヘッドリビジョンから開始したくない場合は、コミットハッシュを提供する必要があります。これは、復元したい古いプロジェクトの改訂です。
これで、新しいブランチが付いています 旧プロジェクト状態 プロジェクトの古いバージョンを反映して - 他のコミットや支店に触れたり、削除したりすることなく。
目的のコミットにリセットしてみてください -
git reset <COMMIT_ID>
(commit_idの使用を確認するには git log
)
これにより、変更されたすべてのファイルを未処理の状態にリセットします。
今、あなたはできます checkout
すべての未処理ファイル
git checkout .
小切手 git log
変更を確認します。
アップデート
あなたが持っている場合 一つだけ リポジトリでコミットしてください
git update-ref -d HEAD
あなたのコミットがリモートでプッシュされるため、それらを削除する必要があります。あなたの枝が開発されていると仮定させてください。
最初に起源から開発を削除する必要があります:
git push origin :develop (note the colon)
次に、必要なステータスを開発する必要があります。コミットハッシュがefghijkであると仮定させてください。
git reset --hard EFGHIJK
最後に、プッシュを再度開発します:
git push origin develop
注意! このコマンドは、ユーザーが間違ったコミットを誤って置いた場合、コミット履歴を失う可能性があります。あなたが間違いを犯した場合に備えて、あなたが少し安全であるよりも、あなたのgitのいくつかのgitの追加のバックアップを常に持っています。 :)
私は同様の問題を抱えており、以前のコミットに戻りたいと思っていました。私の場合、私は新しいコミットを維持するために意識されていませんでした。 Hard
.
これが私がそれをした方法です:
git reset --hard CommitId && git clean -f
これは、ここで使用した後、ローカルリポジトリで戻ります git push -f
リモートリポジトリを更新します。
git push -f
前回のコミットでエラーを修正したい場合は、良い代替手段が使用されます gitcomped -Amend 指図。最後のコミットが参照によって指摘されていない場合、最後のコミットと同じ親とのコミットを作成するため、これはトリックを行います。最後のコミットへの参照がない場合、それは単に破棄され、このコミットは最後のコミットになります。これは、コミットを戻すことなくコミットを修正する良い方法です。ただし、独自の制限があります。