Git merge взял «неправильные» файлы и теперь сбрасывает, ни восстанавливает, ни объединяет с конкретным коммитом, работает с ними - PullRequest
0 голосов
/ 30 сентября 2019

Итак, я подумал, что у меня есть хитрость в использовании git.

Ниже приведено краткое описание последних коммитов, выполненных как в dev_ser, так и в ветвях dev.

Что янамеревался сделать : я хотел, чтобы в коммите все выглядело как 6388660 .

Что я сделал : с обновлением обеих веток от своих пультов,Я пошел к dev_ser и слил свою ветку в эту, чтобы они были одинаковыми, и, если возникли какие-либо конфликты, разрешите их до слияния с моей веткой. Это не имело ожидаемого эффекта, так как никаких конфликтов слияния не возникало, и я думал, что глупо подумал: «Круто, мы сделали».

То, что это дало мне, было "неправильной" версией файлов, а не версией из commit 6388660

Сразу после этого я слил ее со своей веткой.

В командах сначала я сделал:

git checkout dev_ser
git merge -s ours dev

git checkout dev
git merge dev_ser

То, что я пытался изменить ситуацию : я чувствую, что пытаюсь слишком много вещей и собираюсьиспортил репозиторий.

Сначала я попытался отменить возврат:

git revert -m 1 HEAD

Но он ничего не сделал, он показал, что ничего не изменилось, файлы, где то же самое, и журнал git показали ту же структуру.

После попытки вернуться без изменений (позже я узнал, что возврат не меняет историю?)

git reset --hard HEAD~1

Наконец-то я подумал, хорошо, это текущая ситуация, ноесли я git checkout 6388660, я все еще вижу нужные файлы !!

Итак, давайте слиться с этим и попытаться восстановить эту версию:

git merge 6388660

, которая показывает Уже вверх-на сегодняшний день.

Итак ... я действительно не знаю, что еще сделать, чтобы получить "ПРАВУЮ" версию файлаs.

*   6dfd968 (origin/dev_ser, origin/dev, dev_ser, dev) Merge branch 'dev' into dev_ser
|\  
| * **6388660** (HEAD) delete
| * 858167f update
| * c34cf18 rename
* | a45d748 update
* | 8725b7c data
* | 0615469 start
* | 6414841 data
* | 474a934 update
* | d7de99c new branch data
* | fb0d0b6 delete
* | 7b65fb5 hot
|/  
*   c407635 (origin/master, origin/HEAD, master) Merge branch 'dev' into 'master'
|
|
| [many previous commits which I do not think are relevant]

Обновление:

Я закончил тем, что заставил данный коммит быть последним существующим коммитом, который был "правильным", к git push origin dev --force, но яЯ не уверен, что это правильный способ сделать это, поэтому я думаю, что это не настоящий ответ.

1 Ответ

1 голос
/ 02 октября 2019

Особо безопасный способ.

Если вы беспокоитесь о потере работы и хотите не рисковать, извлеките последний хеш, который, как вы знаете, был в порядке, и сделайте из него ответвление.

git switch -c <safebranch> <safehash>

Здесь вы можете использовать git log --oneline <bad branch> в сочетании с git cherry-pick -n <hash> для индивидуальной загрузки каждого коммита. -n не выполняет автоматическую фиксацию выбранного кода, поэтому вы можете изменить его или запустить перед каждой фиксацией. Это отнимает много времени, но безопасно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...