programing

Git에서 한 파일의 작업 복사 수정 내용을 실행 취소하시겠습니까?

abcjava 2023. 4. 16. 14:18
반응형

Git에서 한 파일의 작업 복사 수정 내용을 실행 취소하시겠습니까?

마지막 커밋 후 작업 복사본에 있는 많은 파일을 수정했지만 최근 커밋과 동일한 상태로 리셋할 때처럼 해당 파일 중 하나에 대한 변경 내용을 취소하고 싶습니다.

다만, 그 파일 1개의 작업 카피 변경만을 실행 취소해 주세요.

그걸 어떻게 하는 거죠?

사용할 수 있습니다.

git checkout -- file

이 작업을 수행할 때마침--하는 바와 ) 태그 식별자될 수 (nimrodm)을 사용하면 (nimrodm)는 """" ("nimrodm""을 사용합니다.)--고입니니다다

특정 버전의 파일을 체크 아웃 할 수도 있습니다.

git checkout v1.2.3 -- file         # tag v1.2.3
git checkout stable -- file         # stable branch
git checkout origin/master -- file  # upstream master
git checkout HEAD -- file           # the version from the most recent commit
git checkout HEAD^ -- file          # the version before the most recent commit

그냥 사용하다

git checkout filename

그러면 파일 이름이 현재 분기의 최신 버전으로 바뀝니다.

경고: 변경 내용이 파기됩니다.백업은 보관되지 않습니다.

git checkout <commit> <filename>

오늘 drupal 6.10으로 업그레이드 했을 때 favicon이 몇 번 덮어쓰기 되어 있는 것을 알고 다시 돌려받을 수 밖에 없었기 때문에 이것을 사용했습니다.제가 한 일은 다음과 같습니다.

git checkout 088ecd favicon.ico

파일이 이미 스테이징되어 있는 경우(파일을 편집한 후 git add 등을 실행했을 때) 변경 내용을 언스테이징합니다.

사용하다

git reset HEAD <file>

그리고나서

git checkout <file>

아직 스테이징되지 않은 경우에는

git checkout <file>

git bash를 완료했습니다.

(use "git checkout -- <file>..." to discard changes in working directory)

  1. Git 상태[이렇게 해서 한 개의 파일이 수정되었습니다]
  2. git checkout --index.devel [index.devel 파일에서 i가 변경되었습니다.
  3. git status [이러한 변경은 삭제되었습니다]

여기에 이미지 설명 입력

그 1개의 파일에 대한 이전 커밋의 변경을 원래대로 되돌리려면 , 다음의 조작을 실행할 수 있습니다.

git checkout branchname^ filename

그러면 파일이 마지막 커밋 전과 동일하게 체크 아웃됩니다.을 몇 더 , 「」를 합니다.branchname~n표기법

2은 Git 2.23†를 도입했습니다.restore이런 질문에 대한 해답을 알기 쉽게 하기 위해서라고 생각합니다.

git restore [--] <pathspec>...

그렇듯이, 「」는--할 수 「은 「브런치명」이 됩니다.「브런치명」은, 「브런치명」으로 혼동할 수 없습니다.restore do-all과 분기가 되어 있지 않습니다.checkout)

부터 말하면, 【막막】restore는, 「 파일」을 사용해 스테이지 된 도 있습니다.--staged하다, 복원하다와는 HEAD--source=<tree>.

이 응답은 동일한 폴더 또는 여러 디렉토리 내의 여러 특정 파일에 있는 로컬 변경을 취소하는 데 필요한 명령어에 대한 응답입니다.이 답변에서는 특히 사용자가 여러 파일을 가지고 있지만 모든 로컬 변경을 실행 취소하지 않는 경우의 질문에 대해 설명합니다.

명령어(1개 또는 여러 개)를 할 수 .git checkout -- file하여 각

git checkout -- name1/name2/fileOne.ext nameA/subFolder/fileTwo.ext

위의 name1/name2/fileOne.ext nameA/subFolder/fileTwo.ext 사이의 공백에 주의하십시오.

동일한 폴더에 여러 파일이 있는 경우:

특정 디렉토리의 모든 파일에 대한 변경을 폐기해야 할 경우 다음과 같이 git checkout을 사용합니다.

git checkout -- name1/name2/*

위의 아스타리스크는 name1/name2 아래의 해당 위치에 있는 모든 파일을 언로드하는 기능을 합니다.

마찬가지로 다음과 같이 여러 폴더에 대한 모든 파일의 변경 내용을 취소할 수 있습니다.

git checkout -- name1/name2/* nameA/subFolder/*

위의 name1/name2/* nameA/subFolder/* 사이의 공백에 유의하십시오.

주의: name1, name2, nameA, subFolder - 이 예제의 폴더명은 모두 문제의 파일이 존재하는 폴더 또는 패키지를 나타냅니다.

, 케이스가 요. 를 들어 이 리마인더 테스트 케이스가 이것이 있다고 합시다.bash git:

set -x
rm -rf test
mkdir test
cd test
git init
git config user.name test
git config user.email test@test.com
echo 1 > a.txt
echo 1 > b.txt
git add *
git commit -m "initial commit"
echo 2 >> b.txt
git add b.txt
git commit -m "second commit"
echo 3 >> b.txt

변경은 캐시 내에서 스테이징되지 .git status 말합니다

$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   b.txt

no changes added to commit (use "git add" and/or "git commit -a")

부터의 경우는, 「우선」, 「우선」을 합니다.git checkout 됩니다

$ git checkout HEAD -- b.txt
$ git status
On branch master
nothing to commit, working directory clean

신신면면면면면면면면면면면을 하면git reset을 사용하다

$ git reset HEAD -- b.txt
Unstaged changes after reset:
M   b.txt
$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   b.txt

no changes added to commit (use "git add" and/or "git commit -a")

않은 " " 입니다.git reset다르지 , ★★★★★★★★★★★★★★★★★★★★★★★」git checkout을 사용하다


위의 된 내용이 스테이징git add b.txt마지막에.

「」는,git status 되면 이쯤에서, 이쯤에서.

$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    modified:   b.txt

부터의 경우는, 「우선」, 「우선」을 합니다.git checkout 됩니다

$ git checkout HEAD -- b.txt
$ git status
On branch master
nothing to commit, working directory clean

신신면면면면면면면면면면면을 하면git reset을 사용하다

$ git reset HEAD -- b.txt
Unstaged changes after reset:
M   b.txt
$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   b.txt

no changes added to commit (use "git add" and/or "git commit -a")

-이 스테이징된 - " " " 입니다.git reset 없는 변경으로 단, 단계적인 변경은 단계적인 변경으로 이루어집니다.git checkout는 변경을 완전히 덮어씁니다.

ID를 는 SHA ID입니다.떻게게 하면 ?? ???git checkout <sha hash id> <file name>

나에겐 이것만 통했어

git checkout -p filename

여기에 이미지 설명 입력

아직 커밋을 푸시 또는 공유하지 않은 경우:

git diff --stat HEAD^...HEAD | \
fgrep filename_snippet_to_revert | cut -d' ' -f2 | xargs git checkout HEAD^ --
git commit -a --amend

git restore 파일

다음 중복 답변을 참조하십시오(2020 업데이트까지 스크롤 다운하십시오). https://stackoverflow.com/a/31281748/12763497

이미 커밋된 경우 파일의 변경을 되돌리고 다시 커밋한 후 마지막 커밋으로 새 커밋을 스쿼시할 수 있습니다.

git checkout a3156ae4913a0226caa62d8627e0e9589b33d04c -p */SearchMaster.jsp

분석: a3156ae4913a0226caa62d8627e0e9589b33d04c = 이것은 커밋의 해시 값입니다.그것은 내 개인 지사에 있다(사 아님)에 있다.

-p 플래그가 경로입니다.

*/SearchMaster.jsp는 파일 이름입니다.

언급URL : https://stackoverflow.com/questions/692246/undo-working-copy-modifications-of-one-file-in-git

반응형