問題シナリオ
実際には、本番稼動時にあなたの新機能のコードは gitlab 上で master にマージするよう提出され、マージ権限を持つリーダーがそれをパスした後に初めてあなたのコードが master にマージされます。リーダーはあなたのコードを差し戻し、master ブランチが正しいことを確認します。あなたのブランチが master ブランチをプルした後、あなたは自分のブランチの新機能のコードがすべて消えていることに気づきました!どうやって元に戻すのですか?
この記事では、実践的な観点からこの問題を取り上げます。
前提条件
- すでに git プロジェクト test-git があり、2 つのブランチ master、test があるとしましょう。
実戦
git commit -m 'gitをテストする revert'
テストブランチでは、welcome というファイルを作成しました。
現在、masterブランチとtestブランチの内容は以下の通りです。
~/tt/test-git>>master $ ll
drwxr-xr-x 3 tt staff 96B 5 8 20:54 test
-rw-r--r-- 1 tt staff 16B 8 1 19:55 test3.log
~/tt/test-git>>test $ ll
drwxr-xr-x 3 tt staff 96B 5 8 20:54 test
-rw-r--r-- 1 tt staff 16B 8 1 19:55 test3.log
-rw-r--r-- 1 tt staff 7B 8 1 20:19 welcome
~/tt/test-git>>test $ cat welcome
hi git
次に、以下のようにマスターへのマージリクエストをマスターに送信します。
リーダーがMERGEして本番を開始し、ライン上に問題があると仮定すると、リーダーはこのコミットのコードをREVERTSします。以下に図を示します。
次に問題を調べたいので、ローカルで操作し、コードブランチに戻ってgit merge origin/master
~/tt/test-git>>test $ git merge origin/master
Updating 670adc2..d3961f7
Fast-forward
welcome | 1 -
1 file changed, 1 deletion(-)
delete mode 100644 welcome
~/tt/test-git>>test $ ll
total 8
drwxr-xr-x 3 tt staff 96B 5 8 20:54 test
-rw-r--r-- 1 tt staff 16B 8 1 19:55 test3.log
ウェルカムファイルがありません。
これらのコードを検索するには?以下は、検索操作の始まりです。
git log を見ると、コミット ID が 50a06845da879ab76e6fdd55dce923826742dcb2 であることがわかります。
git revert --no-commit 50a06845da879ab76e6fdd55dce923826742dcb2
コードを取り戻し、もうこれ以上はありません。 シンプルです。
概要
コードを差し戻したリーダーのコミットIDを見つけてください。git revert --no-commit commit id
一言で言えば、以下のコミットをリバートします。