나는 a를 git bisect
하고 있고 문제가있는 커밋에 도착한 후 이제 올바른 커밋에 있는지 확인하기 위해 앞으로 / 뒤로 단계를 시도하고 있습니다.
나는 HEAD^
역사에서 뒤로 돌아가는 것을 알고 있지만 다음과 같이 앞으로 나아갈 수있는 또 다른 지름길이 있습니다.
A - B - C(HEAD) - D - E - F
내 목표가 F 라는 것을 알고 C 에서 D 로 이동하고 싶습니다 .
참고 : 이것은 Git : 커밋 사이에서 앞뒤로 이동하는 방법 의 복제본이 아닙니다. 내 질문은 약간 다르며 거기에 답변이 없습니다.
답변
나는 약간의 실험을 해왔고 이것은 앞으로 탐색하는 트릭을하는 것 같습니다 ( 편집 : 병합 커밋이없는 선형 기록이있을 때만 잘 작동합니다) :
git checkout $(git rev-list --topo-order HEAD..towards | tail -1)
towards
커밋 또는 태그의 SHA1은 어디에 있습니까 ?
설명:
- 내부 명령
$()
은 다음을 의미합니다. 현재HEAD
와 커밋 사이의 모든 커밋을 가져 오고towards
(제외HEAD
) 우선 순위로 정렬 한 다음 (git log
기본적으로 이상하게 기본값 인 시간순 대신rev-list
), 마지막 커밋 을 취합니다. (tail
), 즉 우리가 가고자하는 것. - 이것은 서브 쉘에서 평가되고
git checkout
체크 아웃을 수행하기 위해 전달됩니다 .
.profile
특정 커밋으로 이동 하기 위해 파일 에서 매개 변수 예상 별칭으로 액세스 가능한 함수를 정의 할 수 있습니다 .
# Go forward in Git commit hierarchy, towards particular commit
# Usage:
# gofwd v1.2.7
# Does nothing when the parameter is not specified.
gofwd() {
git checkout $(git rev-list --topo-order HEAD.."$*" | tail -1)
}
# Go back in Git commit hierarchy
# Usage:
# goback
alias goback='git checkout HEAD~'
답변
머리 상태가 분리되지 않고 명확 해지기 위해 필요한 것은 체크 아웃이 아니라 재설정하는 것입니다.
git reset HEAD@{1}
답변
나는 당신이 할 수 있다고 믿습니다.
git reset HEAD@{1}
제 시간에 한 커밋을 진행합니다. 여러 커밋을 진행하려면 HEAD @ {2}, HEAD @ {3} 등을 사용하세요.
답변
이것이 제가 앞뒤로 탐색하는 데 사용하는 것입니다.
다음 커밋으로 이동
function n() {
git log --reverse --pretty=%H master | grep -A 1 $(git rev-parse HEAD) | tail -n1 | xargs git checkout
}
이전 커밋으로 이동
function p() {
git checkout HEAD^1
}
답변
F가 trunk
(여기에 자신의 브랜치 이름을 입력하십시오) 에 대한 최신 커밋이라고 말 하십시오 … trunk~0
(또는 그냥 trunk
), E를 trunk~1
, D trunk~2
등 으로 참조 할 수 있습니다 .
커밋 이름을 지정하는 더 많은 방법에 대해서는 리플 로그 를 살펴보십시오 .
답변
뒤로 이동하는 것은 나무 아래로 이동하기 때문에 사소하며 항상 한 가지 방법이 있습니다.
function git_down
git checkout HEAD^
end
앞으로 순회 할 때 트리 위로 이동하므로 대상 분기를 명시해야합니다.
function git_up
git log --reverse --pretty=%H $argv | grep -A 1 (git rev-parse HEAD) | tail -n1 | xargs git checkout
end
사용법 : git down
,git up <branch-name>
답변
앞을보고 싶다면 Git에 엄격한 명령이 없기 때문에이 트릭을 수행 할 수 있습니다.
git log --reverse COMMIT_HASH..
예
로그 기록 해시 목록 :
A
B
C -> put this
D
명령을 사용 git log --reverse C..
하면 출력에 B 와 A 가 표시됩니다 .