레슨 18 · 역사와 통합
분기된 기록이 있는 분기 병합
게시된 워크플로 카드 기능을 기본의 독립적인 접근성 및 바닥글 변경 사항과 결합합니다. 실제 두 상위 병합과 전체 결과 페이지를 확인합니다.
- 레벨: 중급
- 7분 읽음
- 4분 동영상
- 업데이트됨
- 이 수업 전에: 기능 브랜치를 생성하고 일회용 참조만 폐기
이 브라우저에 진행 상황이 저장되었습니다.
재생하면 YouTube에서 동영상이 로드됩니다(개인정보 보호 강화 모드).
무엇을 배울 것인가
- 조상과의 차이를 인식합니다.
- 명시적 병합 녹음 모드를 선택합니다.
- 상위 콘텐츠와 결합 콘텐츠를 모두 확인하세요.
- 서버 게시와 별도로 로컬 병합을 유지합니다.
시작하기 전에
17과가 끝난 곳에서 시작하세요. Maya의 README 커밋으로 메인을 만들고 정리하세요. 게시된 기능/가격 카드는 여전히 F1이며 H5에서 분기됩니다. MAIN_ACCESSIBLE을 준비로 저장하고 커밋하면 기본 기능과 기능이 각각 독립적인 커밋을 갖게 됩니다.
동영상은 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 또는 기본 경로를 통해 변형을 만듭니다. 읽기 전용 확인은 둘 중 하나를 따를 수 있습니다. 터미널 작업으로 설명되는 모든 준비는 기본 준비로 표시되며 결코 발명된 앱 기능이 아닙니다.
개념 및 상태 효과
발산은 팁이 단순히 다른 분기가 빨리 이동할 수 있는 하위 항목이 아니라는 것을 의미합니다. Git은 공통 조상을 찾아 그에 관련된 변경 사항을 결합합니다. 브랜치 이름만으로는 병합 커밋이 필요한지 여부를 알 수 없습니다.
병합 커밋은 두 개의 상위 항목을 순서대로 기록합니다. 첫 번째 상위는 체크아웃된 분기의 이전 팁입니다. 두 번째는 병합된 측면입니다. 기존 기능 커밋은 해당 ID를 유지합니다. 새로운 병합 커밋은 조상을 연결합니다.
텍스트상 충돌이 없다는 것은 의미론적 정확성의 증거가 아닙니다. 전체 파일에서 집중 가능한 기본, 작업 흐름 섹션 및 Leo의 알림을 확인하세요. 기존 검사를 실행합니다. 로컬 병합은 별도의 승인된 푸시가 이루어질 때까지 원본을 업데이트하지 않습니다.
준비 및 병합은 로컬 메인/HEAD를 이동하고 인덱스/작업을 업데이트합니다. 기능 참조는 F1으로 유지됩니다. 원본 브랜치와 v0.1.0 모두 이전 팁을 유지합니다.
정확한 프로젝트 상태 준비
기본 저장 MAIN_ACCESSIBLE에서 index.html만 스테이징하고 수정 사항을 커밋합니다. 기본 랜드마크에 포커스를 둘 수 있도록 만듭니다. 이는 네이티브/앱 병합 입력을 명시적으로 만듭니다. 병합하기 전에 이미 결합된 MERGED 파일을 커밋하지 마세요.
완전한 파일 입력
아래에 명명된 단계에서만 저장하십시오. 이는 최종 개행 문자가 포함된 완전한 UTF-8/LF 본문입니다. 마크다운 펜스를 붙여넣지 마세요. 변경되지 않은 실행 가능 파일은 명명된 입력을 상속합니다. 별도의 변형 버전이 원본을 덮어쓰면 안 됩니다.
index.html - MAIN_ACCESSIBLE
<!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>
</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>index.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>
</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>GitTree에서
팔레트: Command+Shift+P(Ubuntu에서 Ctrl+Shift+P); 정확한 이름의 명령을 입력하고 선택하십시오. 명명된 참조 작업은 인수가 없는 팔레트 바로 가기가 아닌 해당 행의 상황에 맞는 메뉴를 사용합니다.
- Show Files → index.html → Save를 통해 MAIN_ACCESSIBLE을 저장합니다. tabindex 추가만 검토하세요.
- 작업 변경 사항 표시; 스테이지 파일 index.html; 수정 사항 커밋: 일반 옵션을 끈 상태에서 주요 랜드마크에 초점을 맞출 수 있도록 만듭니다.
- 기본 및 기능/가격표 그래프 조상을 검사합니다. 메인을 계속 체크아웃하세요.
- 로컬에서 feature 폴더를 열고 pricing-cards → Merge feature/pricing-cards into main를 마우스 오른쪽 버튼으로 클릭합니다. 대화 상자는 Record it as으로 이어집니다.
- Record it as에서는 가능한 경우 빨리 감기를 선택하고, 그렇지 않으면 병합 커밋을 선택합니다. Always a merge commit; 빨리 감기만 가능합니다. 단계적 변경 사항을 스쿼시합니다(커밋 없음). 항상 병합 커밋을 선택합니다. 실제 미리보기에 예상치 못한 경로나 충돌이 표시되면 취소하세요.
- 병합을 한 번 선택하고 실제 완료될 때까지 기다립니다. 스쿼시를 단계적 변경으로 대체하지 마세요.
- 결과 커밋의 두 상위 커밋을 검사하고 전체 index.html을 MERGED와 비교합니다. 세 가지 독립적인 변경 사항을 모두 확인합니다.
- 로컬 검사 및 정리 상태 쿼리를 실행합니다. 커밋 후 푸시 없이 로컬 병합 시 메인을 그대로 둡니다. 앱 자체의 병합 제목은 "Merge Branch 'feature/pricing-cards'"입니다. 아래 기본 메시지와 일치할 필요는 없습니다.
모든 일반 커밋의 경우: 요약이 명시된 주제입니다. 설명이 비어 있습니다. 이전 커밋 수정, 후크 건너뛰기, 서명자 추가, 다른 작성자, 커밋 후 푸시 및 빈 커밋 허용 끄기; 공동저자는 없습니다. 명명된 파일만 준비한 다음 N개 파일에 대한 변경 사항을 한 번 커밋(파일은 1개)하거나 Command+Enter를 누르세요. 실제 결과를 기다리십시오. 명시된 옵션만 변경하여 명시적으로 수정하는 수업입니다.
터미널에서
MAIN_ACCESSIBLE을 저장한 후 기본 준비 및 병합:
git add -- index.html
git commit --quiet -m "fix: make the main landmark focusable"
git branch course-before-merge
git merge --quiet --no-ff feature/pricing-cards --message "merge: combine workflow cards with accessibility"
git log -1 --format=%s
git rev-list --parents -n 1 HEAD
git status --short실제 주제:
merge: combine workflow cards with accessibility상위 쿼리는 실제 병합 SHA와 정확히 두 개의 상위 SHA를 내보냅니다. ID는 다양합니다. 완전히 병합된 index.html은 픽스처에서 MERGED 바이트 단위로 일치했습니다. 상태가 비어 있었습니다. 명시적인 기본 제목은 앱에서 생성된 제목과 일치할 필요가 없습니다. 조상/콘텐츠가 동의하면 실제 앱 메시지를 수락하고 가짜 기본 메시지를 오버레이하지 마세요.
npm run --silent lint
npm test -- --test-reporter=tap
npm run --silent build병합된 체크포인트에 대해 이를 실행합니다. 소스 텍스트와 상위 개수만으로는 검사를 증명할 수 없습니다. Fixture Suite에는 6가지 테스트가 있습니다. 분기된 입력에 대한 별도의 ff 전용 시도는 이 병합 모드를 자동으로 선택하는 대신 거부해야 합니다.
결과
Where you end: M을 첫 번째 상위, 준비된 기본 팁 및 두 번째 상위 F1과 병합하는 주요 포인트입니다. 전체 MERGED 페이지에는 워크플로 카드, Leo 바닥글 및 초점을 맞출 수 있는 기본 페이지가 포함되어 있습니다. 인덱스/워크 클린; 원격 푸시가 없습니다.
일반적인 실수
- 잘못된 방향을 병합합니다.
- 스쿼시를 두 부모 병합이라고 부릅니다.
- 의미론적 증거로서 충돌 없는 미리보기를 신뢰합니다.
뭔가 잘못되면
실제 병합이 중지되면 해당 작업 상태를 유지하고 나중에 설명하는 충돌/중단 작업 흐름을 사용하세요. 관련 없는 재설정을 실행하지 마십시오. 기본 병합이 완료되기 전에 Course-before-merge는 임의의 작업 바이트가 아닌 이전에 커밋된 팁만 보존합니다.
이해도를 확인해보세요
각 질문에 답한 후 그 이유를 읽어보세요. '필수'라고 표시된 질문은 수업 완료에 반영됩니다.
6개 중 0개 정답
수업을 완료하려면 필수 질문에 올바르게 답하세요.
이 브라우저에서 확인했습니다.
연습
F1이 변경되지 않은 상태에서 정확한 MERGED 바이트와 두 개의 실제 상위 항목을 확인합니다. 원래의 분기된 입력에 대해서만 빨리 감기가 거부됨을 예측합니다. 별도의 복사본에서만 테스트하십시오.
귀하의 확인: 사이트에서 귀하의 컴퓨터를 볼 수 없습니다.
수업을 완료하려면 필수 질문에 올바르게 답하고 실제 연습을 확인하세요.
요약
- 분기는 조상 관계입니다.
- 병합은 이전 커밋 ID를 보존합니다.
- 콘텐츠 및 부모 확인이 모두 필요합니다.
관련된
용어집 소개
병합 — دمج; 병합 커밋 — إيداع دمج; 공통 조상 — سلب مصرك; 첫 번째 부모 — الاب الاول.
비디오 대본
영상의 나레이션, 큐별로.
성적표 표시
- 정확한 체크포인트부터 시작하세요.
- 지점 이름, 색인 그리고 작업 버전.
- 분리된 코스 사본만 준비하십시오.
- 독립을 준비하라 접근성 변경.
- 의도한 주요 변경 사항만 기록합니다.
- 실제 분기된 조상을 검사합니다.
- 기능을 현재 기본으로 병합합니다.
- 녹음 모드를 의도적으로 선택하십시오.
- 실제 병합 결과를 기다립니다.
- 상위 콘텐츠와 결합 콘텐츠를 모두 확인하세요.
- 검토될 때까지 이 병합을 로컬에 유지하세요.
- 병합 커밋을 구별하는 이유는 무엇입니까?
- 조상은 부모에 의해 정의됩니다. 메시지나 색상이 아닌 ID입니다.
- 어떤 증거가 필요합니까?
- 구조적으로 유효한 병합 여전히 잘못된 콘텐츠가 있을 수 있습니다.
- F1의 정체성은 어떻게 되나요?
- 병합은 기존 커밋을 연결합니다. 재생하는 것보다.
- 이것에 대해 ff-only를 선택하십시오 분기된 입력: 결과?
- 두 팁 모두 필수 사항은 아닙니다. 간단한 빨리감기를 위한 자손입니다.
- 텍스트 충돌 없음 테스트가 불필요하다는 뜻인가요?
- 의미론적 정확성 요구 콘텐츠 검토 및 테스트.
- 최종 범위는 무엇입니까?
- 이 로컬 병합에는 푸시가 포함되지 않습니다.
- 실제 결과를 확인하고, 단순한 메시지가 아닙니다.
- 행동하기 전에 변경된 입력을 예측하십시오.
- 복구하기 전에 유용한 작업을 보존하세요.
- 계속하기 전에 체크포인트를 증명하세요.
- 검증된 결과를 유지 다음 단계를 위해.