소프트웨어 개발은 아무리 경험이 있더라도 실수를 저지르는 것은 불가피합니다. 그러나 좋은 프로그래머와 일반 프로그래머의 차이점은
오류를 취소하는 방법을 알고 있다는 것입니다!
git을 버전 제어 시스템으로 사용하는 경우 이미 강력한 "실행 취소 도구"세트가 있습니다. 이 기사는 GIT로 오류를 취소하는 5 가지 강력한 방법을 보여줍니다!
키 포인트
git을 사용하면 사용자가 원치 않는 로컬 변경 사항을 폐기하여 코드에서 오류를 취소 할 수 있습니다. 이것은 파일을 마지막으로 커밋 된 상태로 재설정하는 명령을 사용하여 수행 할 수 있습니다. 보다 세분화 된 제어를 위해서는
플래그를 사용하여 패치 레벨에서 변경 사항을 폐기 할 수 있습니다.
명령은 특정 파일을 특정 버전으로 복원하는 데 사용될 수 있습니다. 사용자는 손상된 파일의 "오류 커밋"을 식별 한 다음 명령을 사용하여 잘못된 커밋 전에 파일을 버전으로 복원 할 수 있습니다.
git의 - 도구를 사용하여 손실 된 버전 또는 삭제 된 분기를 복원 할 수 있습니다. 는 로컬 저장소에서 모든 헤드 포인터의 움직임을 기록하여 사용자가 이전 상태로 돌아와 손실 된 데이터를 복원 할 수 있습니다.
git restore
사용자는 명령을 사용하여 커밋을 다른 지점으로 이동할 수 있습니다. 커밋이 잘못된 지점에 있으면 사용자는 올바른 지점을 확인하고 커밋을 이동 한 다음 -p
를 사용하여 원래 지점에서 원치 않는 커밋을 삭제할 수 있습니다.
-
일부 지역 변경 사항을 버립니다
git log
인코딩 프로세스는 일반적으로 혼란 스럽습니다. 때때로 그것은 앞으로 두 단계와 한 걸음 물러나는 것처럼 느껴집니다. 다시 말해 : 당신이 쓴 코드 중 일부는 훌륭하지만 일부는 그렇지 않습니다. 이곳은 Git이 당신을 도울 수있는 곳입니다. 좋은 부품을 유지하고 더 이상 필요없는 변화를 버릴 수 있습니다. git checkout
일부 "로컬"변경 사항 (즉, 아직 제출되지 않은 변경 사항)이 포함 된 샘플 시나리오를 살펴 보겠습니다.
-
Reflog
참고 : 더 나은 개요와 명확한 시각화를 위해 일부 스크린 샷에서 Tower Git 데스크탑 클라이언트를 사용했습니다. 이 튜토리얼을 배우기 위해 타워가 필요하지 않습니다. Reflog
먼저
에서 문제를 해결합시다. 우리가 만든 변화는 완전히 잘못된 방향으로 진행되었습니다. 모든 변경 사항을 취소하고 파일의 마지막 커밋 상태를 재현합시다.
-
또는
git cherry-pick
명령을 사용하여 동일한 결과를 달성 할 수 있습니다. 그러나 는 다양한 용도와 의미를 가지고 있기 때문에 약간 업데이트 된 명령을 사용하는 것을 선호합니다 (이러한 유형의 작업에만 초점을 맞 춥니 다). git reset
의 두 번째 질문은 약간 까다 롭습니다. 이 파일에서 우리가 만든 변경 중 일부는 실제로 양호하며 일부만 문서화되지 않아야합니다.
동일, 명령은 문제를 해결합니다. 그러나 이번에는 "패치"레벨에 깊이 들어가기 때문에
git은 당신을 안내하고 당신에게 묻고 해당 파일의 의 모든 변경에 대해 묻습니다. git restore
-p
당신은 내가 첫 번째 블록 변경에 대해 "n"을 입력하고 (유지하기 위해) 두 번째 블록 변경에 대해 "y"를 입력 한 것을 알 수 있습니다 (폐기). 프로세스가 완료되면 첫 번째 귀중한 변화 만 남아 있음을 알 수 있습니다. $ git restore css/general.css
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
는 특정 파일을 이전 상태 <🎜 로 재설정합니다
때때로 <🎜 🎜> 특정 파일을 <🎜 🎜> 특정 <🎜 🎜> 버전으로 복원 할 수 있습니다. 예를 들어, 당신은 가 과거의 어느 시점에서 잘 작동했지만 지금은 그렇지 않다는 것을 알고 있습니다. 이 시점에서 당신은 시간을 되돌리고 싶지만 전체 프로젝트가 아닌이 특정 파일에 대해서만 가고 싶습니다!
먼저 복원 할 정확한 버전을 찾아야합니다. 올바른 매개 변수 세트를 사용하면 <🎜 🎜> 명령에 개별 파일의 기록을 표시 할 수 있습니다.
<<>
이것은 변경된 커밋 만 표시되며 문제가 나타나는 "Bad Apple"버전을 찾는 데 매우 유용합니다.
더 많은 정보가 필요 하고이 커밋의 내용을 보려면 <🎜 🎜>를 보려면 <🎜 🎜> 플래그를 사용 하여이 커밋의 실제 변경 사항을 표시 할 수 있습니다.
우리가 귀여운 작은 파일을 손상시킨 잘못된 커밋을 찾으면 오류를 해결할 수 있습니다. 우리는 <🎜 🎜> 커밋 전에 파일의 버전을 복원하여이를 수행합니다! 이것은 중요합니다. 잘못된 커밋에서 파일을 재개하는 대신 커밋 전에 마지막 좋은 상태를 복원합니다!
가 잘못 커밋의 해시 값에 참석하면 git에게 다음을 수행하도록 지시합니다.
이 명령을 실행 한 후, 당신은 당신의 로컬 작업 사본에서 index.html
가 수정되었음을 알게 될 것입니다 : Git은 우리를 위해 마지막으로 좋은 버전의 파일을 복원했습니다!
리플 로그를 사용하여 손실 된 버전을 복구하십시오
GIT 응급 처치 키트의 또 다른 강력한 실행 취소 도구는 "Reflog"입니다. Commit, Checkout, Merge and Rebase, Cherry-Pick 및 Reset과 같은 로컬 저장소에서 발생하는 모든 헤드 포인터 움직임을 기록하는 로그로 생각할 수 있습니다. 더 중요한 작업은 모두 여기에서 잘 기록 될 것입니다! 물론, 그러한 로그는 일이 잘되지 않는 상황에 적합합니다. 먼저 작은 재난을 만들어 봅시다. 그러면 우리는 리플 로그로 고칠 수 있습니다.
마지막 몇 번의 커밋이 좋지 않다고 확신한다고 가정 해 봅시다. 당신은 그것들을 제거하고 싶기 때문에
를 사용하여 이전 버전으로 돌아갑니다. 결과적으로, "오류"커밋은 원하는대로 커밋 기록에서 사라졌습니다.
git reset
<<>
그러나 인생이 때때로하는 것처럼, 당신은 그것이 나쁜 생각이라는 것을 알 수 있습니다. 궁극적으로, 이러한 제출은 그렇게 나쁘지 않습니다! 그러나 나쁜 소식은 저장소의 커밋 기록에서 방금 삭제했다는 것입니다! ? <🎜 🎜>
<<>
이것은 GIT의 리플 로그 도구의 전형적인 사례입니다! 그것이 당신을 어떻게 절약하는지 봅시다 :
<<>
하나를 하나씩 분해합시다 : <🎜 🎜>
<,> 우선, 리플 로그는 열기가 매우 쉽습니다.
둘째, 기록 된 상태는 최신 상태와 함께 연대순으로 정렬되어 있음을 알 수 있습니다.
면밀히 살펴보면 상단 (즉, 최신) 프로젝트가 "재설정"작업임을 알게됩니다. 이것이 바로 우리가 20 초 전에 한 일입니다. 분명히이 로그는 유효합니까?
의도하지 않은 "재설정"을 취소하려면 지금 우리는 이전 상태로 돌아갈 수 있습니다. 여기에도 잘 문서화되어 있습니다! 이전 상태의 Commit Hash를 클립 보드에 간단히 복사하여 시작할 수 있습니다.
$ git restore css/general.css
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
이 이전 상태를 복원하려면 다시 를 사용하거나 단순히 새 지점을 만들 수 있습니다.
<<>
우리가 행복하게 확인할 수 있듯이, 새로운 지점에는 예상치 못한 <🎜 🎜> 실패를 통해 잃어버린 커밋이 포함되어 있습니다!
삭제 된 분기를 복구하십시오 <🎜
리플 로그는 다른 상황에서도 유용 할 수 있습니다. 예를 들어, 실수로 분기를 삭제하면 실제로 삭제되지 않아야합니다. 예제 시나리오를 살펴 보겠습니다 : <🎜 🎜>
-
고객/팀 리더/프로젝트 관리자가 우리가 개발 한 아름다운 분석이 더 이상 필요하지 않다고 가정 해 봅시다. 우리는 잘 정리되어 있으며 물론 해당
git reflog
브랜치를 삭제할 것입니다!
위의 이 예제 시나리오에서 우리는 현재 지점을 확인했습니다. - 는 현재 헤드 브랜치임을 알 수 있습니다. 삭제하려면 먼저 다른 지점으로 전환해야합니다.
$ git restore css/general.css
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
git은 우리가 매우 진지한 일을하려고한다고 말합니다. 에는 다른 곳에 존재하지 않는 고유 한 커밋이 포함되어 있기 때문에 삭제하면 일부 (아마도 가치있는) 데이터를 파괴 할 것입니다. OK ...이 기능이 더 이상 필요하지 않으므로 계속할 수 있습니다 : feature/analytics
당신은 다음에 일어날 일을 기대했을 것입니다 : 우리의 고객/팀 리더/프로젝트 관리자는이 기능이 다시 돌아 왔다고 우리에게 행복하게 알려줍니다! 그들은 계속되고 싶어합니다! ? <🎜 🎜>
마찬가지로, 우리는 귀중한 데이터를 잃어버린 나쁜 상황에 직면하고 있습니다! 그러니 리플 로그가 우리를 다시 구할 수 있는지 보자 : <🎜 🎜>
$ git restore -p index.html
로그인 후 복사
<<>
자세히 보면 좋은 소식이 분명 할 것입니다. 우리가 (비참하게) 지점을 삭제하기 전에 다른 지점으로 전환하려면 를 수행해야합니다 (GIT로 현재 지점을 삭제할 수 없기 때문입니다). 물론이 결제는 리플 로그에도 기록됩니다. 우리가 삭제 한 지점을 복원하기 위해, 이제
의 상태를 새 지점의 시작점으로 간단히 사용할 수 있습니다.
$ git log -- index.html
로그인 후 복사
봐 : 우리 지점이 다시 살아 났어요! ???? <.>
타워와 같은 데스크탑 GUI를 사용하는 경우, 그러한 오류를 취소하는 것은 일반적으로 <🎜 🎜> cmd <🎜 <🎜 z <🎜
를 누르는 것만 큼 쉽습니다.
<<> git checkout
이동은 다른 분기로 커밋됩니다
<'s> 마지막으로, "아, 아니오!"
오늘날 많은 팀이 "메인", "마스터"또는 "개발"과 같은 장기 지점에 직접 제출하는 것을 금지하는 규칙을 공식화했습니다. 일반적으로 새로운 커밋은 병합/리바세를 통해서만 이러한 지점에 도달해야합니다. 그러나 우리는 때때로 직접 잊고 제출합니다 ... <🎜
다음 시나리오를 예로 들어 봅시다.
$ git log -p -- index.html
로그인 후 복사
<<>
우리는 <🎜 🎜>에 제출해야했지만 실수로
지점에서 커밋을 유발했습니다. 해결책을 단계별로 살펴 보겠습니다.
<,> 우선, 우리는 이번에 우리가 오른쪽 지점에 있는지 확인해야합니다. 그래서 우리는 : 를 확인하고 있습니다.
이제 명령을 사용하여 커밋을 안전하게 이동할 수 있습니다.
<<> 우리는 를 확인할 수 있으며 커밋이 현재 여기에 있음을 알게 될 것입니다.
<<>
위 내용은 git로 실수를 취소하는 5 가지 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!