레슨 27 · 회복
재설정: 소프트, 믹스, 하드
브랜치를 세 가지 방법으로 한 커밋 뒤로 이동하고 각 모드가 브랜치, 스테이징 영역 및 파일에 어떤 역할을 하는지 확인하여 원하는 작업을 유지하는 모드를 선택하세요.
- 레벨: 고급
- 9분 읽음
- 6분 동영상
- 업데이트됨
- 이 수업 전에: 다음 커밋에 포함될 내용을 예측하세요., HEAD를 이동하지 않고 기록 읽기
이 브라우저에 진행 상황이 저장되었습니다.
재생하면 YouTube에서 동영상이 로드됩니다(개인정보 보호 강화 모드).
무엇을 배울 것인가
- 각 재설정 모드가 이동하는 내용(브랜치, 인덱스, 디스크의 파일)을 말해보세요.
- 파괴 모드가 발생하기 전에 커밋된 작업과 커밋되지 않은 작업을 보호하세요.
- 각 모드가 남기는 상태 출력을 읽습니다.
- 추적되지 않는 파일을 포함하여 하드 리셋으로 덮어쓸 수 있는 파일을 알아보세요.
시작하기 전에
귀하는 18과의 병합된 페이지 M에서 시작하는 분기인 private/reset에 있습니다("작업 내용을 명확하게 확인하세요."). M, C 위에 하나의 커밋이 있으며 제목을 "자신있게 변경 사항 검토"로 변경합니다. rescue/before-reset 분기가 이미 C를 가리킵니다. 커밋한 후 "저장된 각 변경 사항을 이해"하기 위해 페이지를 다시 편집했지만 아직 스테이징하거나 커밋하지 않았습니다. 추적되지 않은 메모 docs/signup-hint.md도 있습니다. private/reset을(를) 다시 M으로 이동하려고 합니다.
모든 것이 로컬이며 무료 요금제(GitTree에서 로그인을 요청함)입니다. 호스팅 계정도 없고, 공급자도 없고, 인터넷도 없습니다. 모든 신원은 허구입니다(example.com). 실제 프로젝트에서는 이 강의를 실행하지 마세요. 하드 리셋 복사본은 일회용입니다.
동일한 사본에서 둘 다 수행하지 말고 GitTree 또는 기본 Git 명령을 사용하여 변경하십시오. 결과를 읽는 것은 항상 안전합니다. 메뉴 라벨은 GitTree 2.0의 자체 문자열에서 왔으며 기본 명령은 일회용 복사본에서 Git 2.43을 사용하여 실행되었습니다. GitTree 단계가 macOS, Windows 또는 Linux에서 실행되지 않았습니다.
개념 및 상태 효과
재설정은 현재 분기를 다른 커밋으로 이동합니다. 모드에 따라 얼마나 더 닿는지가 결정됩니다. Soft는 분기만 이동합니다. 색인과 파일은 그대로 유지되므로 차이점이 단계적 변경으로 표시됩니다. Mixed는 분기를 이동하고 인덱스를 대상으로 바꿉니다. 파일은 유지되므로 차이점은 단계적이지 않은 변경 사항으로 표시됩니다. Hard는 분기를 이동하고 인덱스를 대체하며 추적된 파일을 대상에 다시 씁니다. 추적된 파일에 대한 커밋되지 않은 편집 내용이 사라졌습니다.
구조 브랜치는 커밋 C를 유지하므로 커밋된 제목을 다시 찾을 수 있습니다. 커밋되지 않은 최신 편집 내용은 유지되지 않습니다. 커밋은 리플로그를 통해 찾을 수 있습니다. 저장되지 않은 편집 내용은 Git에 없었기 때문에 편집할 수 없습니다. 파괴적인 모드가 발생하기 전에 직접 보호하십시오.
하드 리셋은 대상의 동일한 경로에 추적된 파일이 있는 경우에도 추적되지 않은 파일을 덮어씁니다. 여기서 docs/signup-hint.md처럼 방해가 되지 않는 추적되지 않은 파일은 그대로 남아 있습니다. 이는 추적되지 않은 모든 파일에 대한 약속이 아니라 이 프로젝트에 대한 관찰입니다.
세 가지 모드 모두에서 분기는 이동하는 유일한 참조입니다. rescue/before-reset, 다른 분기 및 서버의 모든 항목은 그대로 유지됩니다.
GitTree가 먼저 묻습니다. 재설정 대화상자에는 무엇이 남을지 알려주고, 강제 재설정의 경우 제거한 모든 내용이 먼저 refs/ogt/trash에 저장되어 실행 취소가 복원될 수 있다는 내용이 나와 있습니다. 터미널에서 재설정을 실행하면 그러한 스냅샷이 생성되지 않습니다.
정확한 프로젝트 상태 준비
18과의 병합된 결과 M의 별도 일반 복사본에서 시작하고 원본을 그대로 둡니다. 브랜치를 생성하고 SARA를 헤딩 커밋으로 저장한 후 거기에 구조 참조를 브랜치합니다. 그런 다음 OMAR unstaged 및 DOC_HINT를 새 파일로 저장합니다. OMAR의 복사본과 메모를 Git 외부에 보관한 다음 소프트, 믹스, 하드 각각 하나씩 세 개의 동일한 복사본을 만듭니다.
완전한 파일 입력
아래에 명명된 단계에서만 저장하십시오. 이는 최종 개행 문자가 포함된 완전한 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>
</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 — SARA
<!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">Review changes with confidence.</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>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">Understand each saved change.</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>docs/signup-hint.md — DOC_HINT
Unfinished signup hint: use fictional data only.GitTree에서
Command+Shift+P(Ubuntu에서는 Ctrl+Shift+P)를 사용하여 팔레트를 엽니다. 재설정은 하위 메뉴 Reset private/reset to This Commit 아래에 있는 커밋의 오른쪽 클릭 메뉴에 있습니다.
- 다음 섹션에 표시된 대로 브랜치, 구조 참조, 무단계 편집 및 메모를 빌드합니다. 편집 내용과 메모의 사본을 Git 외부에 보관하세요. 세 개의 동일한 복사본을 만들고 세 개의 탭에서 엽니다.
- Soft copy. 그래프에서 M(브랜치 팁이 아닌 C 아래의 커밋)을 마우스 오른쪽 버튼으로 클릭하고 Reset private/reset to This Commit을 엽니다. Soft: Keep All Changes Staged를 선택하세요. 확인 대화 상자에는 그 이후의 모든 변경 사항이 준비된 상태로 유지되며 파일이 변경되지 않는다고 표시됩니다. Reset private/reset을 선택하세요.
- 소프트 결과를 확인하세요. 분기는 M에 있고, 디스크의 페이지에는 여전히 "저장된 각 변경 사항 이해"라고 표시되며, Staged 및 Unstaged 목록 모두
index.html을 보유하고 있습니다. - Mixed copy. M에서 Mixed: Keep Changes in the Working Folder을 선택합니다. 대화 상자에는 모든 변경 사항이 작업 복사본에 스테이지되지 않은 상태로 유지된다는 메시지가 표시됩니다. Reset private/reset를 선택하세요. 분기는 M에 있고 디스크의 페이지는 동일한 편집이며 변경 사항은 unstaged입니다.
- Hard copy. 편집 내용과 메모를 다른 곳에 저장한 후에만 M에서 Hard: Discard All Changes…를 선택합니다. 대화 상자는 경고입니다. 제거된 항목이 나열되고 먼저
refs/ogt/trash아래에 보관된다는 메시지가 나타납니다. 읽어보세요. 기본값은 취소입니다. Discard and reset private/reset을 선택하세요. - 하드 결과를 확인하십시오. 분기는 M에 있고 페이지는 M의 제목이며 변경 사항 목록에는 추적되지 않은 메모만 표시됩니다. 알림에는 "재설정"과 커밋이 표시됩니다.
- 3개의 복사본과 아직 C에 있는
rescue/before-reset을(를) 비교하세요. 그 중 어떤 것도 푸시하지 마세요.
재설정 명령은 분기가 이미 켜져 있는 커밋에서 비활성화되고 분기가 체크아웃되지 않은 경우 비활성화됩니다.
과정의 모든 일반적인 커밋에 대해: Summary는 명시된 주제이고, Description는 비어 있으며, 옵션 Amend Previous Commit, Skip Hooks, Add Signed-off-by, Different Author, Push After Commit 및 Allow Empty Commit는 꺼져 있습니다.
터미널에서
18과 결과의 별도 사본에서:
git switch --create private/resetSARA를 index.html(으)로 저장한 후 다음을 수행하세요.
git add -- index.html
git commit --quiet -m "feat: reset snapshot example"
git branch rescue/before-reset스테이징 없이 OMAR을 index.html로 저장하고 DOC_HINT를 docs/signup-hint.md로 저장합니다. Git 외부에 두 복사본을 모두 보관한 다음 동일한 복사본 3개를 만듭니다. 각각에서:
TARGET_SHA="$(git rev-parse rescue/before-reset^)"소프트카피 전용:
git reset --quiet --soft "$TARGET_SHA"혼합 사본만:
git reset --quiet --mixed "$TARGET_SHA"하드 카피 전용, 일회용 사본:
git reset --quiet --hard "$TARGET_SHA"각 사본에는 다음 내용이 포함되어 있습니다.
git rev-parse HEAD
git show :index.html
git status --short모든 HEAD은(는) M입니다. 인덱스는 소프트 다음에는 SARA를 보유하고 혼합 및 하드 이후에는 M 페이지를 보유합니다. 디스크의 파일은 소프트 및 믹스 이후에는 OMAR이고 하드 이후에는 M's 페이지입니다. 상태는 다음과 같습니다.
소프트:
MM index.html
?? docs/signup-hint.md혼합:
M index.html
?? docs/signup-hint.md어려움:
?? docs/signup-hint.md터미널 재설정으로 인해 GitTree 스냅샷이 생성되지 않았습니다. git reflog에는 여전히 C가 나열되어 있지만 OMAR은 어디에도 없습니다. 별도의 백업 랩에서 추적된 docs/signup-hint.md이 있는 커밋에 대한 하드 재설정이 해당 경로에서 추적되지 않은 파일을 덮어썼습니다.
결과
Where you end: 세 가지 분기 모두 M.Soft에 있습니다. 인덱스에는 SARA가 있고 파일에는 OMAR이 있습니다. 혼합: 인덱스는 M을 보유하고 파일은 OMAR을 보유합니다. 어려움: 둘 다 M을 누르고 있습니다. 추적되지 않은 메모는 각 사본에 남아 있고 rescue/before-reset은(는) 여전히 C에 있습니다.
일반적인 실수
- 구조 지점을 새로운 미확정 작업의 백업으로 취급합니다.
- 편집 내용을 먼저 저장하지 않고 하드 리셋을 사용하여 결제를 정리합니다.
- 아무것도 준비되지 않은 상태로 소프트 재설정을 기대합니다.
- 이미 푸시한 브랜치를 재설정한 다음 팀원의 작업 위로 푸시합니다.
뭔가 잘못되면
구조 참조를 사용하여 커밋된 제목을 다시 찾고 편집 및 메모를 위한 외부 복사본을 찾으세요. GitTree에서는 앱을 통한 하드 리셋으로 스냅샷이 먼저 저장되었으므로 실행 취소를 통해 이를 복원할 수 있습니다. 터미널에서 재설정을 수행하지 않았습니다.
이해도를 확인해보세요
각 질문에 답한 후 그 이유를 읽어보세요. '필수'라고 표시된 질문은 수업 완료에 반영됩니다.
6개 중 0개 정답
수업을 완료하려면 필수 질문에 올바르게 답하세요.
이 브라우저에서 확인했습니다.
연습
각 복사본에서 세 번의 다시 읽기를 실행하고 테이블을 채웁니다. 즉, 분기 지점이 어디에 있는지, 인덱스가 무엇을 보유하고 있는지, 파일이 무엇을 보유하고 있는지를 나타냅니다. 그런 다음 커밋 메시지를 다시 실행하는 데 사용할 모드, 모든 것을 언스테이징할 모드, 모든 것을 삭제할 모드를 말합니다.
귀하의 확인: 사이트에서 귀하의 컴퓨터를 볼 수 없습니다.
수업을 완료하려면 필수 질문에 올바르게 답하고 실제 연습을 확인하세요.
요약
- 소프트는 분기만 이동합니다.
- Mixed도 인덱스를 재설정합니다.
- Hard는 또한 파일을 다시 작성합니다.
관련된
용어집 소개
재설정 — إعادة تعيين; 부드러운 - ناعمة; 혼합된 - مجلصة; 열심히 - camلة; 구조 지점 — froع حبظ.
비디오 대본
영상의 나레이션, 큐별로.
성적표 표시
- 지점을 뒤로 이동하고 얼마만큼을 선택하세요. 그 외는 변경됩니다.
- 부드럽게 지점을 이동합니다. 혼합이 추가됩니다. 색인. 파일을 하드 추가합니다.
- 따라서 차이점은 단계적(staged), 비단계적(unstaged) 또는 사라졌다.
- 원 스타트 구축: 커밋, 구조 브랜치, 저장되지 않은 편집 내용 및 메모.
- 3개의 동일한 사본을 만들고 작성하십시오. M의 ID를 아래로 내리세요.
- 편집 내용이 커밋되지 않았습니다. 사본을 보관하세요 Git 외부.
- 그래프에는 M, C, 구조가 표시됩니다. C에 분기합니다.
- M을 마우스 오른쪽 버튼으로 클릭하고 재설정 하위 메뉴를 연 다음 소프트를 선택하세요.
- 대화상자에는 모든 변경사항이 단계적으로 유지된다고 나와 있습니다. 파일이 변경되지 않습니다.
- 현재 지점은 M에 있습니다. C는 아직 구조 지점.
- 준비된 목록에는 이전 커밋이 있습니다. 는 unstaged 목록에 편집 내용이 있습니다.
- 디스크의 파일에는 여전히 편집 내용이 있습니다.
- 혼합 사본: 동일한 메뉴에서 혼합을 선택합니다.
- 이 대화상자에는 변경사항이 그대로 유지된다는 메시지가 표시됩니다. 무대에 오르지 않은.
- 이제 index.html은 unstaged 상태입니다.
- 수정사항이 아직 파일에 있습니다.
- 하드하기 전에 편집 내용과 메모를 저장하세요. 다른 곳에.
- 하드 카피: 하드를 선택합니다. 경고를 의미합니다.
- 대화상자에는 제거된 항목이 나열되고 다음과 같이 표시됩니다. 먼저 저장됩니다. 취소가 기본값입니다.
- 폐기 및 재설정을 선택합니다.
- 메모만 남았습니다. 페이지는 M's 다시.
- 터미널에서 첫 번째 읽기는 커밋하다. 셋 다 M이다.
- 콜론이 있는 git show는 인덱스를 읽습니다. Soft는 이전 페이지를 유지합니다.
- 상태는 사본마다 다릅니다.
- 구조 지점은 여전히 오래된 버전입니다. 커밋하다.
- 그리고 디스크에 있는 파일: 두 번 편집한 것, M 한 번 향합니다.
- 입력 변경: 외부 사본 없음, 및 터미널에서 열심히.
- 리플로그에는 커밋이 나열됩니다. 저장되지 않은 편집 내용 그 어디에도 없습니다.
- 다음과 같은 경우 추적되지 않은 파일을 하드 덮어씁니다. 목표는 거기에 하나가 있습니다.
- 부드럽고 혼합된 것은 아무것도 잃지 않습니다. 열심히 앱이 먼저 저장됩니다.
- 연습문제: 분기 테이블 채우기, 인덱스 각 모드에 대한 파일을 생성합니다.
- 다음으로, 없이 공유 커밋을 실행 취소하세요. 되돌리기를 사용하여 기록을 다시 작성합니다.