Magit 2.1.0에서 덩어리 취소


24

방금 magit 2.1.0으로 업그레이드했습니다. (또한 이맥스 25.0.50 및 자식 2.3.1에도 적용됩니다.)

이전에는 *magit*버퍼 에서 다음을 수행 할 수있었습니다.

  1. 스테이지되지 않은 영역에서 덩어리를 선택하십시오.
  2. 입력 v하려면 yes를 입력 하고 반대로 바꾸십시오.

이것은 편리했다.

그러나 이제 magit 2.1.0에서는 오류가 발생 "Cannot reverse unstaged changes"합니다.

왜?


오류 메시지에서 힌트를 얻었을 때 더 많은 단계를 거쳐 다소 "뒤로"이기는하지만 여전히이 작업을 수행 할 수 있음을 발견했습니다.

  1. s덩어리를 태그하십시오. 뒤로 물러서서 커밋 된 상태에 더 가깝게 이동합니다.
  2. 탐색 영역을 스테이지 영역에서 선택하십시오.
  3. 를 누르고 v예라고 대답하십시오.
  4. 그러나 덩어리는 여전히 단계적이므로 결국 u덩어리 를 단속 해야합니다 .

이것이 버그입니까, 아니면 의도적입니까? 후자의 경우 이해하도록 도와 줄 수 있습니까?


업데이트 : 철저한 RTFinfoing 후 두 가지 명령이 있음을 알았습니다.

  • v magit-reverse 작업 트리의 시점에서 변경 사항을 되돌립니다.
  • k magit-discard 작업 트리에서 변경 사항을 제거하십시오.

그것은 k magit-discard내가 v전에 했던 일 을 하는 것처럼 보입니다 . 스테이지되지 않은 덩어리에서 작동합니다.

그래서 실제로 사용하기 위해 근육 기억력을 재교육해야합니다 k. 나는 그것을 자기 답으로 게시 할 수 있습니다. 그러나 나는 그것이 이론적 근거에 대해 여전히 궁금하다고 생각합니다. 왜냐하면 그것이 이해하는 것이 전반적으로 magit을 더 잘 이해하는 데 도움이 될 것이라고 상상하기 때문입니다.


좋은 정보를 읽고 다행입니다 :) 나는 당신이 덩어리를 "역전"한다는 것이 무슨 의미인지 혼란 스럽습니다. 나는 그 용어를 전에 들어 본 적이 없다.
PythonNut

k이전 버전의 magit에서도 커밋되지 않은 변경 사항을 삭제하고 수행중인 작업에 대한 적절한 명령으로 보입니다. vgit revert : 이전 커밋과 반대로 변경 되는 새로운 커밋 만들기 . 실제로 커밋되지 않은 변경 사항을 되 돌리는 것은 버리는 것과 동일하지만 'revert'는 git 명령과 같은 의미가 있습니다.
glucas

OK, 그것은 모양 v에 묶여 magit-revert-item및 unstaged 항목이는 어떻게 사용합니다 (이 용어가, @PythonNut에서 온다 "역") magit-discard-item(와 같은 또한 바인딩 k라인 4872 참조 -) 여기를 . 분명히 나는 ​​내가 v사용하는 법을 배워야 할 때 의 특별한 의미를 배웠다 k.
Greg Hendershott

나는 보통 자체 답변을 좋아하지는 않지만이 경우에는 이것이 가장 자비로운 방법이라고 생각합니다. :) 아래에 게시했습니다.
Greg Hendershott

답변:


20

Magit 은 매뉴얼 , 스테이지, 언 스테이지, "일반 적용", 폐기 및 반전의 5 가지 "적용 변형"을 구현 합니다. 처음 세 개는 대부분의 Git 사용자에게 분명합니다. 후자의 두 가지는 Git 도자기 에는 존재하지 않습니다 (Mit에서는 Git 배관 명령과 Emacs Lisp를 사용하여 구현됩니다 ).

이 두 변형은 다음과 같이 설명됩니다.

  • 포기. 단계적 변경시 작업 트리 및 색인에서 제거하십시오. 비 단계적 변경에서는 작업 트리에서만 제거하십시오.
  • 역. 작업 트리에서 변경 사항을 되돌립니다. 커밋 및 단계적 변경 사항을 모두 되돌릴 수 있습니다. 비 단계적 변경은 되돌릴 수 없습니다. 대신 폐기하십시오.

이 두 변형은 매우 다른 작업을 수행하므로 이러한 변형은 자체를 사용할 수없는 경우 다른 변형으로 대체되지 않아야합니다. 예전 동작 (일부 상황에서는 취소에서 뒤로 버림)을 유지하는 것이 단기적으로 더 편리했을 수 있지만 장기적으로는 사용자가이 두 변형이 무엇인지 실제로 이해하려고하지 않습니다.

버리는 것은 역전 보다 훨씬 위험 합니다. 전자는 "커밋되지 않은 변경 사항을 버립니다"(이 변경 사항은 더 이상 사라 지지 않습니다 ). 여전히 커밋 또는 인덱스에 있습니다.)

"만들기"에서 "삭제하기"로 넘어가는 것은 매우 위험하므로 Magit은 더 이상 그렇게하지 않습니다.


또한 새로운 와이프 모드 를 사용 하면 실수로 버려 져서 변경 사항을 잃지 않도록 보호 할 수 있습니다.


3
근거를 제시하고 설명 할 시간을 내 주셔서 감사합니다.
Greg Hendershott

10

내가 실수 것을 배운 것 같습니다 v바인딩, magit-revert-item하는 작업을 수행하는 데 사용 않았다 magit-discard-itemunstaged 심술쟁이의이 특별한 경우. <=== HERE ===아래에 넣은 의견을 참조하십시오 .

(defun magit-revert-item ()
  "Revert the item at point.
The change introduced by the item is reversed in the current
working tree."
  (interactive)
  (magit-section-action revert (info)
    ([* unstaged] (magit-discard-item))  ;; <=== HERE ===
    (commit (when (or (not magit-revert-item-confirm)
                      (yes-or-no-p "Revert this commit? "))
              (magit-revert-commit info)))
    (diff   (when (or (not magit-revert-item-confirm)
                      (yes-or-no-p "Revert this diff? "))
              (magit-apply-diff-item it "--reverse")))
    (hunk   (when (or (not magit-revert-item-confirm)
                      (yes-or-no-p "Revert this hunk? "))
              (magit-apply-hunk-item it "--reverse")))))

출처 : 1.4.2 코드 .

그러나 지금은 일어나지 않습니다.

(defun magit-reverse (&rest args)
  "Reverse the change at point in the working tree."
  (interactive (and current-prefix-arg (list "--3way")))
  (--when-let (magit-current-section)
    (pcase (list (magit-diff-type) (magit-diff-scope))
      (`(untracked ,_) (user-error "Cannot reverse untracked changes"))
      (`(unstaged  ,_) (user-error "Cannot reverse unstaged changes"))
      (`(,_      list) (magit-reverse-files (magit-section-children it) args))
      (`(,_     files) (magit-reverse-files (magit-region-sections) args))
      (`(,_      file) (magit-reverse-files (list it) args))
      (_               (magit-reverse-apply it args)))))

출처 : 마스터 :


그러나 k에 직접 바인딩됩니다 magit-discard-item. 나는 그것을 처음부터 사용하는 법을 배웠어야했다. 그것은 2.1.0 이전에 작동했지만 여전히 작동합니다.

결론적으로 magit 2.1.0은 크게 재 설계되었습니다. 이상한 코너 케이스가 살아남지 않았을 수도 있습니다. 그리고 나는 살아남을 필요가 없다는 것에 동의합니다. 열쇠를 다시 배울 게요.


1
훌륭한 세부 답변-받아 들일 수도 있습니다!
glucas
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.