콘텐츠로 건너뛰기
GitTree

레슨 3 · 기초

다음 커밋에 포함될 내용을 예측하세요.

편집 중인 파일을 커밋을 위해 준비된 스냅샷 및 기록된 기록에서 분리하세요. 미래의 GitTree 기능 영웅을 사용하여 하나의 파일을 준비하고 수정할 수 있는 이유를 설명하세요.

이 브라우저에 진행 상황이 저장되었습니다.

재생하면 YouTube에서 동영상이 로드됩니다(개인정보 보호 강화 모드).

영어 내레이션 · English and Arabic 캡션

비디오 페이지 열기YouTube에서 시청하기

무엇을 배울 것인가

  • 작업 트리, 인덱스 및 마지막으로 기록된 커밋을 구별합니다.
  • 스테이징, 편집 및 일반적인 커밋 변경 사항을 예측합니다.
  • 단계적 의미가 영원히 저장되었다고 가정하지 않고 짧은 상태의 두 열을 모두 읽습니다.
  • 단계적이지 않은 변경사항과 단계적 변경사항에 대해 별도의 비교를 사용하십시오.

시작하기 전에

먼저 1과를 읽어보세요. 레슨 2에서는 Git과 커밋 ID를 준비합니다. no course repository로 시작해서 하나도 없이 끝냅니다. 이것은 개념 강의입니다. 첫 번째 실습 초기화는 GitTree 내부의 레슨 4입니다.

이 강의에서는 강의 5에서 직접 만들 네 가지 상태를 미리 보여줍니다. 아래 터미널 출력과 비디오의 GitTree 화면은 향후 프로젝트의 일회용 복사본에서 가져온 것입니다. 명령과 화면은 Ubuntu 24.04에서 Git 2.52.0 및 GitTree 2.0을 사용하여 기록되었습니다. macOS에서 실행되지 않았습니다. 영상 속 모든 장면에는 '미래강의 5 미리보기'라는 라벨이 붙었습니다. 관련되지 않은 작업 저장소에서 미래 상태 명령을 실행하거나 지금 추가 연습 저장소를 초기화하지 마십시오. 미리보기를 보고 읽은 다음 5과가 해당 상태에 도달하면 쿼리를 반복하세요.

GitTree의 검사된 최소값은 Git 2.39.0입니다. macOS에서 Command를 누릅니다. 여기서 Windows 및 Linux는 Ctrl을 사용합니다. Windows에서 명령이 실행되지 않았습니다. 로컬 모델에는 공급자, 계정, Pro 또는 평가판이 필요하지 않습니다.

개념: 하나의 파일이 이동하는 것이 아닌 세 개의 장소

working tree은(는) 디스크에 있는 프로젝트 파일입니다. 파일을 편집하고 저장하면 해당 바이트가 변경됩니다. Git이 반드시 커밋을 위해 선택하지는 않았습니다.

staging area라고도 하는 index는 준비 중인 다음 스냅샷을 설명합니다. 파일을 준비하면 현재 내용에서 색인 항목이 업데이트됩니다. 이후 편집 내용에 대한 영구 구독이 아닙니다.

commit는 트리와 함께 메타데이터 및 상위 관계를 기록합니다. HEAD는 일반적으로 체크아웃된 지점을 통해 귀하의 현재 위치를 식별합니다. 첫 번째 커밋 전에 HEAD는 분기 커밋이 없더라도 아직 태어나지 않은 분기의 이름을 지정할 수 있습니다.

유용한 비유로는 작업 초안, 준비된 판, 녹음된 판이 있습니다. 비유를 문자 그대로 받아들이지 마십시오. 스테이징은 작업 파일을 이동하거나 삭제하지 않습니다. 일반적인 추적 경로에서는 세 가지 버전이 독립적으로 동의하거나 다를 수 있습니다.

준비된 인덱스 without -a의 일반 커밋, 명시적 경로 인수, 자동 스테이징 또는 수정을 사용합니다. 다른 커밋 모드는 이 예제와 호환되지 않습니다. Git의 추가 참조에서는 스테이징 시 스냅샷 동작을 설명합니다. 차이 참조는 비교를 구별합니다.

정확한 미래의 예

파일은 index.html입니다. 제목은 Understand every change.으로 유지됩니다. 지원 라인에는 두 가지 버전이 있습니다.

파일 발췌 · html
<p id="hero-copy">A clear view of Git history.</p>

나중에 작업 편집:

파일 발췌 · html
<p id="hero-copy">Choose one change, then check what Git saved.</p>

이는 전체 원본 페이지와 프로젝트의 전체 편집 페이지에서 발췌한 줄이며, 전체 페이지에 붙여넣기 위한 대체 파일이 아닙니다.

미래 상태마지막 커밋색인작업 파일index.html의 간략한 상태
A: 파일 생성커밋 없음입장불가원본 페이지?? index.html
B: 스테이지 데모 파일커밋 없음원본 페이지원본 페이지A index.html
C: 스테이징 후 편집커밋 없음원본 페이지편집된 페이지AM index.html
D: 인덱스 커밋원본 페이지원본 페이지편집된 페이지 M index.html

전체 프로젝트에는 README도 포함되어 있습니다. 두 파일 모두 첫 번째 커밋 전에 준비됩니다. 상태 예제는 index.html로 제한됩니다. D에서는 README가 깨끗하고 index.html이 의도적인 미단계 편집을 유지합니다.

충돌하지 않는 일반적인 행의 경우 짧은 상태의 첫 번째 열은 인덱스를 HEAD와 비교합니다. 두 번째는 작업 트리를 인덱스와 비교합니다. ??은 두 개의 일반 수정 열이 아닌 특수 추적되지 않은 마커입니다. M의 선행 공백이 중요합니다.

무엇이 바뀌는가

  • Stage:는 색인 콘텐츠를 업데이트합니다. 커밋이나 분기 이동이 없고 작업 파일을 다시 쓰지 않습니다.
  • Edit after staging:는 작업 바이트만 업데이트합니다. 준비된 인덱스는 이전 버전으로 유지됩니다.
  • Normal commit:는 준비된 스냅샷을 기록하고 현재 로컬 분기를 업데이트합니다. 인덱스는 해당 스냅샷으로 유지됩니다. 관련되지 않은 이후 작업 편집 내용은 그대로 유지됩니다.
  • Remote: 이러한 로컬 단계 중 어느 것도 원격 추적 참조를 푸시하거나 가져오거나 생성하지 않습니다. 이 예시에는 리모컨이 없습니다.

색인은 이름 목록 그 이상입니다. 고급 충돌은 여러 인덱스 단계를 포함할 수 있습니다. 여기서는 해결되지 않은 병합이 아닌 일반 스테이지 0 파일 항목을 모델링하고 있습니다.

터미널에서 - 향후 체크포인트 미리보기

Do not execute these in the still-uninitialized learner project. 전체 README와 페이지의 두 버전이 모두 포함된 일회용 사본에서 실행되었습니다. 5과에서는 실제 생성 및 준비 단계를 제공합니다.

미래 상태 C에서 두 버전을 검사합니다.

Command · bash
git status --short -- index.html

관찰됨:

출력
AM index.html

준비된 파일을 직접 읽으십시오.

Command · bash
git show :index.html

관찰된 full output:

출력
<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>GitTree Features — course demo</title>
</head>
<body>
  <header class="site-header">
    <a href="#main">GitTree Features</a>
  </header>
  <main id="main">
    <section class="hero" aria-labelledby="hero-title">
      <p class="eyebrow">GitTree Learn demo project</p>
      <h1 id="hero-title">Understand every change.</h1>
      <p id="hero-copy">A clear view of Git history.</p>
    </section>
  </main>
  <footer><p>Built by a fictional team for GitTree Learn.</p></footer>
</body>
</html>

작업 트리를 인덱스와 비교합니다.

Command · bash
git diff -- index.html

관찰됨:

출력
diff --git a/index.html b/index.html
index 5470374..27f8718 100644
--- a/index.html
+++ b/index.html
@@ -13,7 +13,7 @@
     <section class="hero" aria-labelledby="hero-title">
       <p class="eyebrow">GitTree Learn demo project</p>
       <h1 id="hero-title">Understand every change.</h1>
-      <p id="hero-copy">A clear view of Git history.</p>
+      <p id="hero-copy">Choose one change, then check what Git saved.</p>
     </section>
   </main>
   <footer><p>Built by a fictional team for GitTree Learn.</p></footer>

위의 개체 약어는 고안된 커밋 SHA가 아닌 정확한 LF 파일 본문의 실제 파일 Blob ID입니다. 약어 길이/출력은 구성에 따라 다를 수 있습니다.

첫 번째 커밋 전의 빈 기록을 기준으로 단계적 추가를 검사합니다.

Command · bash
git diff --cached --stat -- index.html

관찰됨:

출력
 index.html | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

--stat은(는) 요약합니다. 내용 리뷰가 아닙니다. 전체 단계 스냅샷은 git show :index.html에 표시된 이전 파일입니다.

미래 상태 D에서 무엇이 기록되었는지 확인

준비된 인덱스에 대한 5단원의 일반 커밋 이후:

Command · bash
git log -1 --format=%s
git status --short -- index.html
git diff --cached -- index.html

처음 두 개의 출력을 순서대로 관찰했습니다.

출력
feat: add the GitTree Features hero
 M index.html

세 번째 명령은 no output을 인쇄하고 성공적으로 종료됩니다. 인덱스와 HEAD는 이 경로에 동의합니다. 워킹트리가 깨끗하다는 뜻은 아니다. 작업 차이점에는 여전히 위의 지원 라인 편집 내용이 표시됩니다. 이는 "커밋에서 최신 편집 내용을 놓쳤습니다"가 실제로 올바른 Git 동작인 일반적인 이유입니다.

GitTree에서

현재 저장소가 없는 컨텍스트에서

  1. 필요한 경우 Command+T / Ctrl+T (tab.new)를 사용하여 New Tab를 열어두세요.
  2. macOS 또는 다른 곳의 Alt+H에서 Option+H로 Feature Guide을 열거나 Command+Shift+P / Ctrl+Shift+P로 Command Palette…을 열고 Feature Guide을 선택합니다.
  3. Features에서 Search features에 stage을 입력하고 Stage and commit을 읽습니다. 초기화 작업을 실행하지 마세요. 카드는 준비된 파일의 증거가 아니라 방향입니다.
  4. 가이드를 닫으려면 Escape를 누르세요. 귀하의 강좌 저장소가 아직 존재하지 않습니다.

GitTree의 동일한 상태(동영상에 표시됨)

동영상은 '미래 강의 5 미리보기'라는 라벨이 붙은 GitTree에서 미래 프로젝트의 일회용 복사본을 엽니다. 그것은 귀하의 프로젝트가 아니며 귀하의 작업을 녹음한 것도 아닙니다.

  1. C에서 Command Palette…을 열고 Show Working Changes를 입력한 후 정확한 명령(wip.show)을 선택합니다. 이 명령에 대해 주장된 기본 단축키가 없습니다.
  2. 오른쪽 패널의 Unstaged Files 및 Staged Files를 검사합니다. index.html는 두 가지 다른 비교가 있기 때문에 두 가지 모두에 나타납니다. 두 개의 실제 파일이 아닙니다.
  3. Unstaged Files에서 해당 행을 클릭합니다. 지원 라인 변경을 포함하여 원본 페이지가 편집된 페이지로 변경되는 것을 중앙 차이점에서 예상하세요.
  4. Staged Files에서 해당 행을 클릭합니다. 앞선 지지선을 담은 단계적 추가를 기대해 보세요. 두 행 중 하나를 검사하는 것만으로는 아무것도 스테이징되거나 언스테이징되지 않습니다.
  5. D에서는 일반 커밋 후 그래프에 첫 번째 커밋이 있습니다. Staged Files가 Nothing is staged. A commit contains only staged changes.이라고 말합니다. 작업 중인 편집 내용은 Unstaged Files 아래에 남아 있습니다.
  6. 이 개념 미리보기에서 not Stage File, Unstage File, Stage All Changes 또는 Discard Changes…를 클릭하세요. 전용 생성 및 커밋 지침은 4단원과 5단원에 나와 있습니다.

결과

C에서 D를 예측할 수 있습니다. 첫 번째 커밋은 이전 지원 라인을 기록하고 이후 작업 편집은 그대로 유지됩니다. 귀하의 프로젝트는 저장소가 없는 상태로 유지됩니다. 향후 프로젝트의 그래프는 완료된 작업이 아니라 명시적으로 라벨이 지정된 미리보기입니다.

일반적인 실수

  • “Staged means all future edits are included.” 이는 색인에 해당 시점에 선택된 버전이 포함되어 있음을 의미합니다.
  • “Empty cached diff means no edits.” 색인과 HEAD가 선택한 경로에 동의한다고 합니다. 작업 차이도 검사하십시오.
  • “Two lists mean two files.” 동일한 경로에 대한 두 가지 비교입니다.
  • “A staged file is safely committed.” 색인은 변경 가능합니다. 이는 지속적인 기록이나 백업이 아닙니다.
  • “Commit means remote update.” 이 예에는 리모컨이 없으며 푸시가 발생하지 않습니다.

뭔가 잘못되면

지금 repo 쿼리를 실행했는데 "git 저장소가 아님"이라는 메시지가 표시되면 강의 체크포인트를 그대로 유지하고 미리보기를 읽어보세요. 예제 명령을 성공시키기 위해 두 번째 저장소를 생성하지 마십시오.

나중에 자신의 프로젝트가 다른 상태를 표시하는 경우 복구를 시도하기 전에 선택한 경로를 검사하십시오. 편집 후에 다시 무대를 펼쳤나요? 이는 준비된 스냅샷과 예상 커밋을 변경합니다. 자동 단계 명령을 사용하셨나요? 이는 일반적인 인덱스 전용 커밋과 다른 작업입니다.

이 단계에서는 콘텐츠를 파기하지 않고 올바른 비교를 식별하여 복구합니다. 5단원에서는 안전한 스테이징 결정을 보여주고 복구 경로에서는 범위 확인 실행 취소 및 재로그인을 가르칩니다. GitTree 휴지통 스냅샷은 모든 임의 편집기 저장을 복구할 수 있다는 약속은 아닙니다.

이해도를 확인해보세요

각 질문에 답한 후 그 이유를 읽어보세요. '필수'라고 표시된 질문은 수업 완료에 반영됩니다.

  1. 질문 1/6

    여기서 모델링된 일반 커밋을 제공하는 스냅샷은 무엇입니까?

    답을 하나 선택하세요.

  2. 질문 2/6

    C에서는 사후 준비 편집으로 인해 무엇이 변경되었나요?

    해당하는 답을 모두 선택하세요.

  3. 질문 3/6
    필수

    C에서는 다시 준비하지 않고 인덱스를 커밋합니다. 어떤 줄이 녹음되나요?

    답을 하나 선택하세요.

  4. 질문 4/6
    필수

    C에서 시작하여 편집된 버전을 준비한 다음 커밋합니다. 어떤 변화가 있나요?

    답을 하나 선택하세요.

  5. 질문 5/6

    D에서는 캐시된 diff가 비어 있지만 상태는 M 다음으로 공백입니다. 이유는 무엇입니까?

    답을 하나 선택하세요.

  6. 질문 6/6
    필수

    A → B → C를 따라 인덱스를 정상적으로 커밋합니다. 어떤 관찰이 D를 입증합니까?

    해당하는 답을 모두 선택하세요.

6개 중 0개 정답

수업을 완료하려면 필수 질문에 올바르게 답하세요.

이 브라우저에서 확인했습니다.

연습

5과 전에 종이에 예측하십시오. 파일을 준비하고 준비한 후 편집한 다음 정상적으로 커밋하십시오. 어떤 보조 행이 기록되어 있으며 이후 편집 내용은 어디에 남아 있습니까? 그런 다음 순서를 변경하십시오. 커밋하기 전에 편집된 파일을 다시 준비하십시오. 이제 녹음된 라인은 작업상의 차이가 없는 최신 라인이어야 합니다. 비디오는 실제 출력이 포함된 두 경로를 모두 보여줍니다. 5과에서 두 가지를 직접 확인하게 됩니다.

귀하의 확인: 사이트에서 귀하의 컴퓨터를 볼 수 없습니다.

수업을 완료하려면 필수 질문에 올바르게 답하고 실제 연습을 확인하세요.

요약

  • 작업 파일, 인덱스, 기록된 이력은 서로 다른 스냅샷입니다.
  • 스테이징은 선택한 콘텐츠를 캡처합니다. 나중에 편집해도 자동으로 업데이트되지 않습니다.
  • 두 비교를 모두 검사하고 로컬 커밋을 원격 작업으로 착각하지 마세요.

용어집 소개

작업 트리 — مجلد العمل; 준비 영역/색인 — منصقة التجهيج / البهرس; 커밋 — إيداع; 심판 - مرجع; 추적되지 않음 — بُتبَّع; 무대에 올린 — مُجهَّuz. HEAD는 문자 그대로의 기술 식별자로 남아 있습니다.

비디오 대본

영상의 나레이션, 큐별로.

성적표 표시
  1. 분리하여 커밋 예측 작업 파일, 색인 및 기록.
  2. 이것은 향후 프로젝트 미리보기입니다. 당신의 자신의 저장소가 아직 생성되지 않았습니다.
  3. 레이블이 지정된 스냅샷 3개를 사용합니다. 상자 사이를 이동하는 파일이 아닙니다.
  4. 작업 트리에는 다음이 포함됩니다. 편집하고 디스크에 저장하는 파일.
  5. 인덱스는 스냅샷을 설명합니다. 당신은 커밋을 준비하고 있습니다.
  6. 커밋은 스냅샷, 메타데이터를 기록합니다. 그리고 이전 역사와의 관계.
  7. 첫 번째 커밋 전에 브랜치 이름은 있지만 아직 기록된 팁이 없습니다.
  8. 스테이징은 현재 콘텐츠를 선택합니다. 파일을 이동하지 않고 나중에 편집합니다.
  9. 우리의 미래 영웅이 시작됩니다 이 지지선으로.
  10. A에서는 파일이 다음 위치에만 존재합니다. 작업 트리이며 추적되지 않습니다.
  11. 데모 파일을 준비합니다. 인덱스 이제 원래 영웅을 보유하고 있습니다.
  12. 스테이징 후 편집합니다. 작업 파일 변경되지만 인덱스는 더 일찍 유지됩니다.
  13. 다시 준비하지 않고 지원 라인은 정상적인 커밋 기록을 가지고 있습니까?
  14. 준비된 라인을 기록하고, 나중에 작업하는 편집이 아닙니다.
  15. 짧은 상태는 두 가지 다른 것을 보여줍니다 같은 경로에 대한 비교.
  16. 여기서 A는 단계적 추가입니다. 엠 나중에 작동하는 수정 사항입니다.
  17. 준비된 파일 읽기 인덱스에서 직접.
  18. 인덱스에는 여전히 다음이 포함되어 있습니다. 이전 지지선.
  19. 일반적인 diff는 작업을 비교합니다. 준비된 버전으로 파일을 작성하세요.
  20. 첫 번째 커밋 전에 캐시된 요약에서는 준비된 새 파일을 설명합니다.
  21. 이제 동일한 상태를 검사합니다. 실제 GitTree 녹음에서요.
  22. 작업 변경 사항 표시 열기 명령 팔레트를 통해.
  23. 스테이지되지 않은 행에는 최신 항목이 표시됩니다. 인덱스에 대한 작업 편집.
  24. 준비된 행은 이전 단계를 보여줍니다. 첫 번째 커밋을 위해 준비된 파일입니다.
  25. 하나의 경로가 두 목록 모두에 나타날 수 있습니다. 두 개의 실제 파일을 만들지 않고.
  26. 두 비교 중 하나를 읽는 것은 그렇지 않습니다. 콘텐츠를 스테이지, 언스테이징 또는 폐기합니다.
  27. 일반 커밋은 인덱스를 기록합니다. 그리고 현지 지사를 발전시킵니다.
  28. 녹음된 대상이 확인합니다. 첫 번째 영웅 커밋이 존재합니다.
  29. 선행 공백이 중요합니다. 작업 비교는 여전히 다릅니다.
  30. 비어 있는 캐시된 diff는 다음을 의미합니다. 인덱스가 이 경로에 대한 기록과 일치합니다.
  31. 작업 차이점에는 여전히 포함되어 있습니다. 최신 편집. 아무것도 잃지 않았습니다.
  32. 이제 기록에는 커밋이 있지만 의도적인 작업 편집이 남아 있습니다.
  33. 순서 변경: 스테이지 커밋하기 전에 파일을 편집했습니다.
  34. 이제 새로운 라인이 녹음되었습니다. 이 경로에는 남은 차이가 없습니다.
  35. 다음 로컬 단계가 없습니다. 공급자에게 무엇이든 업로드합니다.
  36. 당신의 레슨은 여전히 아무 것도 없이 끝나요 저장소; 초기화는 그 다음에 옵니다.
  37. 파일을 삭제하거나 기록을 재설정하지 마세요 단지 예시를 일치시키기 위해서입니다.
  38. 작업 파일, 준비된 콘텐츠 기록된 이력은 다를 수 있습니다.
  39. 두 가지 순서를 모두 확인하고 두 개의 상태 열에 대해 설명하세요.
  40. 다음으로 내부에 GitTree 기능을 생성합니다. GitTree, 그런 다음 이 모델을 직접 테스트해 보세요.