Git вернуться в Egit

Можно ли сделать "git revert" s в Egit для изменения отката, создав новую фиксацию (в отличие от проверки более старой фиксации или выполнения жесткого reset), который не создает новую скользящую назад изменения)?

Это похоже на важную функцию, если у вас есть центральный репозиторий, если вам нужно отменить изменения, которые уже были там нажаты.

Спасибо заранее!

Ответ 1

Если вы считаете это commit с 5 дней назад, называемый Merge" Реализовать команду возврата '( Shawn Pearce), похоже, он скоро появится.

diff здесь:

public class RevertCommandTest extends RepositoryTestCase {
       @Test
       public void testRevert() throws IOException, JGitInternalException,
                       GitAPIException {
               Git git = new Git(db);

               writeTrashFile("a", "first line\nsec. line\nthird line\n");
               git.add().addFilepattern("a").call();
               git.commit().setMessage("create a").call();

               writeTrashFile("b", "content\n");
               git.add().addFilepattern("b").call();
               git.commit().setMessage("create b").call();

               writeTrashFile("a", "first line\nsec. line\nthird line\nfourth line\n");
               git.add().addFilepattern("a").call();
               git.commit().setMessage("enlarged a").call();
               writeTrashFile("a",
                               "first line\nsecond line\nthird line\nfourth line\n");
               git.add().addFilepattern("a").call();
               RevCommit fixingA = git.commit().setMessage("fixed a").call();

               writeTrashFile("b", "first line\n");
               git.add().addFilepattern("b").call();
               git.commit().setMessage("fixed b").call();

               git.revert().include(fixingA).call();

               assertTrue(new File(db.getWorkTree(), "b").exists());
               checkFile(new File(db.getWorkTree(), "a"),
                               "first line\nsec. line\nthird line\nfourth line\n");
               Iterator<RevCommit> history = git.log().call().iterator();
               assertEquals("Revert \"fixed a\"", history.next().getShortMessage());
               assertEquals("fixed b", history.next().getFullMessage());
               assertEquals("fixed a", history.next().getFullMessage());
               assertEquals("enlarged a", history.next().getFullMessage());
               assertEquals("create b", history.next().getFullMessage());
               assertEquals("create a", history.next().getFullMessage());
               assertFalse(history.hasNext());
       }
}

Ответ 2

  • установить последнюю ночную версию EGit (0.11.xx)
  • открыть "История"
  • щелкните правой кнопкой мыши фиксацию, которую вы хотите вернуть в текущей проверенной ветке.
  • нажмите "Отменить фиксацию"

- Matthias

Ответ 3

Я не могу комментировать из-за низкой репутации, но я хотел добавить последнюю часть в ответ @Matthias Sohn на всякий случай, если кто-то, как и я, найдет это, ища, как это сделать. Его шаги здесь внизу, поэтому вам не нужно прокручивать:

  • установить последнюю ночную версию EGit (0.11.xx)
  • открыть "История"
  • щелкните правой кнопкой мыши фиксацию, которую вы хотите вернуть в текущей проверенной ветке.
  • нажмите "Отменить фиксацию"

Это добавит запись в верхней части окна истории "Revert [предыдущий комментарий коммита]". Если вы щелкнете правой кнопкой мыши по этой новой записи, вы увидите возможность совершить операцию Revert. Вам нужно сделать это из представления History, потому что, как сказал @Lennon, вы не можете совершать и нажимать из обозревателя пакетов.

Недостатком этого метода является возврат всех изменений в Commit. Я предпочел бы иметь возможность отката только определенного файла, который был в наборе изменений, поэтому, если кто-нибудь знает, как это сделать, добавьте его.

Ответ 4

Щелкните правой кнопкой мыши файл, который вы хотите вернуть → Replace With → HEAD revision