10

是否可以在 Egit 中执行“git revert”以通过创建新提交来回滚更改(而不是检查旧提交或进行不会创建回滚更改的新提交的硬重置)?

如果您有一个中央存储库,这似乎是一个重要功能,以防您需要撤消已经推送到那里的更改。

提前致谢!

4

4 回答 4

10
  • 安装最新的 EGit (0.11.xx)
  • 打开历史视图
  • 在当前签出的分支中右键单击要还原的提交
  • 单击“还原提交”

——马蒂亚斯

于 2011-01-14T20:33:13.580 回答
3

如果您考虑5 天前的这个提交,称为 ' Merge "Implement a revert command" ' (Shawn Pearce),它似乎很快就会可用。

差异在这里:

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());
       }
}
于 2011-01-07T16:35:51.830 回答
1

由于声誉低,我无法发表评论,但我想将最后一块添加到@Matthias Sohn 的答案中,以防万一像我这样的人通过搜索如何做到这一点找到这个。他的步骤如下,因此您不必滚动:

  • 安装最新的 EGit (0.11.xx)
  • 打开历史视图
  • 在当前签出的分支中右键单击要还原的提交
  • 单击“还原提交”

这将在历史视图顶部添加一个条目“Revert [previous commit comment]”。如果您右键单击此新条目,您将看到提交还原操作的选项。您需要从历史视图中执行此操作,因为正如@Lennon 所说,您无法从包资源管理器提交和推送。

这种方法的缺点是它会恢复提交中的所有更改。我希望能够只回滚变更集中的特定文件,所以如果有人知道这样做的方法,请添加。

于 2015-07-08T15:07:34.293 回答
0

右键单击要还原的文件->替换为-> HEAD修订

于 2016-12-14T03:38:28.167 回答