목차
git 작동 방식 설명
개발 도구 자식 사진과 글로 자세한 설명! Git 작동 방식 이해

사진과 글로 자세한 설명! Git 작동 방식 이해

Feb 10, 2022 pm 06:19 PM
git

이 글은 Git의 작동 원리에 대한 관련 지식을 제공하며 주로 그림과 텍스트를 사용하여 자세히 설명합니다.

사진과 글로 자세한 설명! Git 작동 방식 이해

git 작동 방식 설명

이 문서에서는 Git에서 가장 일반적으로 사용되는 명령을 보여줍니다. Git의 작동 방식을 어느 정도 이해하고 계시다면 이 글을 통해 더욱 철저한 이해를 하실 수 있습니다.

사진과 글로 자세한 설명! Git 작동 방식 이해

위의 네 가지 명령은 작업 디렉터리, 준비 디렉터리(인덱스라고도 함) 및 웨어하우스 간에 파일을 복사합니다.

  • git add files는 현재 파일을 준비 영역에 넣습니다.

  • git commit은 스테이징 영역의 스냅샷을 생성하여 제출합니다.

  • git Reset – 파일은 마지막 git add 파일을 실행 취소하는 데 사용됩니다. git 재설정을 사용하여 모든 준비 영역 파일을 실행 취소할 수도 있습니다.

  • git checkout – 파일은 준비 영역에서 작업 디렉터리로 파일을 복사하여 로컬 수정 사항을 삭제합니다.

git Reset -p, git checkout -p 또는 git add -p를 사용하여 대화형 모드로 들어갈 수 있습니다.

대기 영역을 건너뛰고 창고에서 파일을 직접 검색하거나 코드를 직접 제출할 수도 있습니다.

사진과 글로 자세한 설명! Git 작동 방식 이해

  • git commit -a는 git add를 실행하여 현재 디렉터리의 모든 파일을 준비 영역에 추가한 다음 실행하는 것과 같습니다.

  • git 커밋 파일은 마지막 커밋과 작업 디렉터리에 있는 파일의 스냅샷을 포함하는 커밋을 만듭니다. 그리고 파일이 준비 영역에 추가됩니다.

  • git checkout HEAD – 마지막 커밋을 복사하기 위해 파일을 롤백합니다.

다음 글에서는 사진이 아래와 같은 형태로 사용됩니다.

사진과 글로 자세한 설명! Git 작동 방식 이해

녹색 5자리 문자는 각각 상위 노드를 가리키는 제출된 ID를 나타냅니다. 분기는 주황색으로 표시되며 특정 커밋을 가리킵니다. 현재 분기는 연결된 HEAD로 식별됩니다. 이 사진은 지난 5개의 제출물을 보여 주며, ed489가 최신 제출물입니다. 마스터 브랜치는 이 커밋을 가리키고 다른 메인 브랜치는 상위 커밋 노드를 가리킵니다.

Diff

커밋 간의 변경 사항을 확인하는 방법에는 여러 가지가 있습니다. 다음은 몇 가지 예입니다.

사진과 글로 자세한 설명! Git 작동 방식 이해

Commit

제출 시 Git은 스테이징 영역의 파일을 사용하여 새 제출을 생성하고 이때 노드를 상위 노드로 설정합니다. 그런 다음 현재 분기가 새 커밋 노드를 가리키도록 합니다. 아래 그림에서 현재 브랜치는 마스터입니다. 명령을 실행하기 전에 마스터는 ed489를 가리킵니다. 제출 후 마스터는 ed489를 상위 노드로 사용하여 새 노드 f0cec를 가리킵니다.

사진과 글로 자세한 설명! Git 작동 방식 이해

현재 분기가 특정 제출의 상위 노드인 경우에도 git은 동일한 방식으로 작동합니다. 아래 그림에서는 master 브랜치의 할아버지 노드인 maint 브랜치에 커밋이 이루어지고 1800b가 생성됩니다. 이런 방식으로, 메인 브랜치는 더 이상 마스터 브랜치의 상위 브랜치가 아닙니다. 이때 병합[1](또는 리베이스[2])이 필요합니다.

사진과 글로 자세한 설명! Git 작동 방식 이해

커밋을 변경하려면 git commit –amend를 사용하세요. Git은 현재 커밋과 동일한 상위 노드를 사용하여 새 커밋을 만들고 이전 커밋은 취소됩니다.

사진과 글로 자세한 설명! Git 작동 방식 이해

또 다른 예는 HEAD 제출[3]을 분리하는 것입니다. 이에 대해서는 나중에 논의하겠습니다.

Checkout

체크아웃 명령은 기록 제출물(또는 준비 영역)에서 작업 디렉터리로 파일을 복사하는 데 사용되며 분기를 전환하는 데도 사용할 수 있습니다.

파일 이름이 지정되면(또는 -p 옵션이 켜져 있거나 파일 이름과 -p 옵션이 동시에 켜져 있는 경우) Git은 지정된 커밋에서 파일을 준비 영역으로 복사하고 작업합니다. 예배 규칙서. 예를 들어, git checkout HEAD~ foo.c는 제출 노드 HEAD~(즉, 현재 제출 노드의 상위 노드)에 있는 foo.c를 작업 디렉터리에 복사하고 이를 준비 영역에 추가합니다. (명령에 커밋 노드가 지정되지 않으면 스테이징 영역에서 콘텐츠가 복사됩니다.) 현재 분기는 변경되지 않습니다.

사진과 글로 자세한 설명! Git 작동 방식 이해

파일 이름이 지정되지 않았지만 (로컬) 분기가 제공되면 HEAD 식별이 해당 분기로 이동한 다음(즉, 해당 분기로 "전환") 스테이징 영역과 작업 디렉터리로 이동됩니다. 내용은 HEAD에 해당하는 제출 노드와 일치합니다. 새 제출 노드(아래 그림의 a47c3)에 있는 모든 파일이 준비 영역 및 작업 디렉터리로 복사됩니다. 이전 제출 노드(ed489)에만 존재하는 파일은 삭제됩니다. 위의 두 파일은 무시되며 영향을 받지 않습니다.

사진과 글로 자세한 설명! Git 작동 방식 이해

파일 이름이나 브랜치 이름을 지정하지 않고 레이블, 원격 브랜치, SHA-1 값 또는 master~3과 유사한 것을 지정하면 detached HEAD(분리 HEAD 식별자)라는 익명 브랜치를 얻게 됩니다. . 이를 통해 기록 버전 간에 쉽게 전환할 수 있습니다. 예를 들어, Git 버전 1.6.6.1을 컴파일하려는 경우 git checkout v1.6.6.1(브랜치 이름이 아닌 레이블)을 실행하고 컴파일하고 설치한 다음 다른 브랜치로 다시 전환할 수 있습니다. git checkout 마스터로. 그러나 커밋 작업에 "분리된 HEAD"가 포함되면 아래에 설명된 대로 동작이 약간 다릅니다.

공개 계정 "Java Backend Technology Full Stack"을 팔로우하여 인터뷰에 응하고, 질 높은 인터뷰 정보를 얻으세요

사진과 글로 자세한 설명! Git 작동 방식 이해

HEAD 식별자가 detached 상태일 때 작업 제출

HEAD가 있을 때 분리된 상태(어떤 브랜치에도 연결되지 않음)에서는 커밋 작업이 정상적으로 작동하지만 명명된 브랜치는 업데이트되지 않습니다. (익명 브랜치를 업데이트하는 것으로 생각할 수 있습니다.)

사진과 글로 자세한 설명! Git 작동 방식 이해

마스터와 같은 다른 브랜치로 전환하면 이 커밋 노드는 (아마) 다시는 참조되지 않고 폐기될 것입니다. 이 명령 이후에는 아무것도 2eecb를 참조하지 않습니다.

사진과 글로 자세한 설명! Git 작동 방식 이해

그러나 이 상태를 저장하려면 git checkout -b name 명령을 사용하여 새 브랜치를 생성할 수 있습니다.

사진과 글로 자세한 설명! Git 작동 방식 이해

Reset

Reset 명령은 현재 분기를 다른 위치로 가리키고 선택적으로 작업 디렉터리와 인덱스를 변경합니다. 또한 작업 디렉터리를 건드리지 않고 기록 저장소의 파일을 인덱스로 복사하는 데에도 사용됩니다.

옵션이 지정되지 않으면 현재 브랜치가 해당 커밋을 가리킵니다. -hard 옵션을 사용하면 작업 디렉터리도 업데이트되고, -soft 옵션을 사용하면 변경되지 않은 상태로 유지된다.

사진과 글로 자세한 설명! Git 작동 방식 이해

제출 지점의 버전 번호가 제공되지 않으면 기본적으로 HEAD가 사용됩니다. 이런 방식으로 분기점은 변경되지 않지만 인덱스는 마지막 커밋으로 롤백됩니다. –hard 옵션을 사용하면 작업 디렉터리는 동일합니다.

사진과 글로 자세한 설명! Git 작동 방식 이해

파일 이름(또는 -p 옵션)이 제공되면 인덱스가 업데이트된다는 점을 제외하면 작업 효과는 파일 이름을 사용한 체크아웃과 유사합니다.

사진과 글로 자세한 설명! Git 작동 방식 이해

Merge

Merge 명령은 다른 분기를 병합합니다. 병합하기 전에 인덱스는 현재 커밋과 동일해야 합니다. 다른 브랜치가 현재 커밋의 상위 브랜치인 경우 병합 명령은 아무 작업도 수행하지 않습니다. 또 다른 상황은 현재 커밋이 다른 브랜치의 상위 커밋이므로 빨리 감기 병합이 발생하는 경우입니다. 포인터가 이동되고 새 커밋이 생성됩니다.

사진과 글로 자세한 설명! Git 작동 방식 이해

그렇지 않으면 실제 합병입니다. 기본적으로 현재 커밋(아래 표시된 ed489)과 다른 커밋(33104) 및 공통 상위 노드(b325c) [4] 간에 3방향 병합이 수행됩니다. 결과는 현재 디렉터리와 인덱스를 먼저 저장한 다음 상위 노드 33104와 함께 새로운 커밋을 만드는 것입니다.

사진과 글로 자세한 설명! Git 작동 방식 이해

Cherry Pick

cherry-pick 명령은 커밋 노드를 "복사"하고 현재 분기에 동일한 새 커밋을 만듭니다.

사진과 글로 자세한 설명! Git 작동 방식 이해

리베이스

Rebase는 명령 병합의 대안입니다. 병합은 두 개의 상위 브랜치를 하나의 커밋으로 병합하며 커밋 기록은 선형이 아닙니다. 리베이스는 현재 브랜치의 다른 브랜치 기록을 재생하며 커밋 기록은 선형입니다. 본질적으로 이는 선형화된 자동 체리 따기입니다.

사진과 글로 자세한 설명! Git 작동 방식 이해

위 명령은 모두 마스터 브랜치가 아닌 토픽 브랜치에서 수행됩니다. 마스터 브랜치에서 반복하고 브랜치를 새 노드로 지정합니다. 이전 커밋은 참조되지 않으며 재활용됩니다.

롤백 범위를 제한하려면 –onto 옵션을 사용하세요. 다음 명령은 마스터 브랜치(2c33a)에서 169a6 이후 현재 브랜치의 마지막 몇 가지 커밋을 재생합니다.

사진과 글로 자세한 설명! Git 작동 방식 이해

커밋 삭제, 재배열, 수정, 병합과 같은 복잡한 작업을 보다 편리하게 완료할 수 있는 git rebase –interactive도 있습니다. 이를 보여주는 사진이 없습니다. 자세한 내용은 여기(git-rebase(1)[5])를 참조하세요.

파일 내용은 실제로 인덱스(.git/index)나 제출 객체에 저장되지 않고 데이터베이스(.git/objects)에 blob 형태로 저장되고 SHA-1 값으로 확인됩니다. 인덱스 파일에는 식별자와 함께 관련 Blob 파일 및 기타 데이터가 나열됩니다. 제출물은 트리 형태로 저장되며 해시 값으로 식별됩니다. 트리는 작업 디렉터리의 폴더에 해당하고, 트리에 포함된 트리 또는 Blob 개체는 해당 하위 디렉터리 및 파일에 해당합니다. 각 제출물은 상위 레벨 트리의 식별 코드를 저장합니다.

분리된 HEAD를 사용하여 제출하는 경우 마지막 제출은 HEAD의 참조 로그에서 참조됩니다. 그러나 시간이 지나면 무효화되고 git commit –amend 또는 git rebase와 마찬가지로 결국 재활용됩니다.

추천 학습: "Git Tutorial"

위 내용은 사진과 글로 자세한 설명! Git 작동 방식 이해의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

GIT 프로젝트를 로컬로 다운로드하는 방법 GIT 프로젝트를 로컬로 다운로드하는 방법 Apr 17, 2025 pm 04:36 PM

GIT를 통해 로컬로 프로젝트를 다운로드하려면 다음 단계를 따르십시오. GIT를 설치하십시오. 프로젝트 디렉토리로 이동하십시오. 다음 명령을 사용하여 원격 저장소 클로닝 : git 클론 https://github.com/username/repository-name.git

git에서 코드를 업데이트하는 방법 git에서 코드를 업데이트하는 방법 Apr 17, 2025 pm 04:45 PM

GIT 코드를 업데이트하는 단계 : 코드 확인 : git 클론 https://github.com/username/repo.git 최신 변경 사항 가져 오기 : Git Fetch Merge 변경 사항 : GIT 병합 원산지/마스터 푸시 변경 (옵션) : Git Push Origin Master

Git Commit을 사용하는 방법 Git Commit을 사용하는 방법 Apr 17, 2025 pm 03:57 PM

Git Commit은 프로젝트의 현재 상태에 대한 스냅 샷을 저장하기 위해 파일 변경을 GIT 저장소에 기록하는 명령입니다. 사용 방법은 다음과 같습니다. 임시 저장 영역에 변경 사항 추가 제출 메시지를 저장하고 종료하기 위해 간결하고 유익한 제출 메시지를 작성하여 제출을 완료하기 위해 제출물을 완료하십시오. 제출자에 서명을 추가하여 제출 내용을보기 위해 GIT 로그를 사용하십시오.

GIT 다운로드가 활성화되지 않은 경우해야 할 일 GIT 다운로드가 활성화되지 않은 경우해야 할 일 Apr 17, 2025 pm 04:54 PM

해결 : GIT 다운로드 속도가 느리면 다음 단계를 수행 할 수 있습니다. 네트워크 연결을 확인하고 연결 방법을 전환하십시오. GIT 구성 최적화 : 포스트 버퍼 크기를 늘리고 (GIT 구성-글로벌 http.postBuffer 524288000) 저속 제한 (git config --global http.lowspeedlimit 1000)을 줄입니다. git 프록시 (예 : git-proxy 또는 git-lfs-proxy)를 사용하십시오. 다른 git 클라이언트 (예 : Sourcetree 또는 Github 데스크탑)를 사용해보십시오. 화재 보호를 확인하십시오

git로 저장소를 삭제하는 방법 git로 저장소를 삭제하는 방법 Apr 17, 2025 pm 04:03 PM

git 저장소를 삭제하려면 다음 단계를 따르십시오. 삭제하려는 저장소를 확인하십시오. 로컬 리포지토리 삭제 : rm -rf 명령을 사용하여 폴더를 삭제하십시오. 원격으로 창고 삭제 : 창고 설정으로 이동하고 "창고 삭제"옵션을 찾은 후 작동을 확인하십시오.

git에서 코드를 병합하는 방법 git에서 코드를 병합하는 방법 Apr 17, 2025 pm 04:39 PM

GIT 코드 병합 프로세스 : 충돌을 피하기 위해 최신 변경 사항을 가져옵니다. 병합하려는 지점으로 전환하십시오. 병합을 시작하고 병합을 지정합니다. 병합 충돌을 해결하십시오 (있는 경우). 커밋 메시지를 제공하여 병합을 준비하고 커밋합니다.

PHP 프로젝트에서 효율적인 검색 문제를 해결하는 방법은 무엇입니까? Typesense는이를 달성하는 데 도움이됩니다! PHP 프로젝트에서 효율적인 검색 문제를 해결하는 방법은 무엇입니까? Typesense는이를 달성하는 데 도움이됩니다! Apr 17, 2025 pm 08:15 PM

전자 상거래 웹 사이트를 개발할 때 어려운 문제가 발생했습니다. 대량의 제품 데이터에서 효율적인 검색 기능을 달성하는 방법은 무엇입니까? 기존 데이터베이스 검색은 비효율적이며 사용자 경험이 좋지 않습니다. 일부 연구 후, 나는 검색 엔진 타입을 발견하고 공식 PHP 클라이언트 Typeense/Typeense-PHP를 통해이 문제를 해결하여 검색 성능을 크게 향상 시켰습니다.

Git에서 로컬 코드를 업데이트하는 방법 Git에서 로컬 코드를 업데이트하는 방법 Apr 17, 2025 pm 04:48 PM

로컬 git 코드를 업데이트하는 방법은 무엇입니까? Git Fetch를 사용하여 원격 저장소에서 최신 변경 사항을 가져옵니다. Git Merge Origin/& Lt; 원격 지점 이름 & gt; 합병으로 인해 발생하는 갈등을 해결합니다. git commit -m "merge branch & lt; 원격 브랜치 이름 & gt;" 병합 변경 사항을 제출하고 업데이트를 적용합니다.

See all articles