콘텐츠로 건너뛰기
GitTree

레슨 19 · 역사와 통합

빨리 감기 병합 이해

다른 커밋을 생성하지 않고 대상 브랜치를 기존 하위 다크 팔레트 커밋으로 이동합니다. 빨리 감기를 거부해야 하는 분산된 입력과 대조해 보세요.

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

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

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

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

무엇을 배울 것인가

  • 조상 요구 사항을 인식합니다.
  • 빨리감기 후 동일한 팁 ID를 증명합니다.
  • 참조 이동과 커밋 생성을 분리하세요.
  • 발산에 대한 거부를 예측합니다.

시작하기 전에

18과 결과의 별도 복사본에서 시작합니다(기본은 병합, 정리). 해당 커밋에서 시나리오/ff-대상을 만든 다음 동일한 커밋에서 기능/다크 모드를 만듭니다. 어두운 팔레트는 해당 기능에 대해 하나의 커밋 D를 가져옵니다. 병합하기 전에 시나리오/ff-target으로 돌아갑니다.

동영상은 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 또는 기본 경로를 통해 변형을 만듭니다. 읽기 전용 확인은 둘 중 하나를 따를 수 있습니다. 터미널 작업으로 설명되는 모든 준비는 기본 준비로 표시되며 결코 발명된 앱 기능이 아닙니다.

개념 및 상태 효과

대상 팁이 수신 팁의 조상인 경우 빨리 감기가 가능합니다. 대상 레이블을 하위 항목으로 이동하면 병합 커밋을 생성하지 않고도 중간 스냅샷이 통합됩니다.

결과 팁에는 D의 기존 ID와 상위가 있습니다. 이전 M은 18과의 두 부모 병합으로 남아 있습니다. 상위 항목을 세어서 이 단원에서 만든 새 병합으로 착각하지 마세요.

빨리 감기만 정책 관문이며 모든 지점에 대한 수리는 아닙니다. 별도의 대상 커밋이 존재하는 경우 두 팁 모두 고유한 기록을 가지며 이 모드는 거부됩니다.

대상 브랜치/HEAD/인덱스/작업만 M→D로 진행됩니다. 기능은 D로 유지되고 병합으로 새 커밋이 생성되지 않으며 서버는 변경되지 않습니다.

정확한 프로젝트 상태 준비

18과에서 나왔던 프로젝트의 별도의 일반 복사본에서 시작하세요. 원래 gittree 기능은 그대로 유지됩니다. 원본 또는 소스 체크아웃에서는 이 시나리오를 실행하지 마십시오. (이 과정의 이전 계획에서는 다른 시작 체크포인트가 지정되었습니다. 비디오에서는 18과의 결과와 동일한 단계를 사용합니다.) 아래 스타일시트는 하나의 어두운 팔레트 블록이 추가된 프로젝트의 styles.css입니다. Repo-local 데모 서명이 꺼져 있고 GitTree Demo <demo@example.com>이 ID입니다.

완전한 파일 입력

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

styles.css — 어두움

파일 발췌 · css
:root {
  color-scheme: light;
  --page: #f7f8fa;
  --surface: #ffffff;
  --text: #17212e;
  --link: #154ab5;
  --line: #bac4d0;
}

* {
  box-sizing: border-box;
}

body {
  margin: 0;
  background: var(--page);
  color: var(--text);
  font: 1rem/1.6 system-ui, sans-serif;
}

a {
  color: var(--link);
}

.site-header,
main,
footer {
  width: min(68rem, 100% - 2rem);
  margin-inline: auto;
}

.site-header {
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
  gap: 1rem;
  padding-block: 1rem;
}

.hero {
  max-width: 48rem;
  padding-block: 3rem;
}

h1 {
  font-size: clamp(2rem, 5vw, 3.5rem);
  line-height: 1.2;
}

.cards {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(16rem, 100%), 1fr));
  gap: 1rem;
}

.feature-card {
  padding: 1rem;
  border: 1px solid var(--line);
  border-radius: 0.75rem;
  background: var(--surface);
}

section {
  margin-block-end: 2rem;
}

button,
input {
  font: inherit;
}

button,
input {
  padding: 0.5rem 0.75rem;
}

:focus-visible {
  outline: 3px solid var(--link);
  outline-offset: 3px;
}

form {
  display: grid;
  max-width: 28rem;
  gap: 0.5rem;
}

:root[data-theme="dark"] {
  color-scheme: dark;
  --page: #121923;
  --surface: #1b2635;
  --text: #edf2f8;
  --link: #a4c6ff;
  --line: #7388a1;
}

GitTree에서

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

  1. 아래와 같이 시나리오/ff-target과 feature/dark-mode를 별도의 복사본으로 준비합니다. 기능에 전체 DARK를 저장하십시오.
  2. styles.css만 feat으로 커밋: 어두운 팔레트를 추가합니다. 기능 D를 확인합니다.
  3. 로컬에서 scenario 폴더를 열고 ff-target → Checkout scenario/ff-target를 마우스 오른쪽 버튼으로 클릭합니다. 여전히 M에 있고 깨끗한지 확인하세요.
  4. 로컬에서 feature 폴더를 열고 dark-mode → Merge feature/dark-mode into scenario/ff-target를 마우스 오른쪽 버튼으로 클릭합니다. 대화 상자에서 소스와 대상을 검토합니다.
  5. Record it as에서 Fast-forward only을 선택합니다. 항상 병합 커밋을 선택하지 마세요.
  6. 병합을 한 번 선택하고 기다립니다. 목표 라벨이 기존 D에 도달할 것으로 예상합니다.
  7. 대상과 기능의 실제 전체 SHA를 비교한 다음 DARK 및 깨끗한 작업을 검사합니다.
  8. 별도의 분기된 복사본(새 탭 및 최근 저장소에서 열림)에서 빨리 감기만 사용하여 병합을 반복합니다. 앱은 거부하고 대상에 아직 없는 변경 사항이 있다고 말합니다. 정식 원본은 그대로 둡니다.

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

터미널에서

18과 결과의 별도 사본에서:

Command · bash
git switch --create scenario/ff-target
git switch --create feature/dark-mode

전체 DARK 스타일시트를 styles.css 위에 놓고 다음을 수행합니다.

Command · bash
git add -- styles.css
git commit --quiet -m "feat: add the dark palette"
git switch --quiet scenario/ff-target
git merge --quiet --ff-only feature/dark-mode
git rev-parse HEAD feature/dark-mode
git log -1 --format=%s
git status --short

SHA 쿼리는 두 개의 동일한 실제 ID를 제공합니다. 관찰 대상:

출력
feat: add the dark palette

상태가 비어 있습니다. 고정 장치는 대상이 새로 생성된 병합 노드가 아니라 이전에 측정된 D와 동일하다고 주장했습니다. 변경된 입력의 경우 병합하기 전에 다른 복사본의 대상에 독립적인 docs/integration-note.md 커밋을 추가하세요. ff-only는 거부하고 두 가지를 모두 보존합니다. 정책 확인을 녹색으로 만들기 위해 자동으로 다른 모드를 선택하지 마십시오.

결과

Where you end: 시나리오/ff-대상 및 기능/다크 모드 이름은 기존과 동일합니다. D. 대상 HEAD/색인/작업에는 DARK가 포함되며 새 병합 노드는 없으며 원래 기본/M은 변경되지 않습니다.

일반적인 실수

  • 그래픽 라인을 호출하면 새로운 병합 커밋이 시작됩니다.
  • 대체 창을 원래 검사점으로 처리합니다.
  • 앱 성공 후 완료된 변형을 반복합니다.

뭔가 잘못되면

거부된 경우 두 기록을 모두 검사하고 검토 후에만 별도의 병합/리베이스 워크플로를 선택하세요. 거부 자체는 대상 파일이나 참조를 변경하지 않습니다.

이해도를 확인해보세요

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

  1. 질문 1/6

    무엇이 필요합니까?

    답을 하나 선택하세요.

  2. 질문 2/6

    어떤 변화가 있나요?

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

  3. 질문 3/6
    필수

    결과 대상 SHA?

    답을 하나 선택하세요.

  4. 질문 4/6
    필수

    독립적인 대상 커밋이 추가되었습니다: ff-only?

    답을 하나 선택하세요.

  5. 질문 5/6

    Old M에는 두 개의 부모가 있습니다. 이 작업이 병합되었음을 증명합니까?

    답을 하나 선택하세요.

  6. 질문 6/6
    필수

    완성을 증명하는 것은 무엇입니까?

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

6개 중 0개 정답

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

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

연습

타겟 팁이 기존 D와 동일하고 작업이 전체 DARK와 일치함을 증명합니다. 별도의 복사본에서 독립적인 대상 커밋 후 거부를 예측합니다. 거절 후 이전 심판을 비교하십시오.

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

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

요약

  • 상위 관계는 빨리 감기를 허용합니다.
  • 들어오는 커밋은 ID를 유지합니다.
  • ff-only는 발산을 거부합니다.

용어집 소개

빨리 감기 - تقديم سريع; 자손 — تابع; 조상 — سلب.

비디오 대본

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

성적표 표시
  1. 정확한 체크포인트부터 시작하세요.
  2. 지점 이름, 색인 그리고 작업 버전.
  3. 분리된 코스 사본만 준비하십시오.
  4. 두 지점 이름 모두 시작 같은 커밋에서.
  5. 실제 팔레트 변경을 기록합니다.
  6. 변경되지 않은 대상으로 돌아갑니다.
  7. 병합 방향을 확인하세요.
  8. 명시적으로만 빨리 감기가 필요합니다.
  9. 레이블을 기존 하위 항목으로 이동합니다.
  10. 그래프 모양뿐만 아니라 신원을 검증합니다.
  11. 분산된 타겟 보존 강요하는 대신.
  12. 무엇이 필요합니까?
  13. 이름이나 피부색이 아닌 혈통 빨리감기를 결정합니다.
  14. 어떤 변화가 있나요?
  15. 대상이 다음 위치로 이동합니다. 푸시 없이 기존 D.
  16. 결과 대상 SHA?
  17. 측정된 목표는 다음과 같습니다. 이전 기능 팁.
  18. 독립적인 대상 커밋이 추가되었습니다: ff-only?
  19. 다이버전스는 다음을 위반합니다. 필수 가계 문.
  20. Old M에는 두 개의 부모가 있습니다. 이 작업이 병합되었다는 증거인가요?
  21. M의 기존 조상은 다음과 같습니다. 이 작업의 새로운 커밋입니다.
  22. 완성을 증명하는 것은 무엇입니까?
  23. 심판 신원과 파일 상태가 필요합니다.
  24. 실제 결과를 확인하고, 단순한 메시지가 아닙니다.
  25. 행동하기 전에 변경된 입력을 예측하십시오.
  26. 복구하기 전에 유용한 작업을 보존하세요.
  27. 계속하기 전에 체크포인트를 증명하세요.
  28. 검증된 결과를 유지 다음 단계를 위해.