我如何从Magit中的另一个提交中检出文件


16

foo.txt在branch中有一个文件A,我想foo.txt从branch 签出B到索引中。在命令行上,我可以这样做:

$ git checkout B -- foo.txt

我希望能够通过登录,查找我感兴趣的提交(例如l o B),查找foo.txt并运行一些命令来在magit中执行此操作,但是我不知道该怎么做。


现在这是一个功能请求github.com/magit/magit/issues/2184。感谢看着它,维护
Emoses

Answers:


21

从magit 2.11.0开始,这可以直接从重置调度程序中进行(X f您可以指定修订版和文件):

在此处输入图片说明

这可以在magit中以编程方式完成,使用magit-file-checkout它接受版本规范和文件名(由于@Emoses的功能请求和@Kyle Meyer的实现)。以前,该函数已命名magit-checkout-file(从v2.3.0-v2.9.0起)。


4
magit-checkout-file现在已过时。使用magit-file-checkout代替。
Sagar Jha)

3

我不知道执行此操作的内置方法。

假设您在分支A上,另一种方法是对分支B(d r ..B)进行比较,然后将a指针移动到您感兴趣的文件。按将这些更改应用于工作树(而不是索引)。

我的配置中有一个命令可以从修订中重置或签出文件,但是在当前状态下,它不能完全满足您的要求,因为在Magit修订中无法提供良好的修订默认值模式。

(defun km/magit-reset-file (rev file &optional checkout)
  "Reset FILE from revision REV.

If prefix argument CHECKOUT is non-nil, checkout FILE from REV
instead.

\(git reset REV -- FILE)
\(git checkout REV -- FILE)"
  (interactive
   (let ((rev (magit-read-branch-or-commit "Revision")))
     (list rev (magit-read-file-from-rev rev "File") current-prefix-arg)))
  (magit-with-toplevel
    (magit-run-git (if checkout "checkout" "reset")
                   rev "--" file)))
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.