Computer >> 컴퓨터 >  >> 프로그램 작성 >> 프로그램 작성

힘내 구조로 재설정

혼자 또는 팀의 일원으로 프로젝트를 수행할 때 커밋을 취소하고 싶은 경우가 있을 수 있습니다. git reset command는 실제 생명의 은인으로 알려진 도구 중 하나입니다.

Git의 추적 메커니즘

git reset으로 이동하기 전에 , 우리는 git의 기본 구조에 대해 이해해야 합니다. Git은 노드와 포인터가 있는 트리와 같은 구조를 통해 파일을 관리하고 추적합니다.

로컬 git 저장소에는 기본적으로 다음과 같은 세 가지 "트리"가 있습니다.

  1. 작업 디렉토리 :또는 작업 트리, 로컬 디렉토리 및 git status를 나타냅니다. 작업 디렉토리의 상태를 알려줍니다.
  2. 머리 :현재 브랜치의 마지막 커밋 스냅샷입니다. git checkout으로 분기를 전환하려는 경우 그러면 HEAD가 분기의 마지막 커밋으로 변경됩니다.
  3. 색인 :또는 스테이징 지역. 따라서 git add할 때 커밋할 파일이 이 색인에 추가됩니다.

Git 워크플로

다음 예는 파일을 변경한 다음 git add를 사용하여 인덱스(스테이징)에 추가하는 방법을 보여줍니다. 그런 다음 git status 확인 커밋할 변경 사항을 확인합니다.

힘내 구조로 재설정

이제 git commit을 할 때 보다 영구적인 스냅샷으로 저장하고 마스터와 HEAD를 해당 포인터로 업데이트합니다. 따라서 git status를 수행하면 git commit 이후 , 세 트리가 모두 같은 상태에 있음을 알 수 있습니다(커밋할 것이 없음).

힘내 구조로 재설정

그래서 의 목적은 무엇입니까? git 재설정 ?

왜 이 모든 서문이 git reset에 도달하는지 궁금할 것입니다. . 글쎄요 git reset 이 나무들을 다양한 방식으로 조작합니다. 따라서 git reset은 수행하려는 작업에 따라 다양한 옵션을 허용합니다.

Git 재설정 모드

일부 변경 사항과 파일을 커밋했다고 가정해 보겠습니다. 그런 다음 잘못된 브랜치에 커밋했거나 커밋에 버그가 있어서 되감기를 원합니다. 여기에서 git reset 모드에 대해 알 수 있습니다. 유용합니다.

참가자의 81%는 부트캠프에 참석한 후 기술 직업 전망에 대해 더 자신감을 느꼈다고 말했습니다. 지금 부트캠프에 참여하십시오.

부트캠프 졸업생은 부트캠프 시작부터 첫 직장을 찾는 데까지 6개월도 채 걸리지 않았습니다.

모드로 모든 git reset은 HEAD 포인터를 업데이트합니다. 다음과 같은 구문이 있습니다.

git reset <mode> <commit-optional>

주요 모드는 다음과 같습니다.

  • --soft :HEAD 포인터를 재설정하고 인덱스와 작업 디렉토리를 그대로 둡니다. 따라서 HEAD가 재설정되고 다른 트리에는 여전히 최신 변경 사항이 표시됩니다.
  • --mixed :기본값 옵션. HEAD와 인덱스를 재설정합니다. 이것은 기본적으로 모든 변경 사항을 취소하고 git add를 수행하기 전에 남겨둡니다. . 참고: 옵션 없이 git reset을 단독으로 하면 git reset --mixed로 해석됩니다. .
  • --hard :이거 조심하세요 . HEAD, index를 재설정하는 것 외에도 작업 디렉토리도 재설정합니다. 따라서 작성된 코드를 잃을 수 있습니다! 이것은 현재 HEAD 포인터(마지막 커밋) 이후의 모든 변경 사항이 삭제되기 때문입니다.

--merge와 같은 기타 모드 및 --keep 공식 문서에서 읽을 수 있습니다.

유용한 git 재설정 트릭

커밋 되감기

모드를 생략하면(옵션 없이 git reset) –mixed로 해석됩니다.

이제 git reset HEAD 를 입력하면 아무 일도 일어나지 않지만 git reset HEAD~1을 하면 그러면 HEAD가 이전 커밋을 가리킬 것입니다.

다음 예제는 이전 예제에서 계속됩니다. 샘플 파일에 새 텍스트를 추가한다고 가정해 보겠습니다. 그런 다음 git add 및 커밋합니다. 그런 다음 git reset HEAD~1을 수행한 후 모든 변경 사항은 이전 커밋에서 스테이징되지 않습니다.

힘내 구조로 재설정

이것은 커밋을 취소할 때 유용하고 빠른 방법입니다!

특정 파일 스테이징 해제

git add를 사용하여 인덱스에 파일을 추가했다고 가정해 보겠습니다. 다음을 수행하여 해당 파일을 제거할 수 있습니다.

git reset HEAD <file-name>

시나리오:모든 코드를 엉망으로 만들었습니다! 작동하던 때로 돌아갈 수 있나요?

모든 로컬 변경 사항을 버리고 이전 커밋으로 돌아가려면 최후의 수단은 git reset --hard입니다. .

종종 코드를 깨는 경우 이것이 유일한 옵션이 될 수 있습니다. 커밋 해시를 알고 있다면 do git reset --hard <commit>를 수행할 수 있습니다. . 그러나 이것은 특정 커밋(있는 경우) 이후의 다른 커밋에도 영향을 미칩니다.

시나리오:이 커밋은 새 브랜치에 있어야 했습니다!

이것은 특히 프로덕션에서 작업을 시작할 때 자주 발생합니다. 이런 일이 발생하더라도 당황하지 마세요!

우리가 해야 할 일은 기본적으로 되감기에 필요한 분기의 상태를 가진 새 분기를 만드는 것입니다. 그런 다음 영향을 받는 분기를 재설정하고 새 분기로 체크아웃하고 거기에서 커밋을 수행합니다.

git branch new-branch

git reset HEAD~1 --hard

git checkout new-branch

생명의 은인 오른쪽!

마지막 한마디

git reset --hard를 할 때 주의하세요. 또한 특정 커밋으로 되감기할 때, 특히 프로덕션 코드에서 그리고 다른 개발자와 작업할 때. 종종 git revert는 이러한 변경을 수행하는 안전한 방법입니다. 그러나 그것은 다른 때를 위한 대화입니다. 그때까지! 👋🏼