git 선택적으로 파일에서 로컬 변경사항 되돌리기
svn repo를 추적하는 나의 git repo에서 나는 하나의 파일에 여러번 편집을 했습니다.
이제 svn revert와 같은 변경 사항을 되돌리고 싶지만 파일의 일부만 되돌리고 싶습니다.
파일의 diff를 보고 원하지 않는 변경사항을 폐기(리버스)하고 원하는 변경사항을 유지할 수 있기를 원합니다.
그
git add -i
명령어는 그렇게 할 수 있는 옵션이 있는 것 같지만 아직 이것을 무대에 올리고 싶지는 않습니다.
가장 간단하게 다음을 수행할 수 있다고 생각합니다.
git checkout -p <optional filename(s)>
manpage에서:
−p, −−patch Interactively select hunks in the difference between the <tree−ish> (or the index, if unspecified) and the working tree. The chosen hunks are then applied in reverse to the working tree (and if a <tree−ish> was specified, the index).
This means that you can use git checkout −p to selectively discard
edits from your current working tree.
를 하면 바로 할 수.git checkout -p. 아래 Daniel Stutzbach의 답변을 보세요.
()checkout -p소개됨):
이렇게 할 수 있습니다.
git add -i
(유지하려는 헝크를 선택합니다)
git commit -m "tmp"
이제는 유지할 변경사항만 포함하고 나머지는 단계적으로 변경할 수 있습니다.
git reset --hard HEAD
이 시점에서 커밋되지 않은 변경사항이 삭제되었으므로, 깨끗한 작업 디렉토리와 커밋된 변경사항을 맨 위에 유지할 수 있습니다.
git reset --mixed HEAD^
이렇게 하면 마지막 커밋('tmp')은 제거되지만 수정사항은 작업 디렉토리에 단계 없이 유지됩니다.
된 : --soft와 함께--mixed의 이 가능합니다.
를 할 .git diff파일에 결과 diff를 저장하고 편집하여 저장할 변경사항을 제거한 다음 실행합니다.patch -R나머지 차이를 되돌리기 위해서입니다.
git diff 파일.txt > patch.tmp# patch.tmp를 편집하여 보관할 헝크를 제거합니다.패치 -R <patch.tmp
당신이 원하는 것처럼 보입니다.
git revert --no-commit $REVSISON
그러면 사용할 수 있습니다.
git diff --cached
커밋하기 전에 변경할 내용을 확인합니다(뒤로 되돌리는 것은 과거의 변경 내용의 역순으로 복제하는 순방향 커밋에 불과하므로).
따라 ( Git 할 수 있습니다.git rebase -i) 마음에 들지 않는 커밋으로 돌아가서 커밋을 소급 편집하여 마음에 들지 않는 변경이 일어나지 않도록 하는 것입니다. 하지만 일반적으로 다시는 보고 싶지 않을 것이라는 것을 알고 있는 경우에만 해당됩니다.
질문을 다시 읽어보면 작업 트리에 있는 변경 사항을 되돌리고 이전에 실행된 변경 사항이 아닌 다른 일부 답변을 되돌리고 싶은 것처럼 들립니다.명확하게 말씀해 주시겠습니까?
변경 사항이 작업 복사본에만 있는 경우 가장 쉽게 변경 사항을 준비할 수 있습니다.
git add -i <file>
그런 다음 인덱스 버전을 확인하여 보관하지 않으려는 변경 사항은 버립니다.
git checkout -- <file>
그런 다음 변경 내용을 아직 스테이징하지 않으려면 변경 내용의 스테이징을 해제합니다.
git reset -- <file>
이 방법은 선택한 변경사항을 파일(또는 사용자가 지정한 파일)로 되돌리기만 하고, 되돌려야 하는 임시 커밋은 만들지 않습니다.
이전 커밋에서 변경한 내용 중 일부만 선택적으로 적용하려면 먼저 파일을 이전 커밋 상태로 재설정할 수 있습니다.
git reset <commit_before_first_unwanted_change> -- <file>
그러면 당신은 이전의 레시피를 따를 수 있습니다.git add -i <file>당신이 지키고 싶어하는 변화를 무대에 올리기 위해서는git checkout -- <file>원치 않는 변화를 버리고git reset -- <file>변경 사항을 'unstage'합니다.
여기 답변에 설명된 명령줄 옵션은 파일이 ssh 터미널을 통해 액세스하는 서버에 있을 때 유용합니다.그러나 파일이 로컬 컴퓨터에 있을 때는 다음과 같은 방법을 선호합니다.
넷빈 편집기(git 지원과 함께 제공됨)에서 파일을 엽니다.Netbeans는 줄 번호에 빨간색/녹색/파란색 표시를 붙여 삭제/추가/수정된 위치를 표시합니다(각각).
이 표시 중 하나를 마우스 오른쪽 단추로 클릭하면 해당 변경사항을 취소할 수 있습니다.또한 빨간색과 파란색 표시를 마우스 오른쪽 버튼으로 클릭하면 팝업에서 이전 버전을 볼 수 있습니다.
언급URL : https://stackoverflow.com/questions/1109069/git-selective-revert-local-changes-from-a-file
'codememo' 카테고리의 다른 글
| Oracle에서 외부 키 가져오기 (0) | 2023.10.05 |
|---|---|
| MySQL은 왜 이러한 가능한 키를 사용하지 않습니까? (0) | 2023.10.05 |
| Jquery에서 확인란을 선택했을 때 듣는 방법 (0) | 2023.10.05 |
| MySQL에서 'go'에 해당하는 것은 무엇입니까? (0) | 2023.10.05 |
| is java.sql.타임스탬프 시간대를 지정하시겠습니까? (0) | 2023.09.25 |