4

私は git-flow を使用していますが、それは重要ではありません。master ブランチは production で、develop ブランチは開発用です。

今朝、私のマスター ブランチ (これは私のプロダクション リリースです) は何週間も (私の最後のリリース以来) 触れられていませんでした。master ブランチを見ると、develop ブランチからのコミットがすべて含まれています。

にマージが表示されないgit logため、マスター ブランチを退屈な自己に戻す方法がわかりません。

マスター ブランチへのルージュ マージを見つけて、開発作業を失うことなく元に戻すにはどうすればよいですか?

編集:

これは、何が起こったのかを知るのに十分な情報を提供しますか?

の出力は次のgit reflogとおりです。

0fe067c HEAD@{0}: pull: Fast-forward
300ba32 HEAD@{1}: checkout: moving from develop to master
06f1dd9 HEAD@{2}: pull: Fast-forward
0fe067c HEAD@{3}: commit: Add back prefix.
815ffe8 HEAD@{4}: pull: Fast-forward
f4c3e23 HEAD@{5}: pull: Fast-forward
93d1037 HEAD@{6}: pull: Fast-forward
e027c53 HEAD@{7}: commit: Don't commit changes to Prefix
96e37a9 HEAD@{8}: commit: Update URLs based on current server
4

2 に答える 2

0

リリース時に本番ブランチにタグを付けましたか?

前回のリリースの sha1 について心当たりはありますか?

私はSimon Boudriasの答えが好きですが、使用したいコミットを見つけてgit logブランチをそのコミットにリセットするのと同じくらい簡単かもしれませんgit reset --hard <sha1>

注: 最初に --hard 部分を付けずにリセットして、情報を失うことなく目的の場所に移動できるようにすることをお勧めします。

git co production
git log # find the sha1
git reset <sha1> # to check if this is the point you want
git co production
git reset --hard <sha1>

「開発」からコミットを削除していないため、コミットを失うことはありません (誰も本番環境で直接開発していない限り)。

于 2012-11-09T21:54:02.133 に答える
0

マージが早送りされた場合、マージ コミットは作成されませんが、これはおそらく起こったことです。

では、そこから、どこへ行くのでしょうか?

まあ、リモートがまだ適切なコミットを指している場合は、ローカル ブランチをかなり簡単にリセットできます。

git reset --hard origin/master(ここでremote/branch)

それ以外の場合は、もう少し複雑ですが、マスター情報のみを記録するように reflog をフィルター処理できます。

git reflog show master

ログに記録された情報が理にかなっている場合は、リセットできます。

git reset --hard master@{1}

--hard作業ツリーに加えられたすべてのローカル変更を破棄することに注意してください。それが問題になる場合は、 を使用して--keepください。

于 2012-09-26T01:49:44.087 に答える