diff --git a/doc/history/2026-09-14-6차.md b/doc/history/2026-09-14-6차.md index 9148c84..461deb6 100644 --- a/doc/history/2026-09-14-6차.md +++ b/doc/history/2026-09-14-6차.md @@ -877,3 +877,98 @@ Allman 은 모두 새 줄(Visual Studio 기본값과 같다). 처음에는 Defau | 병합 전 | 진행 줄 없음 | FolderTest 62 · ReportTest 31 · GitOpTest 36 건 통과(`GitModels.cs` 를 함께 컴파일). 빌드 경고 0 · 오류 0. + +## D-1. 병합을 처음부터 다시 끝까지 해 본다 (2026-09-14, 완료) + +지시서대로 **고치지 않고 적기만 했다.** 제품 코드는 한 줄도 안 바꿨다. + +### 무엇으로 했나 + +- 시험 저장소를 `C1Repo` 로 새로 만들었다(실제 소스는 열지 않음). 5차 C-1 의 A ~ I 에 B-5 의 K · L · M(머지 주석) 을 더한 303개 파일. +- 기대값은 사본에서 git 으로 먼저 받았다. **UU 23 · AA 1 · UD 1 · DU 1 · M 7, 충돌 26개.** + 지시서의 "22개(DU 포함 23개)" 는 B-5 에서 K · L · M 세 경우를 넣기 전 수다. +- 설정 `CSharpBraceStyle` 은 백업 → 끔 → 시험 → 원래 바이트로 되돌림(해시 같음). + +### 한 순서 (MergeHub 만) + +| # | 한 일 | 화면 · git | +|---|---|---| +| 1 | Git 탭 [Merge → 현재 브랜치로] `feature/theirs` → `feature/mine` | 알림 "충돌 24건 (머지 주석만 다른 2건은 자동으로 풀림)". 로그 "충돌 26건" **한 번**, 자동 해결 두 줄. 진행 줄 **남은 충돌 24개 · 푼 것 2개 (2/26)** | +| 2 | 파일 비교 탭 (새로고침 안 누름) | 파일 목록 **24개** | +| 3 | 충돌 탭에서 같은 줄 충돌 15개를 골라 Accept Theirs 한 번 | **1.3초**. 남은 충돌 9개 · 푼 것 17개 (17/26). 로그 "15개를 Theirs 로 한 번에 풀었습니다" | +| 4 | `Ui/Views/NewPanel.cs`(양쪽 새 파일)에 Accept Both | **먼저 묻는다** "파일 두 벌을 이어 붙입니다 … 빌드가 안 될 수 있습니다". [아니오] → git 그대로 `AA`. [병합 커밋] 은 꺼져 있음 | +| 5 | [3분할로 열기] → 네 칸에서 [다음 충돌] + Take Theirs / Take Mine 번갈아 → [해결로 저장] | 저장하면 남은 충돌 첫 파일이 저절로 열린다. 아래 표 | +| 6 | 첫 파일에서 충돌이 남은 병합 중에 Save & Commit | **git 그대로**(M 24 · UU 6 · UD · DU · AA), 커밋 없음 | +| 7 | `Recipe/ToBeDeleted.cs` [파일 지우기] · `Recipe/ToBeDeletedByMe.cs` [파일 남기기] | 띠가 떠 있었고 한 번에 정해짐 | +| 8 | Git 탭 진행 줄 | **충돌 정리 끝 · 푼 것 26개 - 병합 커밋을 할 수 있습니다**, [병합 커밋] 켜짐 | +| 9 | [병합 커밋] | `97fa146` 부모 둘(`7b1928d` 내 쪽 · `abb3a6a` 상대), 메시지 **Merge branch 'feature/theirs' into feature/mine** · 본문 없음. 워킹트리 Clean | + +3분할로 푼 순서(앱이 연 순서 그대로): + +| 파일 | 네 칸 요약 | 고른 것 | +|---|---|---| +| `Ui/Views/NewPanel.cs` (양쪽 새 파일, BASE 머리글 "이 파일 없음 - 양쪽에서 새로 만든 파일입니다") | 남은 충돌 2개 → 충돌 정리 끝 | Theirs · Mine | +| `Common/Util/Unit47.cs` (M: 코드도 주석도 다름) | 1 → 끝 | Theirs | +| `Common/Util/한글설명.cs` (CP949) | 1 → 끝 | Theirs | +| `Io/LineEnding.cs` (상대가 LF 로 바꿈) | 1 → 끝 | Theirs | +| `Motion/Unit0.cs` (3,363줄) | 6 → 끝 | Theirs · Mine × 3 | +| `Recipe/ToBeDeleted.cs` | 띠 | [파일 지우기] | +| `Recipe/ToBeDeletedByMe.cs` | 띠 | [파일 남기기] | +| `Vision/View250.xaml` | 1 → 끝 | Theirs | +| `Weld/Unit1.cs` (3,787줄) | 6 → 끝 | Theirs · Mine × 3 | + +### 판정 기준 + +| 기준 | 결과 | +|---|---| +| MergeHub 만으로 병합 커밋까지 | **됐다.** 터미널 git 은 기대값 사본과 결과 확인에만 썼다 | +| 커밋된 파일 중 줄끝이 바탕과 달라진 파일 | **0개 / 33개.** 파일마다 커밋 blob 을 바이트로 읽어 BOM · CRLF 수 · LF 수 · UTF-8 여부를 첫 부모(새 파일은 상대)와 견줌. LF 만 있는 줄 **0**, 가운데 BOM **0**, 충돌 표식 **0줄** | +| · 파일 단위 | Accept Theirs 15 · 자동 병합 7 · 머지 주석 자동 2 · 남기기 1 · 지우기 1 — 전부 같음 | +| · 3분할 | 해결로 저장 7 — 전부 같음. `Motion/Unit0.cs` CRLF 3,363 → 3,366(+ 고른 줄 3 · 주석 3 − 3), `Io/LineEnding.cs` CRLF 60 → 61 · LF 0, `한글설명.cs` BOM 없음 · UTF-8 아님 그대로 · '가접' 들어감 | +| A 다섯 가지가 다시 나지 않는다 | **다시 안 났다.** 아래 표 1 ~ 5 | + +### 5차 C-1 의 23가지는 어떻게 됐나 + +| # | 무엇 | 이번 | 근거 | +|---|---|---|---| +| 1 | 3분할 저장에서 CRLF → LF | **사라짐** | 위 판정 기준. 3분할로 푼 7개 모두 LF 0 | +| 2 | Save & Commit "실패" 인데 파일은 써지고 스테이징 | **사라짐** | 충돌이 남은 채 눌러도 git 상태 · HEAD 그대로 | +| 3 | 충돌 파일을 고르면 상대 칸이 없다 | **사라짐** | 콤보를 안 건드리고 [3분할로 열기] 만으로 Take Theirs 가 9개 파일에서 됨 | +| 4 | 상대가 지운 파일을 다룰 줄 모른다 | **사라짐** | 띠 [파일 지우기] → 커밋에 없음. [파일 남기기] → 상대 blob 과 같음 · CRLF 70 | +| 5 | 양쪽 새 파일 Accept Both 가 빌드를 깬다 | **사라짐** | 누르기 전에 물음. 3분할로 풀어 `class NewPanel` **1번** · BOM 한 번 · CRLF 3 | +| 6 | 실패 뒤에도 저장 안 한 편집으로 여김 | **사라짐** | 막힌 뒤 [해결로 저장] 으로 그대로 이어졌고 확인 창이 한 번도 안 뜸 | +| 7 | 확인 창이 엉뚱한 파일 이름 | 이번 흐름에선 안 남 | 저장 안 한 채 파일을 바꾸는 일이 없었다(B-2 에서 확인) | +| 8 | 커밋 없이 저장하는 길이 없다 | **사라짐** | [해결로 저장] 7번 · 커밋 0 | +| 9 | 병합 뒤 파일 목록이 비어 있다 | **사라짐** | 새로고침 없이 24개 | +| 10 | 두 번 눌러도 3분할로 안 간다 | 이번 흐름에선 안 씀 | [3분할로 열기] 단추로 갔다(두 번 누르기 · Enter 는 B-1 에서 확인) | +| 11 | "홈 탭" 안내 | **사라짐** | 안내 글에 없음 | +| 12 | MERGED 줄 번호 네 자리에서 잘림 | 이번엔 따로 안 봄 | 네 칸 화면을 찍지 않았다(B-4 에서 다섯 자리까지 확인) | +| 13 | 커밋 메시지가 굳는다 | **사라짐** | 병합 중 칸은 `Merge branch …`, 커밋 뒤 비어 있음 | +| 14 | "Merge commit '…'" + `#Conflicts` 줄 | **사라짐** | 제목 `Merge branch 'feature/theirs' into feature/mine`, 본문 없음 | +| 15 | Take Theirs 마다 머지 주석 | **남음 (B-5 에서 이렇게 정함)** | 고른 자리마다 한 줄 — Unit0 3 · Unit1 3 · 47 · 한글설명 · LineEnding · NewPanel 1. Take Mine 과 파일 단위 Accept 는 안 붙음. 병합 뒤 비교에서는 무시(파일 비교 탭 "무시 3") | +| 16 | Accept 마다 저장소 전체를 다시 읽음 | **사라짐** | 15개 한 번에 1.3초 | +| 17 | 상태바 인코딩 · 줄바꿈이 워킹트리 기준 | **사라짐** | 3분할 상태바 UTF-8 (BOM) · CRLF, 로그 `한글설명.cs` 는 CP949 · CRLF | +| 18 | "남은 차이" 가 그대로 | **사라짐** | 요약이 남은 충돌 6개 → 충돌 정리 끝 | +| 19 | 콤보를 고르는 한가운데 확인 창 | 이번 흐름에선 안 남 | 저장하면 다음 파일이 저절로 열려 콤보를 쓸 일이 없었다 | +| 20 | 병합 커밋 뒤 파일 비교 탭이 어정쩡 | **사라짐** | 목록 304 · 두 칸 · BASE `97fa146 · Weld/Unit1.cs` · 차이 없음 · 병합 진행 중 표시 없음 · 이력 맨 위 병합 커밋 | +| 21 | 로그가 두 번 | **사라짐** | 16:10 이후 로그 45줄에서 같은 문장 두 번 0 | +| 22 | 충돌 종류 · 푼 개수 | **사라짐** | 양쪽 수정 21 · 상대 삭제 · 내가 삭제 · 양쪽 새 파일, 2/26 → 17/26 → 26 | +| 23 | CP949 가 "ks_c_5601-1987" | **사라짐** | "충돌 해결(직접 편집, CP949 · CRLF)" | + +**사라짐 18 · 이렇게 정해서 남음 1(#15) · 이번 흐름에서 안 남/안 씀 3(#7 · #10 · #19) · 따로 안 봄 1(#12).** + +### 새로 걸린 것 (고치지 않음 → 7차) + +| # | 무엇 | 근거 | +|---|---|---| +| N1 | 3분할에서 줄을 고르면 로그가 **"N행 (3-Way 안 씀) 반영"** 이라고 적는다. 네 칸으로 충돌을 푸는 중인데 "3-Way 안 씀" | 로그 11줄 모두. 머리의 3-Way 콤보가 `(3-Way 안 씀)` 인 채 네 칸을 띄우므로(A-3) 콤보 글자를 가져다 쓰는 것으로 보임 | +| N2 | 마지막 [해결로 저장] 뒤, 아직 병합 중인데 파일 비교 탭이 **두 칸(HEAD 내 쪽 ↔ 워킹트리)** 으로 떨어져 "남은 차이 3줄 · BASE와 다름 3" 을 보인다. 푼 결과가 "남은 차이" 로 읽혀 덜 푼 것처럼 보인다 | `Weld/Unit1.cs` 저장 직후 화면. 커밋 뒤에는 차이 없음 | +| N3 | 병합 커밋 뒤에도 `.git/MERGEHUB_CONFLICTS` 가 남는다 | MERGE_HEAD 와 대조하므로 다음 병합에 해는 없다. 치우기만 하면 됨 | + +### 시험 도구 쪽 (제품 결함 아님) + +- Accept Both 확인 창은 따로 뜨는 최상위 창이 아니라 **본 창 안의 Window 요소**라 처음 찾는 함수가 못 봤다. 화면에는 제대로 떠 있었다. +- Save & Commit 이 막혔을 때의 알림 문장은 자동 조작이 못 읽었다. git 상태와 HEAD 로 판정했다. +- 자동 조작 중 한 번 UIA "Unrecognized error" 가 났다(요소를 읽는 사이 화면이 바뀜). 다음 읽기에서 이어졌다. + +코드는 바꾸지 않았으므로 검사는 그대로(하네스 22벌 948건) · 빌드 경고 0 · 오류 0. diff --git a/doc/history/changelog.md b/doc/history/changelog.md index e02bd6a..19e4877 100644 --- a/doc/history/changelog.md +++ b/doc/history/changelog.md @@ -8,6 +8,7 @@ | 날짜 | 항목 | 커밋 | |---|---|---| +| 2026-09-14 | **6차 D-1** — 새로 만든 저장소를 MergeHub 만으로 처음부터 병합 커밋까지(충돌 26 · 자동 2 · 파일 단위 15 · 3분할 7 · 지우기/남기기 2). 줄끝 · BOM 이 바뀐 파일 0/33, 표식 0. 5차 C-1 의 23가지 중 사라짐 18. 새로 걸린 3가지는 7차로. 코드 변경 없음 | 아래 | | 2026-09-14 | **6차 C-1** — 병합 · revert · cherry-pick · rebase · pull 결과가 로그에 두 번 찍히던 것을 한 번으로. 충돌 탭 목록에 종류(양쪽 수정 · 상대 삭제 · 내가 삭제 · 양쪽 새 파일)와 "남은 충돌 N개 · 푼 것 M개 (M/전체)". 처음 충돌 목록을 .git 에 적어 두어 앱을 다시 켜도 이어짐 | 아래 | | 2026-09-14 | **6차 B-8 닫음** — 병합 커밋 뒤 파일 비교 탭이 어정쩡하게 남던 증상이 다시 나지 않음. Git 으로 풀고 커밋 · 탭에서 마지막 충돌을 풀고 커밋 두 흐름 모두 목록 304 · 두 칸 · 선택 커밋 = 병합 커밋. B-1 · A-3 에서 없어진 것으로 봄 | 아래 | | 2026-09-14 | **6차 B-7** — 병합 중 상태바 인코딩 · 줄바꿈을 충돌 표시가 든 워킹트리가 아니라 내 쪽(ours) 파일로("UTF-8 · 혼합" → "UTF-8 (BOM) · CRLF"). 네 칸 요약을 "남은 충돌 N개 · 받을 변경 M줄" 로, 범례 수를 먼저 세어 한 박자 늦던 것도 고침 | 아래 | diff --git a/doc/web/index.html b/doc/web/index.html index 79975bf..7279f1e 100644 --- a/doc/web/index.html +++ b/doc/web/index.html @@ -257,15 +257,15 @@ figcaption{font-size:.82rem;color:var(--ink-3);margin-top:6px}
22벌 · 948건검사 하네스 전부 통과
-
14 / 156차 항목 완료 (D-1 남음)
-
68MergeHub 로컬 커밋 (푸시 0)
+
15 / 156차 항목 완료 · D-1 줄끝 바뀐 파일 0/33
+
75MergeHub 로컬 커밋 (푸시 0)
26 → 24만든 저장소 병합 충돌 (주석만 다른 2건 자동 해결)
사용자 매뉴얼탭 네 개 사용법, 병합 충돌 푸는 순서, 단축키, 설정 발표 자료18장. ←/→ 로 넘기고 전체 화면으로 띄운다 - 남은 일6차 남은 다섯 항목, 새 기능 두 가지, 미룬 것 + 남은 일6차 마무리(D-1 결과), 7차 재료 세 가지, 미룬 것 지금까지 만든 것09-07 ~ 09-14 차수별 기록과 기능 목록 기획안 v209-03 기획안(v1.1)의 틀에 실제로 만든 것과 바뀐 것을 채움 시연 대본demo 폴더 구성과 10분 시연 순서 @@ -530,8 +530,8 @@ UbisamBase.Shell.exe --merge --base B.cs @@ -878,17 +878,34 @@ Log("step 5");
앞으로 남은 내용

남은 일

-

6차 지시서의 마지막 항목(D-1)과 일부러 미뤄 둔 것.

+

6차는 D-1 까지 모두 끝났다. D-1 에서 새로 걸린 것(7차 재료)과 일부러 미뤄 둔 것.

6차 — 병합을 끝까지 믿고 쓸 수 있게

-

15개 항목 중 A 다섯 · B 여덟 · C-1 이 끝났다(C-1: 로그 한 번 · 충돌 종류 · 푼 개수 ·B-8 은 다시 나지 않아 코드 변경 없이 닫음 ·B-6: 같은 줄 충돌 15개 22.0초 → 1.2초 · B-7: 병합 중 상태바가 내 쪽 파일 기준, 남은 충돌 수). 남은 것은 아래 순서다.

+

15개 항목 중 A 다섯 · B 여덟 · C-1 이 끝났다(C-1: 로그 한 번 · 충돌 종류 · 푼 개수 ·B-8 은 다시 나지 않아 코드 변경 없이 닫음 ·B-6: 같은 줄 충돌 15개 22.0초 → 1.2초 · B-7: 병합 중 상태바가 내 쪽 파일 기준, 남은 충돌 수), 마지막으로 D-1 에서 처음부터 다시 병합해 확인했다. 15개 모두 끝.

- + +
항목상태무엇이 문제인가끝났다고 볼 기준
B-7 상태바가 병합 중에 믿을 수 없는 값을 보인다완료인코딩 · 줄바꿈을 충돌 표시가 들어간 워킹트리 파일에서 읽어, 양쪽 CRLF 인 파일도 “UTF-8 · 혼합”. “남은 차이 6줄” 이 충돌을 다 정해도 그대로.병합 중 상태바 인코딩 · 줄바꿈이 ours 기준. 상태바에 남은 충돌 수가 나오고 풀면 준다.
B-8 병합 커밋 뒤 파일 비교 탭이 어정쩡하게 남는다완료목록이 비고, 병합과 상관없는 파일이 BASE 칸에만 뜨고 언어는 “평문”.병합 커밋이 끝나면 병합 전과 같은 보통 상태(선택 커밋 = 방금 만든 병합 커밋).
C-1 로그와 목록 다듬기완료“충돌 22건” 로그가 두 번. 충돌 종류 표시가 들쭉날쭉(상대쪽 삭제만). 풀린 개수 없음. 로그가 CP949 를 “ks_c_5601-1987” 로 적음.로그 한 번. 종류(양쪽 수정 · 상대 삭제 · 내가 삭제 · 양쪽 새 파일)와 풀린 개수. 인코딩 이름이 상태바와 같음.
D-1 병합을 처음부터 다시 끝까지대기A ~ C 를 고친 뒤 시험 저장소(C1Repo)를 새로 만들어 같은 병합을 다시 한다. 5차 C-1 과 같은 표로 23가지 중 무엇이 사라졌는지 적는다.MergeHub 만으로 병합 커밋까지. 커밋된 파일 중 줄끝이 바탕과 달라진 파일 0개. A 다섯 가지가 다시 나지 않는다. 새로 걸린 것은 고치지 말고 적어 7차로.
D-1 병합을 처음부터 다시 끝까지완료A ~ C 를 고친 뒤 시험 저장소(C1Repo)를 새로 만들어 같은 병합을 다시 한다. 5차 C-1 과 같은 표로 23가지 중 무엇이 사라졌는지 적는다.MergeHub 만으로 병합 커밋까지. 커밋된 파일 중 줄끝이 바탕과 달라진 파일 0개. A 다섯 가지가 다시 나지 않는다. 새로 걸린 것은 고치지 말고 적어 7차로.
+ +

D-1 결과 — 새로 만든 저장소, MergeHub 만으로

+
+ + + + + +
확인결과
충돌git 26 · 머지 주석만 다른 2 자동 · 파일 단위 Accept 15(한 번에 1.3초) · 3분할 [해결로 저장] 7 · [파일 지우기] 1 · [파일 남기기] 1
병합 커밋부모 둘 · “Merge branch 'feature/theirs' into feature/mine” · 워킹트리 Clean
줄끝 · BOM · 인코딩이 내 쪽과 달라진 파일0 / 33 (LF 만 있는 줄 0 · 가운데 BOM 0 · 충돌 표식 0)
5차 C-1 의 23가지사라짐 18 · 정해서 남음 1(머지 주석, B-5) · 이번 흐름에서 안 남 · 안 씀 3 · 따로 안 봄 1
+ +

7차 재료 — D-1 에서 새로 걸린 것 (고치지 않음)

+
+ + + +
#무엇근거
N13분할에서 줄을 고르면 로그가 “N행 (3-Way 안 씀) 반영”로그 11줄 모두. 머리의 3-Way 콤보 글자를 쓰는 것으로 보임
N2마지막 [해결로 저장] 뒤, 병합 중인데 두 칸(HEAD ↔ 워킹트리) “남은 차이 3줄” 로 떨어져 덜 푼 것처럼 보인다Weld/Unit1.cs 저장 직후 화면
N3병합 커밋 뒤에도 .git/MERGEHUB_CONFLICTS 가 남는다MERGE_HEAD 와 대조하므로 해는 없음

C# 코드 스타일 맞춤에서 남긴 것

@@ -1128,7 +1145,7 @@ Log("step 5"); 단계v1.1 계획실제상태 1 착수 · 설계09.02 – 09.04 · 요구사항 · 구조 · WPF 골격기획안 v1.1(09-03). 구조를 App · Core · Git · UI 분리 대신 UbisamBase 셸 + 플러그인으로완료 2 기반 구축09.07 – 09.14 · Git 연동 · 커밋 그래프 · 편집기 · 비교 엔진09-07 방향 전환 · 09-08 기능 덩어리 5개 · 09-09 3차 · 09-10 4차 · 09-11 5차. MVP 8개가 이 단계 안에 모두 들어갔다완료 - 3 핵심 기능09.15 – 09.23 · 3-Way · 부분 수용 · Undo · 우클릭 · Git 메뉴기능은 앞당겨 끝났으므로 “병합을 끝까지 믿고 쓸 수 있게”(6차)로 쓴다. 09-14: A 5 · B 8 · C 1 완료, D-1 남음진행 + 3 핵심 기능09.15 – 09.23 · 3-Way · 부분 수용 · Undo · 우클릭 · Git 메뉴기능은 앞당겨 끝났으므로 “병합을 끝까지 믿고 쓸 수 있게”(6차)로 쓴다. 09-14: A 5 · B 8 · C 1 · D 1 6차 전부 완료. 7차 재료 3가지완료 4 테스트 · 배포09.29 – 10.02 · 성능 · 인코딩/줄바꿈 검증 · 베타 · 매뉴얼성능 · 인코딩 · 줄바꿈 검증은 5차 · 6차에서 앞당겨 함. 매뉴얼 초안은 이 문서. 베타 배포는 대기대기

일하는 방식 — v1.1 에 없던 것

@@ -1321,7 +1338,7 @@ D:\MergeHubDemo\repo\ make-demo.ps1 이 만드는 Git

WinMerge 가 더 나은 점

    -
  • 안정성과 검증 — 오래, 많은 사람이 썼다. MergeHub 는 아직 만든 시험 저장소로만 확인했고, 6차 D-1 (처음부터 다시 끝까지)도 남았다.
  • +
  • 안정성과 검증 — 오래, 많은 사람이 썼다. MergeHub 는 만든 시험 저장소로만 확인했다(6차 D-1 에서 처음부터 병합 커밋까지 다시 해 줄끝 바뀐 파일 0 을 확인했지만, 실제 사람들이 오래 쓴 것은 아니다).
  • 3-way 폴더 비교, 이미지 비교(겹쳐 보기 · 차이 강조), 표 · 압축 파일 · 문서 비교, 플러그인.
  • 여러 비교를 동시에 여는 창 · 탭.
  • 보고서 형식(HTML 등)과 다국어.
  • diff --git a/doc/진행상황.md b/doc/진행상황.md index 3482ec0..09df90b 100644 --- a/doc/진행상황.md +++ b/doc/진행상황.md @@ -131,7 +131,13 @@ | 상태 | 항목 | |---|---| -| 대기 | D-1 병합을 처음부터 다시 끝까지 해 본다 | +| **완료** | D-1 병합을 처음부터 다시 끝까지 해 본다 — 충돌 26(자동 2)을 MergeHub 만으로 풀어 병합 커밋. 줄끝 · BOM 이 바뀐 파일 0/33, A 다섯 가지 다시 안 남. 23가지 중 사라짐 18 · 정해서 남음 1(머지 주석) | + +**6차 전부 끝.** D-1 에서 새로 걸린 세 가지는 7차 재료다(고치지 않음). + +- N1 3분할에서 고른 줄 로그가 "N행 (3-Way 안 씀) 반영" +- N2 마지막 [해결로 저장] 뒤 병합 중인데 두 칸 · "남은 차이 3줄" 로 떨어짐 +- N3 병합 커밋 뒤 `.git/MERGEHUB_CONFLICTS` 가 남음 ---