cherry-pick 마지막 [Save] 뒤 두 칸의 기준이 고른 커밋 · 다른 브랜치 커밋 · HEAD 중 하나로 그때그때 달랐는데 요약은 늘 "내 쪽 대비" 라고 했다(8차 E-1 N1 · N1-덧). 새로고침이 이력 목록을 갈아 끼우며 선택을 놓치면 목록 맨 위로 채웠고, [모든 브랜치] 에서 맨 위는 HEAD 가 아니었다. - CommitSelection: 작업 중 충돌이 막 0 이 되면 HEAD, 아니면 해시로 되찾고 없으면 HEAD - GitWorkspace.ReadState: 목록을 갈아 끼우기 전에 고른 해시를 적어 둔다 - ResolvedSummary(baseIsHead): 기준이 HEAD 일 때만 작업 글 - 하네스 MergeSaveTest +18 (201건), 22벌 1,112건 통과, 빌드 경고 0 오류 0 확인: cherry-pick([모든 브랜치]) · revert 마지막 Save 뒤 기준 HEAD, 제목 "가져오기 전 내 쪽", 요약 "내 쪽 대비 … 6줄" = git diff 대조. 사람이 고른 커밋은 새로고침 세 번에도 그대로. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
71 lines
6.1 KiB
Markdown
71 lines
6.1 KiB
Markdown
# 9차 진행 기록 (2026-09-17 ~)
|
||
|
||
지시서: [../작업지시/9차.md](../작업지시/9차.md)
|
||
|
||
## A-1. cherry-pick 마지막 저장 뒤 "내 쪽 대비" 라고 하지만 실제 기준은 이력에서 고른 커밋이다 (2026-09-17, 완료)
|
||
|
||
사용자 결정(2026-09-17): **작업 중 충돌을 다 풀면 두 칸의 기준을 HEAD 로 옮긴다.**
|
||
("기준은 고른 커밋 그대로 두고 글을 맞춘다" 는 고르지 않음.)
|
||
|
||
### 고치기 전에 다시 났다 (길마다 저장소를 새로 만들어, 파일 비교 탭을 미리 열지 않고)
|
||
|
||
8차 E-1 순서 그대로 — 이력에서 커밋을 골라 시작 → 한 파일만 남기고 파일 단위 Accept Theirs → 남은 파일을 [3분할로 열기] → 충돌마다 Take Theirs → [Save].
|
||
|
||
| | cherry-pick ([모든 브랜치] 켬) | revert ([모든 브랜치] 끔) |
|
||
|---|---|---|
|
||
| 이력에서 고른 커밋 | `상대 쪽 작업` | `내 쪽 작업` |
|
||
| 마지막 Save 뒤 두 칸 기준(Selected Commit) | **`뒤이은 수정`** — HEAD(`내 쪽 작업`)도 고른 커밋도 아닌 다른 브랜치 커밋 | `뒤이은 수정` = HEAD |
|
||
| BASE 제목 | `ace42e3 · Weld/Unit1.cs` (꼬리 없음) | `… · Motion/Unit0.cs · 되돌리기 전 내 쪽` |
|
||
| 요약 | 충돌 정리 끝 · [커밋] 으로 cherry-pick 을 끝냅니다 · **내 쪽 대비** 가져온 변경 6줄 | … · 내 쪽 대비 되돌린 변경 6줄 |
|
||
|
||
- 8차 E-1 에서 따로 잰 한 번은 기준이 **고른 커밋**이었다. 이번 cherry-pick 은 **목록 맨 위(다른 브랜치 커밋)**, revert 는 **HEAD**.
|
||
같은 순서인데 기준이 셋 중 하나로 그때그때 달랐다 — N1 과 N1-덧(9차 A-2)은 뿌리가 같다.
|
||
- 파일 비교 탭 왼쪽 이력에서 선택된 줄이 맨 위 `뒤이은 수정` 이었다(스크린샷 `d9-a1-pick-before-1`).
|
||
|
||
### 원인
|
||
|
||
- 새로고침은 이력 목록(`Commits`)을 **비웠다가 다시 채운다.** 그때 Git 탭 이력 목록(`SelectedItem` 바인딩)이 선택을 놓치면 **null 을 밀어 넣어** 고른 커밋이 빈다.
|
||
놓치는지는 그때 화면 상태에 따라 달랐다.
|
||
- 비었으면 `SelectedCommit = Commits[0]` — **목록 맨 위**로 채웠다. [모든 브랜치] 를 끄면 맨 위가 HEAD 라 티가 안 났고,
|
||
켜면 맨 위는 가장 최근의 다른 브랜치 커밋이다.
|
||
- 안 비었으면 이력에서 고른 커밋(cherry-pick 할 커밋)이 그대로 기준으로 남았다.
|
||
- 요약(`OperationLabels.ResolvedSummary`)은 기준이 HEAD 인지 보지 않고 "내 쪽 대비" 를 붙였다. BASE 제목은 HEAD 일 때만 작업 글을 붙여서 둘이 다른 말을 했다.
|
||
|
||
### 고친 것
|
||
|
||
- `Services/CommitSelection.cs`(새로) — 새로고침 뒤 고를 자리:
|
||
작업 중 충돌이 **막 0 이 된** 새로고침이면 HEAD, 아니면 새로고침 전에 고른 커밋을 **해시로** 되찾고, 없으면 맨 위가 아니라 HEAD(HEAD 도 목록에 없을 때만 맨 위).
|
||
"막 0 이 된" 때만 옮긴다 — 그 상태에서 사람이 다른 커밋을 골라 보면 스테이징 · 새로고침마다 HEAD 로 끌어오지 않는다.
|
||
- `GitWorkspace.ReadState` — 목록을 갈아 끼우기 **전에** 고른 커밋의 해시를 적어 두고, 채운 뒤 `CommitSelection.Choose` 로 새 목록의 같은 커밋 객체를 고른다.
|
||
- `OperationLabels.ResolvedSummary(…, baseIsHead)` — 기준이 HEAD 가 아니면 작업 글을 쓰지 않는다(보통 요약). `HomeViewModel` 은 BASE 제목과 같은 조건(`SelectedCommit.ShortSha == HeadSha`)을 넘긴다.
|
||
- 하네스 `MergeSaveTest` 18건 추가(201건): 해시로 되찾기 · 순서가 바뀐 목록 · 비었을 때 HEAD · 사라졌을 때 HEAD · 막 0 이 되면 HEAD · 머무는 동안 안 끌어옴 · 기준이 HEAD 가 아니면 보통 요약.
|
||
|
||
### 확인한 것 (고친 앱, 같은 순서)
|
||
|
||
| | cherry-pick ([모든 브랜치] 켬) | revert |
|
||
|---|---|---|
|
||
| 마지막 Save 뒤 Selected Commit | **`내 쪽 작업` = HEAD** | `뒤이은 수정` = HEAD |
|
||
| BASE 제목 | `e039373 · Weld/Unit1.cs · 가져오기 전 내 쪽` | `6dde274 · Motion/Unit0.cs · 되돌리기 전 내 쪽` |
|
||
| 요약 | 충돌 정리 끝 · [커밋] 으로 cherry-pick 을 끝냅니다 · 내 쪽 대비 가져온 변경 6줄 | … · 내 쪽 대비 되돌린 변경 6줄 |
|
||
| git 과 대조 | `git diff -U0 HEAD -- Weld/Unit1.cs` = 바뀐 줄 6 + 머지 주석 줄 6. 주석 줄은 규칙(무시: 머지 주석)대로 안 셈 → **6 이 맞다** | 같은 구성(+12 −6) |
|
||
|
||
곁 확인(`d9-a1-keep.ps1`):
|
||
|
||
| 경우 | 결과 |
|
||
|---|---|
|
||
| 충돌을 다 푼 cherry-pick 저장소를 다시 열기 | 기준 HEAD · 요약 작업 글 |
|
||
| 그 상태에서 파일 비교 탭 이력으로 `바탕` 을 고름 → [새로고침] 세 번 | 세 번 모두 `바탕` 그대로(HEAD 로 안 끌려감) · 제목 꼬리 없음 · 요약 "차이 없음"("내 쪽 대비" 안 함) |
|
||
| 작업 없음 · [모든 브랜치] 켬 | 맨 위 `뒤이은 수정` 이 아니라 HEAD `내 쪽 작업` 그대로 |
|
||
| Git 탭 이력에서 `상대 쪽 작업` 을 고름 → [새로고침] 세 번 | 세 번 모두 `상대 쪽 작업` 그대로 |
|
||
| [모든 브랜치] 를 꺼 고른 커밋이 목록에서 빠짐 | HEAD 로 |
|
||
|
||
- 하네스 22벌 1,112건 통과(+18) · 빌드 경고 0 · 오류 0.
|
||
- 병합 · pull · rebase 의 요약 · 제목은 기본값(`baseIsHead` 참)으로 8차 B-1 검사가 그대로 통과한다. 화면으로는 9차 D-1 에서 다시 본다.
|
||
|
||
### 알게 된 것 · 남긴 것
|
||
|
||
- **Git 탭 이력에서 커밋을 고르면 파일 비교 탭의 Selected Commit 은 새로고침 전까지 따라오지 않는다**(Git 탭은 `_workspace.SelectedCommit` 만 바꾸고, 파일 비교 탭은 새로고침 알림으로만 다시 읽는다).
|
||
이번에 바꾼 것이 아니라 전부터 그랬다. 고치지 않고 적어 둔다.
|
||
- A-2(한 번은 다른 브랜치 커밋이 기준)는 이번에 원인(목록 맨 위로 채움)이 드러나 함께 고쳐졌다. 지시서대로 A-2 에서 같은 순서를 다섯 번 넘게 되풀이해 확인한다.
|
||
- 자동 조작 쪽: 첫 확인 스크립트는 Git 탭에서 HEAD 를 골라 파일 비교 탭을 봤는데 위의 까닭으로 안 바뀌어, 파일 비교 탭 이력에서 고르게 고쳤다.
|