開発ブランチをマスターにマージしようとしていました。
git checkout master
git pull . dev
私はこれらを修正してコミットしましたが、衝突はありましたが、すべてがうまくいくように見えました。しかし、私がこの新しくマージされた作業ツリーをチェックしたとき、devから多くのフォルダーとファイルが欠落しています。
git status // Shows conflicts & doesn't list some files/folders.
git commit -a
Created commit 55ffdd1: Merge branch 'dev' into master
git diff dev --name-status
生成:
D folders/lm.gif
D folders/lmh.gif
...
したがって、「git status」で表示されなかったファイル/フォルダー。マージされた競合を修正したときにも、最後には表示されませんでした。
また、私が再びマージしようとすると、それは言う:
git merge dev
Already up-to-date.
しかし、マスターブランチには明らかにdevブランチからのファイル/フォルダーがありません。何故ですか?そのフォルダーとそのすべての内容を追加する必要はありませんか? 'folders'はdevブランチで追跡されているので、私がマージしたときにプルされてはいけませんか?
以前にマージの競合があったとき、gitはマージプロセスを停止し、ファイル/フォルダーの束をスキップしましたか?
Devブランチにはかなり多くの変更がありましたが、過去にgitを台無しにして、特定のファイル/フォルダーがマージされなかった可能性はありますか?
(私が最初にdevブランチを作成したとき、自分が何をしているのかわからず、リセット、復帰などのクレイジーなことをしました)
あなたの1人がスタックオーバーフローでgit guruがここにいることを願って答えがわかっています。 :)
おかげで、クアン
ウォルターさん、ありがとうございます。これが起こったことです。
調査したところ、何が起こっているのかが少し複雑であることがわかりました。それは明らかになった。
Git log、git show、git reflogを使用して何が起こったのかをデバッグしようとする方法について多くのことを学んだ私以外の誰かの助けになれば幸いです。
ありがとう!
これは、以前にマスターに削除されたdevのすべてのコンテンツをマージするために私が行ったものです。
git diff dev --name-status | grep D > deleted_files
git log --name-status > file_history
これを使用して、削除されたファイルの最終更新バージョンを把握します。git checkout 25b8a44 view.php
25b8a44 ...は、view.phpの最終更新バージョンでのコミットでした。私は試した cherry-pick
とストレートgit checkout dev view.php
ですが、コミットIDを明示的に使用していることがわかりました。これにより、その履歴の多くがマージされます。 (最初にファイルが削除される原因となるコミットを含みます。)git diff dev --name-status | grep D
は、すべてのファイルがコピーされたことを示します。その後、ウォルターのように、大胆なコミットgit commit --amend
:)Gitは、不足しているファイルが、devから分岐する場所とマージ前のヘッドの間のある時点でマスター上で削除されたと考えているようです。それが、gitがマージ中に追跡されたファイルを静かにドロップする理由について私が考えることができる唯一の理由です。
残念ながら、私はそれを修正する良い方法を知りません。おそらく、手動で(または少しのbashスクリプトを使用して)devブランチから削除されたすべてのファイルを再度追加してから、git commit --amend
マージコミットを修正して、それらを含めます。