git에서 커밋 사이를 앞뒤로 어떻게 이동합니까?
나는 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 checkout 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
등 으로 참조 할 수 있습니다 .
커밋 이름을 지정하는 더 많은 방법에 대해서는 리플 로그 를 살펴보십시오 .
아마도 가장 좋은 방법은 아니지만 git log
커밋 목록을보고 git checkout [sha1 of D]
D로 이동하는 데 사용할 수 있습니다.
방금 이것에 대한 테스트를했습니다. 예를 들어 당신이 마스터 브랜치에 있다고 말하십시오.
git checkout HEAD@{3}
따라서 머리가 분리되고 다른 커밋으로 이동하기 위해 다시 시도 할 수 있습니다.
git checkout HEAD@{4}
주변을 둘러보고 나면 해당 지점을 확인하여 원래 상태로 돌아갈 수 있습니다. 내 예 : 마스터 브랜치
git checkout master
원래 상태로 가고 싶지 않고 커밋 중 하나를 머리로 유지하고 거기에서 계속하려면 거기에서 분기해야합니다. 예를 들어 "git checkout HEAD @ {4}"뒤에 다음을 실행할 수 있습니다.
git checkout -b MyNewBranch
해결 방법으로 다음을 사용하여 HEAD로 돌아갈 수 있습니다.
git checkout <branch>
그런 다음 원하는 커밋으로 이동하십시오.
git checkout HEAD~<offset>
뒤로 이동하는 것은 나무 아래로 이동하기 때문에 사소하며 항상 한 가지 방법이 있습니다.
function git_down
git checkout HEAD^
end
When traversing forward you are moving up the tree, so you need to be explicit which branch you are targeting:
function git_up
git log --reverse --pretty=%H $argv | grep -A 1 (git rev-parse HEAD) | tail -n1 | xargs git checkout
end
Usage: git down
, git up <branch-name>
If you are using vs code then Git history is an awesome plugin where you can efficiently see commits and check their contents in the editor itself. check out the link
branchName=master; commitInOrder=1; git checkout $(git log --pretty=%H "${branchName}" | tac | head -n "${commitInOrder}" | tail -n 1)
where:
branchName
equals branch name
commitInOrder
equals a commit in order from very first commit in the selected branch (so 1 is the very first commit, 2 is second commit in branch, etc.)
'Programing' 카테고리의 다른 글
HTML 앵커 링크-href 및 onclick 둘 다? (0) | 2020.09.24 |
---|---|
동일한 컴퓨터에서 여러 TeamCity 에이전트를 실행하고 계십니까? (0) | 2020.09.24 |
Gradle에 새 소스 세트를 어떻게 추가합니까? (0) | 2020.09.24 |
C ++에서 동일한 클래스에 대해 서로 다른 유형을 정의하는 방법 (0) | 2020.09.24 |
C #에서 Java System.currentTimeMillis ()에 해당 (0) | 2020.09.23 |