git在Egit中恢复

时间:2011-01-07 16:21:24

标签: eclipse git egit

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

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

提前致谢!

4 个答案:

答案 0 :(得分:10)

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

- 的Matthias

答案 1 :(得分:3)

如果您考虑这个commit from 5 days ago,称为“合并”实施恢复命令“”(Shawn Pearce),它似乎很快就会推出。

diff are here

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 :(得分:1)

由于声誉不佳我无法发表评论,但我想将最后一篇文章添加到@Matthias Sohn的答案,以防万一有人像我一样通过搜索如何做到这一点。他的步骤如下所示,所以你不必滚动:

  • 每晚安装最新的EGit(0.11.xx)
  • 打开历史记录视图
  • 右键单击要在当前签出的分支中恢复的提交
  • 点击&#34;还原提交&#34;

这将在历史记录视图的顶部添加一个条目&#34;还原[上一个提交评论]&#34;。如果右键单击此新条目,您将看到提交“还原”操作的选项。您需要从History视图中执行此操作,因为正如@Lennon所说,您无法从Package Explorer中提交和推送。

此方法的缺点是它将还原Commit中的所有更改。我宁愿只能回滚一个Changeset中的特定文件,所以如果有人知道这样做的方法,请加上。

答案 3 :(得分:0)

右键单击要还原的文件 - &gt;替换为 - &gt; HEAD修订版