레슨 20 · 역사와 통합
게시되지 않은 작업을 새 기반으로 리베이스
독립적으로 업데이트된 기반에서 게시되지 않은 가입 커밋 하나를 재생합니다. 이전 팁을 보존하고 새 ID, 새 부모 및 변경되지 않은 의도된 가입 콘텐츠를 확인하세요.
- 레벨: 중급
- 7분 읽음
- 5분 동영상
- 업데이트됨
- 이 수업 전에: 분기된 기록이 있는 분기 병합
이 브라우저에 진행 상황이 저장되었습니다.
재생하면 YouTube에서 동영상이 로드됩니다(개인정보 보호 강화 모드).
무엇을 배울 것인가
- 정확한 개인 재생 범위를 식별합니다.
- 재생하기 전에 오래된 커밋 기록을 보호합니다.
- 다시 생성된 커밋 ID를 인식합니다.
- 상위 및 전체 결과 트리를 확인합니다.
시작하기 전에
18과 결과의 별도 복사본에서 시작합니다(main은 병합 M, 정리). 개인 주제 feature/signup-form은 하나의 커밋 S를 보유하고, update-main은 M에서 하나의 다른 커밋 N을 보유하며, Rescue/signup-before-rebase도 S를 가리킵니다. 주제는 체크아웃되고 정리되어 게시되지 않습니다.
동영상은 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 또는 기본 경로를 통해 변형을 만듭니다. 읽기 전용 확인은 둘 중 하나를 따를 수 있습니다. 터미널 작업으로 설명되는 모든 준비는 기본 준비로 표시되며 결코 발명된 앱 기능이 아닙니다.
개념 및 상태 효과
Rebase는 현재 주제에 고유한 커밋을 선택하고 해당 변경 사항을 새 베이스에 재생합니다. 이전 커밋 자체를 이동하지는 않습니다. 새로운 부모와 일반적으로 새로운 ID를 사용하여 새로운 커밋을 생성합니다.
소스 분기는 의도된 현재 분기여야 합니다. 이 픽스처에서 S는 가입을 추가하고 N은 다른 문서를 추가하므로 재생은 충돌이 없지만 임의 리베이스가 안전하지는 않습니다.
게시된 내역은 조정 경계입니다. 이러한 커밋은 의도적으로 비공개입니다. 단순히 그래프를 직선화하기 위해 이미 게시된 가격 기능을 다시 설정하지 마십시오. 구조 심판은 저장되지 않은 텍스트가 아닌 약속된 조상을 보호합니다.
기능 및 HEAD 전진 S→S'; 인덱스/작업이 결합된 트리가 됩니다. N/업데이트된 메인, 구조 S 및 원래 메인/M은 고정된 상태로 유지됩니다. 서버 변형이나 자동 푸시가 없습니다.
정확한 프로젝트 상태 준비
18과에서 남긴 프로젝트의 별도의 일반 복사본에서 시작합니다(기본은 병합 M입니다). 원래 gittree 기능은 그대로 유지됩니다. 원본 또는 소스 체크아웃에서는 이 시나리오를 실행하지 마십시오. 그런 다음 아래의 정확한 준비를 수행하십시오. Repo-local 데모 서명이 꺼져 있고 GitTree Demo <demo@example.com>이 ID입니다.
완전한 파일 입력
아래에 명명된 단계에서만 저장하십시오. 이는 최종 개행 문자가 포함된 완전한 UTF-8/LF 본문입니다. 마크다운 펜스를 붙여넣지 마세요. 변경되지 않은 실행 가능 파일은 명명된 입력을 상속합니다. 별도의 변형 버전이 원본을 덮어쓰면 안 됩니다.
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>
<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.GitTree에서
팔레트: Command+Shift+P(Ubuntu에서 Ctrl+Shift+P); 정확한 이름의 명령을 입력하고 선택하십시오. 명명된 참조 작업은 인수가 없는 팔레트 바로 가기가 아닌 해당 행의 상황에 맞는 메뉴를 사용합니다.
- 아래 라벨이 붙은 기본 설정을 사용하여 정확한 분기 및 구조 분기를 준비합니다. 게시된 분기는 다시 작성되지 않습니다.
- 앱에서 체크아웃된 기능/가입 양식을 확인하고 정리하고 게시 취소합니다. S와 N을 검사합니다.
- 그래프에서 updated-main을 마우스 오른쪽 버튼으로 클릭 → Rebase feature/signup-form onto updated-main; 대화 상자는 현재 분기와 대상의 이름을 지정합니다.
- Options for this rebase을(를) 읽어보세요. Stash local changes and put them back 및 Move the branches that point into these commits를 해제해 두세요. 대화 상자에는 이전 기능/가입 양식이 refs/ogt/trash 아래에 보관되어 있다고 나와 있습니다.
- Rebase feature/signup-form을 한 번 선택하세요. 리베이스가 완료되었다는 알림을 기다립니다. 멈추면 다시 클릭하지 말고 동작상태를 유지하세요.
- S' 부모 N과 대상을 검사합니다. 터미널 출력으로 모델 라벨이 아닌 실제 기존/신규 ID를 비교하세요.
- 결과 트리에서 전체 SIGNUP 및 DOC_MERGE를 검사합니다. 구조 지점은 여전히 이전 S를 가리킵니다.
- 정리 상태를 확인하고 리베이스 작업이 없는지 확인하세요. 원래의 메인/M과 모든 서버 참조는 그대로 둡니다.
모든 일반 커밋의 경우: 요약이 명시된 주제입니다. 설명이 비어 있습니다. 이전 커밋 수정, 후크 건너뛰기, 서명자 추가, 다른 작성자, 커밋 후 푸시 및 빈 커밋 허용 끄기; 공동저자는 없습니다. 명명된 파일만 준비한 다음 N개 파일에 대한 변경 사항을 한 번 커밋(파일은 1개)하거나 Command+Enter를 누르세요. 실제 결과를 기다리십시오. 명시된 옵션만 변경하여 명시적으로 수정하는 수업입니다.
터미널에서
별도의 깔끔한 18/M 레슨 복사본에서 비공개 주제를 만듭니다.
git switch --create feature/signup-form저장된 SIGNUP 파일을 index.html(동영상에서는 강의 파일을 ~/Downloads에 저장하고 cp ~/Downloads/SIGNUP.html index.html을 사용함) 위에 배치한 후 다음을 수행하세요.
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를 입력하고 다음을 수행합니다.
git add -- docs/integration-note.md
git commit --quiet -m "docs: add the integration review"
git switch --quiet feature/signup-formBASE_SHA는 개인 가입 커밋 이전에 측정된 M 상위입니다. 주제와 업데이트된 메인 모두 이제 하나의 독립적인 커밋을 갖습니다. Rescue/signup-before-rebase는 이전 주제를 유지합니다. 이 주제의 내용은 게시되지 않았습니다.
기본 재생 대안:
git rebase --quiet --no-autostash --no-update-refs --no-autosquash updated-main
git log -1 --format=%s
git rev-parse HEAD HEAD^ updated-main rescue/signup-before-rebase
git status --short관찰 대상:
feat: add the local signup demonstration실제 HEAD는 구조된 S와 다릅니다. HEAD^는 업데이트된 메인/N과 같습니다. 독립적인 문서와 정확한 SIGNUP 본문은 모두 그대로 유지됩니다. 짧은 상태는 조용합니다. 강제 옵션을 추가하는 대신 예상치 못한 게시/더티 입력을 중지하세요. 충돌 변형에 대해서는 23과를 참조하세요. 중지된 리베이스를 이미 완료된 것으로 처리하지 마십시오.
결과
Where you end: 기능/가입 양식 포인트 S', 상위 N, 가입 및 DOC_MERGE 포함; 이전 S는 리베이스 전 구조/가입에서 살아남습니다. 작동이 활성화되지 않고 깨끗합니다. 메인/M 및 서버는 변경되지 않았습니다.
일반적인 실수
- 직선 그래프를 가정하면 이전 커밋 ID가 살아 남았음을 의미합니다.
- 대체 창을 원래 검사점으로 처리합니다.
- 앱 성공 후 완료된 변형을 반복합니다.
뭔가 잘못되면
재생하기 전에 복구 분기는 S를 유지합니다. 작업이 중지되면 배너를 검사하고 해결하거나 명시적으로 중단합니다. 완료된 리베이스는 rebase --abort로 중단되지 않습니다. 기본 재생이 GitTree 저널을 썼다고 가정하지 마세요.
이해도를 확인해보세요
각 질문에 답한 후 그 이유를 읽어보세요. '필수'라고 표시된 질문은 수업 완료에 반영됩니다.
6개 중 0개 정답
수업을 완료하려면 필수 질문에 올바르게 답하세요.
이 브라우저에서 확인했습니다.
연습
새로운 HEAD가 구조와 다르고 그 상위가 N이고 전체 가입/문서 바이트가 일치함을 증명하십시오. 별도의 23과 사본에서 양측이 동일한 영웅 라인을 변경할 경우 충돌을 예측합니다.
귀하의 확인: 사이트에서 귀하의 컴퓨터를 볼 수 없습니다.
수업을 완료하려면 필수 질문에 올바르게 답하고 실제 연습을 확인하세요.
요약
- Rebase는 커밋을 다시 생성합니다.
- 현재 분기와 대상을 명시적으로 선택합니다.
- 개인 기록 및 복구 범위가 중요합니다.
관련된
용어집 소개
리베이스 - إعادة تاسيس; 재생 - إعادة تصبيق; 구조 심판 - مرجع حبظ.
비디오 대본
영상의 나레이션, 큐별로.
성적표 표시
- 정확한 체크포인트부터 시작하세요.
- 지점 이름, 색인 그리고 작업 버전.
- 분리된 코스 사본만 준비하십시오.
- 프라이빗을 준비하세요 발산 및 구조 참조.
- 실제로 현재 분기가 무엇인지 확인하십시오.
- 원하는 새 기지를 선택하세요.
- 관련 없는 재생 옵션을 꺼두세요.
- 실제 재생 결과를 기다립니다.
- 새로운 부모는 다음을 의미합니다. 새로운 커밋 ID.
- 전체 결합 콘텐츠를 확인하세요.
- 오래된 팁을 보존하세요 출판하지 않고.
- 재생되는 내용은 무엇입니까?
- 선택한 커밋 범위는 다음과 같습니다. 새로운 베이스에서 재현되었습니다.
- 무엇을 확인해야 합니까?
- 범위에 따라 다음이 결정됩니다. 커밋과 참조가 이동할 수 있습니다.
- S가 N: parent에서 재생되었나요?
- 새 커밋 S'의 부모는 N입니다.
- 변경 입력: 동일한 영웅 양쪽 라인이 바뀌었어요.
- 재생이 중지될 수 있습니다. 해상도 그리고 계속은 명시적입니다.
- --abort 실행 취소 가능 이미 리베이스를 마쳤나요?
- 중단하려면 활성 작업이 필요합니다. 완료 복구에는 보존된 증거가 필요합니다.
- 이 결과는 무엇으로 증명되나요?
- 메시지는 동일하게 유지될 수 있습니다. 신분이 바뀌는 동안.
- 실제 결과를 확인하고, 단순한 메시지가 아닙니다.
- 행동하기 전에 변경된 입력을 예측하십시오.
- 복구하기 전에 유용한 작업을 보존하세요.
- 계속하기 전에 체크포인트를 증명하세요.
- 검증된 결과를 유지 다음 단계를 위해.