programing

깃 저장소를 특정 커밋으로 롤백하려면 어떻게 해야 합니까?

padding 2023. 5. 28. 20:23
반응형

깃 저장소를 특정 커밋으로 롤백하려면 어떻게 해야 합니까?

제 레포에는 현재 100개의 커밋이 있습니다.저장소를 롤백하여 80을 커밋하고 이후의 모든 저장소를 제거해야 합니다.

왜요?

이 보고서는 기타 사용자의 병합을 위한 것으로 간주됩니다.과도한 편집으로 인해 저의 커밋으로 병합이 많이 들어갔습니다.그것은 3명의 개발자가 서로 라벨링된 원격 지점의 레이블링이 잘못되었기 때문입니다.그 시점으로 다시 설정한 다음 앞으로 당겨야 합니다.

다음 예와 같이 기본값을 변경하려고 했습니다.GitHub에서 커밋을 제거하려면 어떻게 해야 합니까?

하지만 git은 내가 갈등 관리를 많이 하기를 원합니다.더 간단한 방법이 있습니까?

git reset --hard <old-commit-id>
git push -f <remote-name> <branch-name>

참고: 아래 설명과 같이, 공동 작업 환경에서 이것을 사용하는 것은 위험합니다: 기록을 다시 쓰는 중입니다.

가장 최근의 커밋을 실행 취소하려면 다음을 수행합니다.

첫 번째:

git log

실행 취소할 최신 SHAID를 가져옵니다.

git revert SHA

그러면 커밋과 정반대의 새로운 커밋이 생성됩니다.그런 다음 이 새 커밋을 눌러 앱을 이전 상태로 전환하면 Git 내역에 따라 이러한 변경 사항이 표시됩니다.

이것은 당신이 방금 저지른 일을 즉시 다시 하는 데 도움이 됩니다. 저에게는 더 자주 있는 일입니다.

Mike가 언급했듯이 다음 작업도 수행할 수 있습니다.

git revert HEAD

다른 방법:

되돌리려는 분기를 체크아웃한 다음 로컬 작업 복사본을 다시 원격 서버에서 최신 작업 복사본으로 재설정합니다(모든 작업 복사본은 나중에 바이바이됩니다).이를 위해 소스 트리에서 를 마우스 오른쪽 단추로 클릭하고 "Reset BranchNAME to this commit"을 선택했습니다.

그런 다음 리포지토리의 로컬 디렉토리로 이동하여 다음 명령을 실행합니다.

git -c diff.mnemonicprefix=false -c core.quotepath=false push -v -f -- tags REPOSITORY_NAME BRANCHNAME:BRANCHNAME 

이렇게 하면 로컬 리포지토리의 현재 커밋 뒤에 있는 모든 커밋이 지워지고 해당 분기에 대해서만 삭제됩니다.

대부분의 제안은 마지막 20개의 커밋을 어떻게든 파기해야 한다고 가정하고 있습니다. 그래서 "역사를 다시 쓰는 것"을 의미하지만 그럴 필요는 없습니다.

커밋 #80에서 새 분기를 생성하고 앞으로 해당 분기에 대해 작업합니다.나머지 20개의 커밋은 오래된 고아 분기에 남아 있습니다.

새 분기의 이름을 동일하게 하려면 기본적으로 분기는 레이블에 불과합니다.이전 분기의 이름을 다른 이름으로 변경한 다음 commit #80에 원하는 이름으로 새 분기를 만듭니다.

마스터에서 분기 업데이트를 수행할 때 가끔 너무 클릭하여 분기가 마스터에 병합되는 경우가 있습니다.그걸 되돌릴 방법을 찾았어요

만약 당신의 마지막 약속이 합병이었다면, 조금 더 많은 사랑이 필요합니다.

git revert -m 1 HEAD

github에서는 github UI의 branchs 탭 아래에 있는 원격 분기를 삭제하는 것이 가장 쉬운 방법입니다.분기를 삭제할 수 있도록 하려면 다음 설정을 제거해야 합니다.

  1. 기본 분기가 아님
  2. 공개 의견조사 요청이 없습니다.
  3. 분기가 보호되지 않습니다.

이제 이전 커밋 지점을 가리키도록 로컬 리포지토리에 다시 만들고 원격 repo에 다시 추가합니다.

git checkout -b master 734c2b9b   # replace with your commit point

그런 다음 로컬 분기를 원격으로 푸시합니다.

git push -u origin master

기본 분기 및 분기 보호 등을 다시 추가합니다.

git log

분기 전환: (참고 1)

git checkout branch_name

로컬 폴백:

git reset --soft commitID  

이 명령은 지정된 커밋 후에만 커밋 로그를 제거합니다.코드에 대한 변경 사항을 유지하는 동안 ID.

또는

git reset --hard commitID  

이 명령은 지정된 커밋 후 변경 사항을 완전히 제거합니다.코드를 이전 상태로 효과적으로 되돌리는 ID입니다.

원격 저장소 동기화: (참고 2)

git push origin HEAD --force

*(참고 1) 분기를 전환하기 전에 변경 내용을 커밋하거나 저장하라는 메시지가 표시됩니다.변경 사항을 커밋하지 않고 다른 분기로 전환하려고 하면 "분기를 전환하기 전에 변경 사항을 커밋하거나 저장하십시오."라는 메시지가 표시됩니다.그러나 현재 분기의 기능 개발을 아직 완료하지 않은 경우 커밋이 불완전하게 느껴질 수 있습니다.이 경우 "git stash" 명령을 사용하여 수정되었지만 커밋되지 않은 코드를 숨길 수 있습니다.이렇게 하면 수정된 코드를 표시하지 않고 코드를 마지막 커밋 상태로 되돌립니다.작업 중이던 분기로 돌아가면 "git stash pop" 명령을 사용하여 숨겨진 코드를 복원할 수 있습니다.

(참고 2) "https://github.com/xxxxx/xxxxxxx.git/' : OpenSSL SSL_read: Connection was reset, errno 10054" 오류가 발생할 경우, 서버의 SSL 인증서가 타사에 의해 서명되지 않았기 때문일 수 있습니다.하려면 이문를해려면다음을입력여 SSL인설수있다습니정할않을 입력하여 할 수 .git config --global http.sslVerify "false"작업을 다시 시도하기 전에 Git Bash에 저장합니다.*

언급URL : https://stackoverflow.com/questions/4372435/how-can-i-rollback-a-git-repository-to-a-specific-commit

반응형