콘텐츠로 건너뛰기
GitTree

레슨 12 · 일상 업무

빨리 감기, 병합 또는 리베이스로 당기기

분기를 검사한 후 명시적인 풀 정책을 선택합니다. 세 개의 복사본과 하나의 격리된 로컬 서버를 사용하여 빨리 감기 전용 거부, 병합 및 개인 리베이스를 비교합니다.

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

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

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

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

무엇을 배울 것인가

  • 가져오기 통합과 가져오기 통합을 분리하세요.
  • 세 가지 명시적 정책 선택을 비교합니다.
  • ff만 거부하는 것을 정책 결과로 인식합니다.
  • 업스트림 및 영구 앱 정책 설정을 검토합니다.

시작하기 전에

11과에서 남은 과정 프로젝트부터 시작하여 Leo가 가져온 커밋을 메인으로 가져옵니다. 해당 커밋 M을 호출합니다. 그런 다음 하나의 분기에 대한 세 가지 일반 복사본이 있습니다. 하나의 커밋 S가 있는 개인 주제와 하나의 다른 커밋 N이 있는 서버 브랜치 업데이트 메인이 둘 다 M에 있습니다. 개인 주제는 최신 상태이며 깨끗합니다. 각각은 update-main/N을 포함하는 새로운 베어 서버만을 오리진으로 가리키고 오리진/updated-main을 추적합니다. 이전에 게시된 가격/기본 리모컨은 변경되지 않습니다.

영상은 Ubuntu 24.04에서 Git 2.52.0 및 GitTree 2.0으로 녹화되었습니다. 분기, 구조 분기 및 새 서버가 터미널에 구축되었습니다. 세 가지 가져오기, 결과 보기, 정책 파일 및 가져오기 모드 복원이 앱에서 수행되었습니다. 결과는 터미널에서 확인했습니다. macOS 또는 Windows에서는 아무것도 실행되지 않았으며 Ubuntu는 기록된 유일한 Linux 시스템입니다. GitTree의 소스 Git 층은 2.39.0입니다.

GitTree에서 로그인을 요청합니다. 그러면 무료 플랜이 여기의 모든 단계를 다룹니다. 공급자 계정, Pro/평가판, API 자격 증명 또는 인터넷 서비스가 필요하지 않습니다. 로컬 베어 원본은 GitLab 또는 CI가 아닙니다. 모든 ID는 example.com을 사용합니다. 소스 체크아웃 내에서 이 강의를 실행하지 마세요.

연속해서가 아닌 동일한 입력에서 GitTree 또는 기본 경로를 통해 변형을 만듭니다. 읽기 전용 확인은 둘 중 하나를 따를 수 있습니다. 터미널 작업으로 설명되는 모든 준비는 기본 준비로 표시되며 결코 발명된 앱 기능이 아닙니다.

개념 및 상태 효과

풀(Pull)은 페치(fetch)이며 선택한 통합 정책이 뒤따릅니다. 새로 고침의 동의어가 아닙니다. 나중에 ff-only가 로컬 분기 이동을 거부하는 경우에도 가져오기 단계에서 추적 참조를 업데이트할 수 있습니다.

분기된 개인 S/N에서 ff 전용은 거부하고 병합은 두 경로를 모두 보존하며 리베이스는 가져온 베이스에서 개인 커밋을 재생합니다. 거절을 사라지게 하기 위해 조용히 모드를 변경하지 마십시오.

팔레트 풀 모드 명령은 일회성 Git 플래그가 아닌 앱 전체 기본 설정인 General.pullMode를 업데이트합니다. 녹음 앱에서 이전 설정을 녹음/복원합니다. 아래의 기본 명시적 풀 플래그는 해당 앱 설정을 변경하지 않습니다.

각 풀은 샌드박스 원본을 가져옵니다. FF 전용은 주제/색인/작업을 S에 둡니다. 병합 및 리베이스 업데이트는 자체 주제와 파일만 업데이트합니다. 서버 분기가 푸시되지 않습니다. 팔레트 정책을 선택하면 복원될 때까지 앱 전체 기본 설정도 변경됩니다.

정확한 프로젝트 상태 준비

11과에서 남긴 클린 코스 프로젝트의 별도의 일반 복사본에서 시작하세요. 원래 gittree 기능은 그대로 유지됩니다. 원본 또는 소스 체크아웃에서는 이 시나리오를 실행하지 마십시오. (과정의 이전 계획은 이후 병합 레슨의 결과에서 이 레슨을 시작했습니다. 해당 레슨은 아직 녹화되지 않았으므로 비디오에서는 레슨 11의 프로젝트와 동일한 단계를 사용합니다.) 그런 다음 아래의 정확한 준비를 수행하십시오. Repo-local 데모 서명이 꺼져 있고 GitTree Demo <demo@example.com>은 팀원의 이름이 명시적으로 지정되지 않는 한 ID입니다.

완전한 파일 입력

아래에 명명된 단계에서만 저장하십시오. 이는 최종 개행 문자가 포함된 완전한 UTF-8/LF 본문입니다. 마크다운 펜스를 붙여넣지 마세요. 변경되지 않은 실행 가능 파일은 명명된 입력을 상속합니다. 별도의 변형 버전이 원본을 덮어쓰면 안 됩니다.

index.html — 가입

파일 발췌 · html
<!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>
  <link rel="stylesheet" href="styles.css">
</head>
<body>
  <header class="site-header">
    <a href="#main">GitTree Features</a>
  </header>
  <main id="main" tabindex="-1">
    <section class="hero" aria-labelledby="hero-title">
      <p class="eyebrow">GitTree Learn demo project</p>
      <h1 id="hero-title">See your work clearly.</h1>
      <p id="hero-copy">Choose one change, then check what Git saved.</p>
    </section>
    <section class="features" aria-labelledby="features-title">
      <h2 id="features-title">Follow your work</h2>
      <div class="cards">
        <article class="feature-card">
          <h3>History</h3>
          <p>Read commits and branches together.</p>
        </article>
        <article class="feature-card">
          <h3>Changes</h3>
          <p>Review the exact content selected for a commit.</p>
        </article>
        <article class="feature-card">
          <h3>Recovery</h3>
          <p>Inspect the scope of a recovery point before using it.</p>
        </article>
      </div>
    </section>
    <section aria-labelledby="plans-title">
      <h2 id="plans-title">Choose the workflow you need</h2>
      <div class="cards">
        <article class="feature-card">
          <h3>Local Git</h3>
          <p>Local Git workflows work without signing in.</p>
        </article>
        <article class="feature-card">
          <h3>Connected workflows</h3>
          <p>Provider integrations and Nour require Pro or an applicable trial.</p>
        </article>
      </div>
    </section>
    <section aria-labelledby="signup-title">
      <h2 id="signup-title">Try the demo form</h2>
      <form id="signup-form" novalidate>
        <label for="demo-email">Demo email</label>
        <input id="demo-email" name="email" type="email" autocomplete="off" aria-describedby="signup-hint">
        <p id="signup-hint">Use a fictional example.com address. Nothing is sent.</p>
        <button type="submit">Check the address locally</button>
        <p id="signup-result" role="status"></p>
      </form>
    </section>
  </main>
  <footer><p>Built by a fictional team for GitTree Learn. Review one change at a time.</p></footer>
  <script type="module" src="site.js"></script>
</body>
</html>

docs/integration-note.md — DOC_MERGE

출력
# Integration review

This note was written on main while signup work was private.

docs/pull-policy.md — DOC_PULL

출력
# Pull policy

Fetch first and inspect ancestry.
Use fast-forward only when no integration decision is needed.
Merge preserves existing commit identities; rebase recreates private commits.
Never rewrite someone else's published work without coordination.

GitTree에서

팔레트: Command+Shift+P(Ubuntu에서 Ctrl+Shift+P); 정확한 이름의 명령을 입력하고 선택하십시오. 명명된 참조 작업은 인수가 없는 팔레트 바로 가기가 아닌 해당 행의 상황에 맞는 메뉴를 사용합니다.

  1. 아래의 실제 격리된 복사본 3개와 자체 서버/업스트림을 준비합니다. 정책을 선택하기 전에 이전 General.pullMode를 기록하십시오.
  2. FF 복사에서 팔레트 풀: 빨리 감기만, 도구 모음 Pull 버튼; 진정한 발산 거부를 기다리십시오. 앱 알림에는 "기능/가입 양식을 빨리 감을 수 없습니다."라고 적혀 있고, 양측 모두 서로 커밋하지 않았으며 변경된 사항이 없으며 병합, 리베이스 또는 재설정을 위한 Resolve…을(를) 제공한다고 나와 있습니다. 취소할 때까지 유지되므로 다음 복사 전에 취소하세요.
  3. 가져온 원본/업데이트된 메인이 최신임에도 불구하고 변경되지 않은 주제 팁/작업을 검사합니다. 강제 푸시를 누르지 마십시오…
  4. 그대로 병합 복사본에서 당기기: 가능하면 빨리 감기, 그렇지 않으면 병합을 선택한 다음 도구 모음 당기기 버튼을 선택합니다. 실제 두 상위 결과를 검사합니다.
  5. 손대지 않은 Rebase 복사본에서 Pull: Rebase를 선택한 다음 Pull을 선택합니다. 현재 주제는 비공개이므로 자동 보관이 필요하지 않습니다.
  6. N에서 다시 생성된 S'를 확인하고 부모를 병합하고 전체 트리를 동일하게 만듭니다. 각 결과를 독립적으로 보존합니다.
  7. 비교된 스냅샷을 보존한 후에만 전체 DOC_PULL을 연습용 사본에 docs/pull-policy.md로 저장하십시오. 여기에서는 커밋하지 않은 상태로 두세요.
  8. 녹음 앱의 이전 풀 모드를 명시적으로 복원합니다. 자동 푸시나 원본-주요 변경이 발생하지 않았는지 확인하세요.

모든 일반 커밋의 경우: 요약이 명시된 주제입니다. 설명이 비어 있습니다. 이전 커밋 수정, 후크 건너뛰기, 서명자 추가, 다른 작성자, 커밋 후 푸시 및 빈 커밋 허용 끄기; 공동저자는 없습니다. 명명된 파일만 준비한 다음 N개 파일에 대한 변경 사항을 한 번 커밋(파일은 1개)하거나 Command+Enter를 누르세요. 실제 결과를 기다리십시오. 명시된 옵션만 변경하여 명시적으로 수정하는 수업입니다.

터미널에서

프로젝트의 별도의 깨끗한 복사본에서 먼저 Leo가 가져온 커밋(즉, M)으로 main을 가져온 다음 비공개 주제를 만듭니다.

Command · bash
git merge --ff-only --quiet origin/main
git switch --create feature/signup-form

저장된 SIGNUP 파일을 index.html(동영상에서는 강의 파일을 ~/Downloads에 저장하고 cp ~/Downloads/SIGNUP.html index.html을 사용함) 위에 배치한 후 다음을 수행하세요.

Command · bash
git add -- index.html
git commit --quiet -m "feat: add the local signup demonstration"
git branch rescue/signup-before-rebase
BASE_SHA="$(git rev-parse HEAD~1)"
git switch --quiet --create updated-main "$BASE_SHA"

업데이트된 메인에서 docs/integration-note.md(cp ~/Downloads/DOC_MERGE.md docs/integration-note.md)에 DOC_MERGE를 입력하고 다음을 수행합니다.

Command · bash
git add -- docs/integration-note.md
git commit --quiet -m "docs: add the integration review"
git switch --quiet feature/signup-form

BASE_SHA는 개인 가입 커밋 이전에 측정된 M 상위입니다. 주제와 업데이트된 메인 모두 이제 하나의 독립적인 커밋을 갖습니다. Rescue/signup-before-rebase는 이전 주제를 유지합니다. 이 주제의 내용은 게시되지 않았습니다.

리베이스 전 복사본에서 N만 포함하는 new 서버를 준비합니다.

Command · bash
git clone --quiet --bare --single-branch --branch updated-main --no-local . ../gittree-pull-origin.git

Git/app 작업이 활성화되지 않은 동안 cp -R <source-demo-copy> <new-copy> 를 사용하여 동일한 입력의 일반 복사본 3개를 만들거나 .git을 보존하는 동등한 검증된 파일 시스템 복사본을 만듭니다. 각 복사본에서 원본을 해당 새 서버에 대한 측정된 파일 URL로 바꾸고 주제 업스트림을 가져와 설정합니다. 원본을 다시 타겟팅하지 마세요.

Command · bash
git remote set-url origin "<measured-file-url>"
git fetch --quiet --prune origin
git branch --set-upstream-to=origin/updated-main feature/signup-form

자리 표시자 대신 측정된 파일 URL을 사용합니다. FF 사본에서:

Command · bash
git pull --quiet --ff-only origin updated-main

측정된 출구 128; 진단 발췌:

출력
hint: Diverging branches can't be fast-forwarded, you need to either:
hint:
hint: 	git merge --no-ff
hint:
hint: or:
hint:
hint: 	git rebase
hint:
hint: Disable this message with "git config set advice.diverging false"
fatal: Not possible to fast-forward, aborting.

별도의 병합 복사본에서:

Command · bash
git pull --quiet --no-rebase --no-edit origin updated-main

별도의 Rebase 복사본에서:

Command · bash
git pull --quiet --rebase origin updated-main

둘 다 성공했습니다. 실제 최종 트리 ID가 일치하고 병합에는 두 개의 상위가 있고 하나를 재생합니다. 각 검사에 대해 다음을 수행합니다.

Command · bash
git rev-list --parents -n 1 HEAD
git rev-parse 'HEAD^{tree}'
git status --short

SHA는 다양합니다. 선택적 정책 파일 실행 이전에는 상태가 깨끗했습니다. 어떤 명령도 분기를 푸시하지 않습니다.

결과

Where you end: FF 전용 사본은 가져오기 후 거부되어 S에 남아 있습니다. 병합 복사는 두 상위 통합을 추가합니다. 리베이스 복사본은 N에 S'를 생성합니다. 병합/리베이스 트리가 동의합니다. 밀지 마세요. 비교 후에만 정책 파일을 커밋되지 않은 관행으로 보존합니다.

일반적인 실수

  • 직선 그래프를 가정하면 이전 커밋 ID가 살아 남았음을 의미합니다.
  • 대체 창을 원래 검사점으로 처리합니다.
  • 앱 성공 후 완료된 변형을 반복합니다.

뭔가 잘못되면

FF 거부는 데이터 손실이 아닙니다. 가져온/로컬 참조를 검사하고 해당 복사본에 대해 검토된 정책을 선택합니다. 병합/리베이스가 중지되면 해결/계속하거나 명시적으로 중단합니다. 활성 작업 위에 또 다른 풀을 실행하지 마십시오.

이해도를 확인해보세요

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

  1. 질문 1/6

    여기서 당기기란 무엇입니까?

    답을 하나 선택하세요.

  2. 질문 2/6

    ff만 거부하면 어떻게 되나요?

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

  3. 질문 3/6
    필수

    N에 대한 비공개 재생: 결과 상위?

    답을 하나 선택하세요.

  4. 질문 4/6
    필수

    현재 작업을 게시된 공유 주제로 변경: 여전히 자동 조언을 리베이스하시겠습니까?

    답을 하나 선택하세요.

  5. 질문 5/6

    팔레트 정책 명령은 한 번의 풀만 변경합니까?

    답을 하나 선택하세요.

  6. 질문 6/6
    필수

    비교를 증명하는 것은 무엇입니까?

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

6개 중 0개 정답

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

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

연습

거부된 복사본에서 어떤 상태가 변경되었는지 설명하고 두 개의 성공적인 트리와 부모를 비교한 다음 전체 DOC_PULL 정책을 작성합니다. 녹음 앱의 기본 설정이 복원되었는지 확인하세요.

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

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

요약

  • 풀에는 통합 정책이 포함됩니다.
  • 거부는 성공적인 가져오기 후에 발생할 수 있습니다.
  • 정책 지속성은 명시적인 검토가 필요합니다.

용어집 소개

리베이스 - إعادة تاسيس; 재생 - إعادة تصبيق; 구조 심판 - مرجع حبظ.

비디오 대본

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

성적표 표시
  1. 정확한 체크포인트부터 시작하세요.
  2. 지점 이름, 색인 그리고 작업 버전.
  3. 분리된 코스 사본만 준비하십시오.
  4. 업스트림의 이름을 지정하고 세 가지 입력을 모두 보존합니다.
  5. 빨리 감기는 이러한 차이를 거부할 뿐입니다.
  6. 성공적인 가져오기 후에 거부가 발생할 수 있습니다.
  7. 병합 정책은 두 기록을 모두 보존합니다.
  8. 비공개 주제만 재생합니다.
  9. 부모와 비교 나무를 따로 완성하세요.
  10. 나중에 검토된 풀 정책을 작성합니다.
  11. 이전 앱 전체 정책을 복원합니다.
  12. 여기서 당기기란 무엇입니까?
  13. Pull에는 전송 단계가 있으며 정책이 관리되는 지역 단계.
  14. ff만 거부하면 어떻게 되나요?
  15. 가져오기는 이전에 완료될 수 있습니다. 통합은 발산을 거부합니다.
  16. N에 대한 비공개 재생: 결과 상위?
  17. Rebase는 병합 K와 달리 N에 S'를 생성합니다.
  18. 현재 작업을 게시된 공유로 변경 주제: 리베이스는 여전히 자동 조언인가요?
  19. 개인 전용 가정은 더 이상 유지되지 않습니다.
  20. 팔레트 정책 명령 당김 하나만 바꾸나요?
  21. 소스는 General.pullMode를 씁니다. 다른 선택으로 복원될 때까지.
  22. 비교를 증명하는 것은 무엇입니까?
  23. 오히려 실제 상태를 비교하라 명령 침묵보다.
  24. 실제 결과를 확인하고, 단순한 메시지가 아닙니다.
  25. 행동하기 전에 변경된 입력을 예측하십시오.
  26. 복구하기 전에 유용한 작업을 보존하세요.
  27. 계속하기 전에 체크포인트를 증명하세요.
  28. 검증된 결과를 유지 다음 단계를 위해.