как откатить изменения в файле в предыдущем коммите в git - PullRequest
1 голос
/ 29 августа 2009

Я сделал 3 'git commit', но я не сделал 'git push'.

1. commit 1
2. commit 2
   touches fileA
   touches fileB
   touches fileC
3. commit 3

Так как я могу

  1. Откатить изменения, которые я сделал в файле b для коммита 2? (Я больше не могу делать 'git checkout - fileB', так как я уже 'git commit', как я могу откатить свои изменения?
  2. внести изменения в fileC и сделать его частью коммита 2? Я думаю, что могу пойти и изменить файл сейчас, а затем запустить 'git rebase -i HEAD ~ 2' Correct?

Ответы [ 4 ]

5 голосов
/ 29 августа 2009

Это должно работать:

1. git rebase -i HEAD~2
2. in your editor, select the following:

edit 9b86592 commit 2
pick f3907cb commit 3

3. at this point roll back the changes you made in fileB, for example with
   `git checkout <version_you_want>` or by manually editing the file
4. make the changes in fileC you want to be part of commit 2
5. `git add fileB fileC`
6. `git commit --amend`
7. `git rebase --continue`

Вам может понадобиться решить проблемы слияния, если существуют конфликты, когда git пытается применить коммит 3. После того, как вы их исправите, снова запустите git rebase --continue.

2 голосов
/ 29 августа 2009

Используйте git rebase -i HEAD~2 и отредактируйте второй коммит.

0 голосов
/ 29 августа 2009

Вот как бы я это сделал.

Извлеките старую версию файла B и передайте ее

git checkout HEAD~3 -- fileB
git commit -m"fix fileB" fileB

Теперь перебазируем на сквош в вашем исправлении со старым коммитом

git rebase -i HEAD~3

теперь переместите ваш последний коммит "fix fileB", чтобы он был после коммита 2, и измените инструкцию "pick" на "squash", объединяя файл изменения коммита B с коммитом, сбрасывающим его.

0 голосов
/ 29 августа 2009

Предполагается, что вы являетесь владельцем ветки и имеете чистое дерево:

# checkout incorrect commit
git checkout <sha1_of_commit2>

# revert the changes to fileB by checking out the parent version
git checkout HEAD^ -- fileB

# make an amended commit
git commit --amend

# go back to master
git checkout master

# transplant the changes since the bad commit onto the amended commit
git rebase --onto HEAD@{1} <sha1_of_commit2>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...