programing

파일을 리셋하거나 특정 리비전으로 되돌리려면 어떻게 해야 합니까?

i4 2023. 4. 16. 14:33
반응형

파일을 리셋하거나 특정 리비전으로 되돌리려면 어떻게 해야 합니까?

변경된 파일을 특정 커밋해시로 이전 리비전으로 되돌리려면 어떻게 해야 합니까(및 을 통해 확인).

가 " "라고 합니다.c5f567:

git checkout c5f567 -- file1/to/restore file2/to/restore

git checkout man 페이지에서 더 많은 정보를 제공합니다.

「」보다 전의 .c5f567 , 추 ,~1(여기서 1은 되돌리는 커밋의 수이며, 임의의 것이 될 수 있습니다).

git checkout c5f567~1 -- file1/to/restore file2/to/restore

참고로, 이 명령어는 일반적인 것(브런치 간 변경)과 비정상적이고 파괴적인 것(작업 디렉토리의 변경을 파기하는 것) 모두에 사용되기 때문에 항상 불편했습니다.


수정된 작업 복사본 파일을 복원하기 위해 특별히 설계된 새로운 명령도 있습니다.git가 충분히 새로운 경우 다음 명령을 사용할 수 있지만 문서에는 경고가 포함되어 있습니다.

이 명령어는 실험적인 것입니다.동작이 바뀔 수 있습니다.

diff 명령어를 사용하면 파일 변경 내용을 빠르게 확인할 수 있습니다.

git diff <commit hash> <filename>

그런 다음 특정 파일을 해당 커밋으로 되돌리려면 reset 명령을 사용합니다.

git reset <commit hash> <filename>

하면 '어울리지 않다'를 해야 할 도 있어요.--hard옵션을 선택합니다.

경유지 관리에 적합한 워크플로우는 태그를 사용하여 타임라인에 지점을 깔끔하게 표시하는 것입니다.나는 당신의 마지막 문장을 잘 이해할 수 없지만 당신이 원하는 것은 이전 시점의 분기를 분리하는 것이다.이를 수행하려면 편리한 checkout 명령을 사용합니다.

git checkout <commit hash>
git checkout -b <new branch name>

변경 내용을 Marge할 준비가 되면 메인라인을 기준으로 기본 설정을 변경할 수 있습니다.

git checkout <my branch>
git rebase master
git checkout master
git merge <my branch>

가장 편리한 경우 SHA-1을 포함하여 git commit에 대한 참조를 사용할 수 있습니다.요점은 명령어가 다음과 같다는 것입니다.

git checkout [commit-ref] -- [filename]

git checkout -- foo

리셋됩니다.foo헤드로 이동합니다.다음 항목도 있습니다.

git checkout HEAD^ foo

리비전백 1회 등

또한 가장 자주 필요한 마지막 커밋 버전으로 되돌리려면 이 간단한 명령을 사용합니다.

git checkout HEAD file/to/restore

git v2.23.0으로 새로운 git restore 메서드가 있습니다.이 메서드는 그 일부를 상정하고 있습니다.git checkout) .git checkout꽤 혼란스럽네요)github 블로그에서 주요 변경 사항을 확인하십시오.

은, 「」로부터 입니다.source을 사용하다

Greg ( 해시가 'Greg Hewgill'이라고 )c5f567

git restore --source=c5f567 file1/to/restore file2/to/restore

또는 c5f567 이전의 1개의 커밋 내용으로 복원하는 경우:

git restore --source=c5f567~1 file1/to/restore file2/to/restore

아까도 같은 문제가 있었습니다만, 이 답변은 이해하기 쉬웠습니다.commit-ref는,

git checkout [commit-ref] [filename]

그러면 작업 디렉토리에 이전 버전이 저장되며, 여기에서 원하는 경우 해당 버전을 커밋할 수 있습니다.

되돌아가야 할 커밋 수를 알고 있는 경우 다음을 사용할 수 있습니다.

git checkout master~5 image.png

지금 한 것입니다.master5번, 5번, 5번

찾은 것 같아요.http://www-cs-students.stanford.edu/~blynn/submagic/ch02.http://http://www-cs-students.stanford.edu/ 에서.

때로는 과거로 돌아가 특정 시점을 지난 모든 변화를 잊고 싶을 때가 있습니다. 왜냐하면 모두 틀렸기 때문입니다.

시작:

$ git log

는 최근 커밋과 그 SHA1 해시 목록을 보여줍니다.

다음으로 다음을 입력합니다.

$ git reset --hard SHA1_HASH

상태를 지정된 커밋으로 복원하고 레코드에서 새로운 커밋을 모두 영구적으로 지웁니다.

이 방법은 효과가 있었습니다.

git checkout <commit hash> file

다음으로 변경을 커밋합니다.

git commit -a

"롤백"이라고 말할 때는 조심해야 합니다.이전에 커밋 $A에 파일 버전이 하나 있었는데 나중에 두 개의 개별 커밋 $B와 $C에서 두 개의 변경을 가한 경우(따라서 이 파일은 세 번째 반복된 파일입니다), "첫 번째 버전으로 롤백하고 싶습니다"라고 말하는 경우, 정말로 그런 의미입니까?

두 번째와 세 번째 반복 모두에 대한 변경을 삭제하는 방법은 매우 간단합니다.

$ git checkout $A file

그 결과를 커밋합니다.명령어는 "commit $A에 의해 기록된 상태에서 파일을 체크 아웃하고 싶다"고 묻습니다.

한편, 당신이 의미하는 것은 $C가 파일에 한 커밋을 유지하면서 두 번째 반복(즉, $B를 커밋)이 가져온 변경을 없애자는 것입니다.

$ git revert $B

커밋 $B를 작성한 사람이 누구였든 간에 규율이 잘 지켜지지 않고 같은 커밋에서 전혀 관련 없는 변경을 커밋했을 수 있습니다.또, 이 되돌림에서는, 문제가 되는 변경을 확인할 수 있는 파일 이외의 파일에 영향을 주는 경우가 있기 때문에, 그 후에 결과를 주의 깊게 체크하는 것이 좋습니다.

  1. Git 파일을 특정 커밋으로 되돌리기
git checkout Last_Stable_commit_Number -- fileName

2. 파일을 특정 브랜치로 되돌리기

git checkout branchName_Which_Has_stable_Commit fileName

도 ★★★★★★★★★★★★★★★★★.git checkout foo이 "Directory( 이름)"에 경우 .foogit checkout HEAD foo ★★★★★★★★★★★★★★★★★」git checkout ./foo 용용 :

$ pwd
/Users/aaron/Documents/work/foo
$ git checkout foo
D   foo
Already on "foo"
$ git checkout ./foo
$ git checkout HEAD foo

배 here here!rebase 삭제:

git checkout <my branch>
git rebase master
git checkout master
git merge <my branch>

다음과 같이 가정합니다.

---o----o----o----o  master
    \---A----B       <my branch>

처음 두 명령어... commit git checkout git rebase master

에합니다.에 적용할 변경 브런치를 체크합니다.master★★★★★★rebase<my branch>에 것).master )의.master, , .의 첫 번째 커밋의 <my branch>는, 「」의의 .master 단, ""의 ""master두두 명령어는 2개입니다.

git rebase master <my branch>

"base" 브랜치와 "modify" 브랜치는 모두 명시적이기 때문에 이 명령을 기억하는 것이 더 쉬울 수 있습니다.

최종 이력 결과는 다음과 같습니다.

---o----o----o----o   master
                   \----A'----B'  <my branch>

마지막 두 명령어는...

git checkout master
git merge <my branch>

빨리 합니다...모두 적용하려면 빨리 감기 병합을 수행합니다.<my branch> changes로 바뀝니다.master은 rebase rebase에 master최종 결과는 다음과 같습니다.

---o----o----o----o----A'----B'  master, <my branch>

master ★★★★★★★★★★★★★★★★★」<my branch> 참조 '''B' 이 부터 ,, 이, 음, 음은 삭제해도 <my branch>★★★★★★ 。

git branch -d <my branch>

대상 파일의 첫 번째 헤드 재설정

git reset HEAD path_to_file

해당 파일의 두 번째 체크아웃

git checkout -- path_to_file

파일을 이전 커밋(및 이미 커밋된 파일)으로 되돌리는 경우 사용할 수 있습니다.

git checkout HEAD^1 path/to/file

또는

git checkout HEAD~1 path/to/file

그런 다음 '새로운' 버전을 준비하여 커밋합니다.

병합의 경우 커밋에 2명의 부모를 둘 수 있다는 것을 알고 있으므로 HEAD^1이 첫 번째 부모이고 HEAD~1이 두 번째 부모임을 알아야 합니다.

트리에 부모가 1명밖에 없는 경우 둘 중 하나가 작동합니다.

git-block, awk, 그리고 shell-block을 구하러 가자!

git prevision <N> <filename>

서 ''는<N>는, 「의 하는 .<filename>.
단일 하려면 , 「」를 참조해 주세요.x/y/z.c 뛰어요, 뛰어요.

git prevision -1 x/y/z.c

git prevision은 어떻게 동작합니까?

, 하다, 하다, 하다, 하다, 하다, 하다, 하다, 하다, 하다, 하다, 하다, 하다, 하다, 하다, 하다, 하다, 하다, 하다.gitconfig

[alias]
        prevision = "!f() { git checkout `git log --oneline $2 |  awk -v commit="$1" 'FNR == -commit+1 {print $1}'` $2;} ;f"

명령어는 기본적으로

  • 합니다.git log 및 ""에 대해"를 선택합니다.
  • 파일 이력에서 적절한 commit-id를 선택하고
  • 합니다.git checkoutcommit-id하다

모든 것, 즉 모든 은 다음과 같습니다.
하나의 아름답고 효율적인 git-discription으로 마무리됨 - git-discision

여기에서는 많은 , ' 하다'와 비슷합니다. 을 사용하다git checkout $revision -- $file 불명확한은 다음과 같습니다.

git show $revision:$file > $file

또한 특정 버전을 일시적으로 보기 위해 자주 사용합니다.

git show $revision:$file

또는

git show $revision:$file | vim -R -

(OBS:)$file에 needs needs needs needs needs needs를 붙여야 ../ git show $revision:$file하다

그리고 더 이상한 건

git archive $revision $file | tar -x0 > $file

여기에 EasyGit을 꽂아야 합니다.이것은 경험이 많은 유저에게 혼란을 주지 않고 Git를 초보자에게도 쉽게 접근할 수 있도록 하기 위한 래퍼입니다.그 중 하나는 에 더 많은 의미를 부여하는 것입니다.이 경우, 다음과 같이 말할 수 있습니다.

eg revert foo/bar foo/baz

주의해 주세요.git checkout ./foo ★★★★★★★★★★★★★★★★★」git checkout HEAD ./foo완전히 같은 것은 아닙니다.그 좋은 예:

$ echo A > foo
$ git add foo
$ git commit -m 'A' foo
Created commit a1f085f: A
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 foo
$ echo B >> foo
$ git add foo
$ echo C >> foo
$ cat foo
A
B
C
$ git checkout ./foo
$ cat foo
A
B
$ git checkout HEAD ./foo
$ cat foo
A

번째 (두째))add는 파일을 인덱스로 스테이징하지만 커밋되지 않습니다.)

Git checkout ./foo 경로입니다../foo색인에서 추가HEAD합니다.HEAD정하하전전전전전전전수수 수

저에게 있어 답변은 어느 것도 명확하지 않아 매우 쉬워 보이는 제 답변을 추가하고 싶습니다.

는 할 이 있다.abc1후, 파일 개, 개, 개 ( 1 개 )을 번( 한 했습니다.file.txt.

가 파일 을 망쳤다고 .file.txt 싶다.abc1.

1.git checkout file.txt 없는 로컬 변경이

2.git checkout abc1 file.txt: 원하는 버전으로 파일을 가져옵니다.

3.git commit -m "Restored file.txt to version abc1":이렇게 하다.

  1. git push.「 」 。

2단계와 3단계 사이에서는 할 수 .git status무슨 일이 일어나고 있는지 알기 위해서요.은 '아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아.file.txt되어 있기 에, 이이 、 already already 、 문 already 、 그 already 、 멘 already already already already already already already already already already already already already already already already already already already already already already already already가 .git add.

에서는 많은 이 '아주 좋다', '아주 좋다', '아주 좋다'를 .git reset ... <file> ★★★★★★★★★★★★★★★★★」git checkout ... <file>.<file>되돌리는 커밋 후에 커밋됩니다.

의 커밋에서 는, 「」와 .git revert의 파일의 서브셋)에만 할 수 모두 1개의 파일(커밋파일의 서브셋)을하는 것을 합니다.을 하다git diff ★★★★★★★★★★★★★★★★★」git apply 함께)<sha>=의 해시 : = "복귀할 " :

git diff <sha>^ <sha> path/to/file.ext | git apply -R

기본적으로 먼저 되돌리는 변경에 대응하는 패치를 생성한 후 패치를 역적용하여 해당 변경을 폐기합니다.

이 론론음음음 of of 、 of 、 음 、 음 、 of of of of of 。<sha1> ★★★★★★★★★★★★★★★★★」HEAD( ( )

git log --oneline  // you see commits, find commit hash to which you want reset
git diff y0urhash src/main/.../../YourFile.java   // to see difference
git reset y0urhash src/main/.../../YourFile.java   // revert to y0urhash commit
git status                                        // check files to commit
git commit -m "your commit message"
git push origin

파일의 이전 버전의 커밋으로 이동하려면 커밋 번호를 가져옵니다(예: eb917a1).

git checkout eb917a1 YourFileName

마지막으로 커밋된 버전으로 돌아가야 하는 경우

git reset HEAD YourFileName
git checkout YourFileName

마지막으로 커밋된 파일 상태로 이동합니다.

이것은 매우 간단한 단계입니다.원하는 커밋 ID에 대한 체크 아웃 파일, 여기에 앞서 커밋 ID가 하나 있고, 그 다음 커밋 수정만 하면 됩니다.

# git checkout <previous commit_id> <file_name>
# git commit --amend

이것은 매우 편리합니다.커밋의 맨 위에 있는 이전 커밋 ID에 파일을 가져오려는 경우 쉽게 수행할 수 있습니다.

git checkout ref | commitHash -- filePath

예.

git checkout HEAD~5 -- foo.bar
or 
git checkout 048ee28 -- foo.bar

다음 4단계로 할 수 있습니다.

  1. 특히 되돌리는 파일을 사용하여 커밋 전체를 되돌립니다.커밋이 브랜치에 새로 생성됩니다.
  2. soft reset that commit - 커밋을 삭제하고 변경을 작업 영역으로 이동합니다.
  3. 복구할 파일을 직접 선택하여 커밋합니다.
  4. 작업 영역에 있는 다른 모든 파일 삭제

단말기에 입력해야 할 항목:

  1. git revert <commit_hash>
  2. git reset HEAD~1
  3. git add <file_i_want_to_revert> & & &git commit -m 'reverting file'
  4. git checkout .

행운을 빌어요

git log하여 사용하다git checkout <hashkey>

주의: 마지막 해시 앞에 해시를 입력하는 것을 잊지 마십시오.마지막 해시는 현재 위치(HEAD)를 가리키며 변경되지 않습니다.

분명히 누군가는 git에 알기 쉬운 책을 쓰거나 git에 대한 설명이 문서로 더 잘 필요할 것입니다.이 같은 문제에 직면하여 나는 추측했다.

cd <working copy>
git revert master

마지막 약속을 취소하는 것 같아요

이안

git revert <hash>

지정된 커밋을 되돌립니다.요.git revert최신 커밋에만 영향을 줍니다.

특정 파일의 변경 내용을 되돌리고 해당 파일보다 더 많이 변경된 커밋을 실행해도 문제가 해결되지 않습니다.

언급URL : https://stackoverflow.com/questions/215718/how-do-i-reset-or-revert-a-file-to-a-specific-revision

반응형