Programing

git에서 커밋 사이를 앞뒤로 어떻게 이동합니까?

lottogame 2020. 9. 24. 08:08
반응형

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.)

참고URL : https://stackoverflow.com/questions/6759791/how-do-i-move-forward-and-backward-between-commits-in-git

반응형