GIT - вернуться к предыдущему коммиту и изменить его - PullRequest
0 голосов
/ 20 июня 2019

У меня есть проект, в котором у меня есть следующая последовательность коммитов:

* 800cedc (HEAD, origin/master, origin/HEAD, master) Commit 6
* 1d51716 Commit 5
* 5232f4b Commit 4
* 01838a5 Commit 3
* 3aeb34d Commit 2
* 9b75b72 Commit 1

По соображениям разработки мне нужно сделать следующее: 1. Перейти к коммиту 5. 2. Сделайте небольшие изменения. 3. Опубликовать изменения в производстве. 4. Добавьте изменения в коммиты.

Проблема возникает, когда я вижу, что файл, который я изменил, также изменяется в Commit 6.

Что я могу сделать, чтобы изменить файл в Commit 5 и объединить изменения с commit 6, чтобы отслеживать все?

Спасибо !!

Ответы [ 3 ]

4 голосов
/ 20 июня 2019

Как говорится в комментарии @NilsWerner, переписывать опубликованную историю не очень хорошая идея.Но если вы действительно хотите,

git reset 1d51716 --hard
# modify the file and
git add path/to/file
git commit --amend

# apply Commit 6 again
git cherry-pick 800cedc 

# there might be conflicts and if any,
# resolve the conflicts, and then
git add path/to/file
git cherry-pick --continue

# force push "master"
git push origin -f master

После принудительного нажатия, сообщите другим участникам, что вы переписали master, и они должны принудительно обновить свои локальные master и применить свои невыполненные коммиты к своимновый локальный master, что является довольно сложной задачей.

1 голос
/ 20 июня 2019

Вы можете сделать ниже шаги.

  1. Создать новую ветку из commit5.

    git branch branchname <sha1-of-commit5>
    git checkout branchname 
    
  2. Невозможно выполнить черчак для отдельного файла.Вы можете делать вишневый пик только на уровне коммита.сделайте локальную копию определенного файла Commit5 (скажем, file_a), который вы хотите объединить с commit6.После этого извлеките конкретный файл из commit6.

    git checkout <sha1-ofcommit6> path/to/file_a

  3. Теперь вручную выполните слияние файла commit5 (локальная копия) с файлом commit6 (в ветке git)

  4. После внесения изменений подготовьте их и нажмите на пульте.

    git add .
    git commit -m "manual merge for file_a"
    git push origin branchname```
    
0 голосов
/ 20 июня 2019

Попробуйте:

git revert 1d51716
git revert --no-commit HEAD

, затем внесите изменения.

Не уверены, пожалуйста, проверьте внимательно.

Кстати : я думаю, что лучший способ - это просто сделать новый коммит: -)

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