이전 지점을 체크 아웃하는 방법이 있습니까?


703

나는 일종의 cd -git 과 동등한 것을 원한다 . 내가 지점에 master있고 체크 아웃하는 경우 foo, git checkout -돌아가고 싶은 것과 같은 master것을 입력하고 다시 입력하기 위해 다시 입력 할 수 있기를 바랍니다 foo.

이와 같은 것이 있습니까? 구현하기가 어려울까요?


2
위 화살표를 입력하여 이전 git checkout 명령을 찾으십시오 .p
Kit Ho

11
당신이 찾고있는 것을 찾을 때까지 누르십시오
Matt Briggs

@MattBriggs는 실제로 입력 할 gc-그 속기 또는이었다git checkout -
jewbix.cube

2
@ jewbix.cube 쉘과 자식 모두에 대한 별칭에 대해 배워야합니다.
Gauthier

@KitHo : 나는 끊임없이 그렇게하고 싶어하지만, 예를 들어 지점을 만든 경우 원하는 명령이 역사에 존재하지 않을 수도 있습니다.
M_M

답변:


1226

로부터 1.6.2에 대한 릴리스 노트

@{-1}마지막 지점을 참조하는 방법입니다. 이것은
객체 이름이 예상되는 곳뿐만 아니라 지점 이름이 예상되는 곳이면 어디서나 받아 들여지며 지점 이름을 입력 한 것처럼 작동합니다.
예를 들면 git branch --track mybranch @{-1}, git merge @{-1}그리고
git rev-parse --symbolic-full-name @{-1}예상대로 작동합니다.

git checkout -의 속기입니다 git checkout @{-1}.


46
와우, 나는 그것을 완전히 시도 했어야했다! 생각-쉘주의, 그리고 기능이 git에 있었다면, 그것은 뭔가 다를 것입니다
Matt Briggs

9
커밋 SHA를 두 번 체크 아웃하면이 기능이 제대로 작동하지 않습니다.이 경우 @ {-1}은 첫 번째 체크 아웃 이전 위치를 가리 킵니다.
user716468

1
ZSH를 사용하고 있으며 @ {-1}을 따옴표로 묶어야했습니다. 그렇지 않으면 git choked :error: pathspec '@-' did not match any file(s) known to git. error: pathspec '@1' did not match any file(s) known to git.
Murphy Randle

14
이것은 아마도 SO 답변이 나를 통제 할 수 없게 미소 짓게 한 첫 번째 일 것입니다. 이것이 훨씬 어려울 것이라고 생각했습니다!
Owen

25
사용 된 교육학에 대한 추가 조언 : 일반 시설을 보여준 다음, 작지만 덜 일반적인 속기를 언급하십시오! … 나는 @{u}현재 브랜치의 업스트림 브랜치 인을 자주 사용 합니다. git log @{u}..아직 풀링되지 않은 업스트림 커밋을 나열하는 경우에 매우 유용합니다 . 그리고 git log ..@{u}아직 밀리지 않은 로컬 커밋 인 대화 .
Benjohn

208

요즘이 작업을 수행하는 가장 간단한 방법은 다음과 같습니다.

git checkout -

...의 별칭입니다 :

git checkout @{-1}

git checkout 빼기

이것에 대해 더 알고 싶다면 여기에 전체 기사를 썼습니다 : Check in The Previous Branch In Git .


3
완전한. 이 작업을 수행하는 git 방법이 무엇인지 찾고 있었 으므로이 정확한 별칭을 만들 수있었습니다. 그것이 존재하는 것을보고 다행입니다.
Tabitha

3
체크하지 않고 이전 분기를 나열하는 방법이 있습니까?
Erotemic

7
@Erotemic 사용 bash는 -for i in{1..10}; do git rev-parse --symbolic-full-name @{-$i}; done
Bonsaigin

'git checkout-'별칭을 보는 것은 놀라운 일입니다! 바로 내가 찾던 ux입니다 :)
James Tayler

powershell에 @Erotemic있을 것입니다 git reflog | ? { $_ -match ': checkout: moving from (.*) to (.*)'} | % { $Matches[1] } . bash에서는 동등한 것을 작성해야합니다 (reflog를 가져 와서 ": checkout :"문자열을 포함하는 행으로 필터링 한 다음 분기 이름을 추출하십시오). 이것은 실제로 git이하는 일입니다
Mariusz Pawelski

28

@Karl이 지적하고 git checkout수동으로 :

특별한 경우로, 마지막 N 번째 분기에 대한 "@ {-N}"구문은 분리가 아닌 분기를 체크 아웃합니다. "@ {-1}"과 동의어를 지정할 수도 있습니다.

모두 이렇게 git checkout -하고 git checkout @{-1},이 경우 일 것

가장 가까운 것은을 사용 git reflog하고 최신을 구문 분석 moving from branch1 to branch2하고git checkout branch1


11

이전 답변에 더 자세한 내용을 추가하여 git checkout @{-N}작동 방식을 이해하십시오 . 체크 아웃 기록을 검사하기 위해 reflog를 밟습니다. 따라서 비슷한 것을 구현하려면 라인 을 git reflog찾는 결과를 구문 분석 할 수 있어야합니다 checkout:. git 소스의 구현 sha1_name.c, 특히 함수를 확인할 수 있습니다 interpret_nth_prior_checkout.



10

힘내 버전 은 그 (그리고 더 많은)를 할 수 2.23있는 git switch명령을 도입했습니다 . 공식 문서 인용 :

지정된 지점으로 전환하십시오. 작업 트리와 색인은 분기와 일치하도록 업데이트됩니다. 모든 새로운 커밋이이 브랜치의 끝에 추가됩니다.

특정한 경우 git switch -이전에 있던 지점으로 돌아가도록 발행 할 수 있습니다 . 동일한 명령을 다시 실행하여 첫 번째 분기로 돌아갈 수 있습니다.

PS 그것은 당신이 이미 (난 당신이 질문을 이후 7 년이있어 의미) 그렇게하는 방법을 알고하지 않는 것이 아니지만, 공통의 해결이 명령이 적은 초보자 혼란과 친절 혼란을 사용할 때 발생한다 git checkout.


5

나는 이전 지점을 체크 아웃하는 것과 같은 생각 으로이 질문에 착륙했습니다. 에서 ohmyz 를 사용 하고 Mac있습니다. 아래 명령이 도움이되었습니다.

$ gco -
$ git checkout -

ohmyz가 다른 zsh 패키지 관리자와 비교할 때 매우 느리다는 것은 단호합니다. 항원 또는 zplug를 살펴 보는 것이 좋습니다 .
spex

2
확실하지 않은 경우 Oh My Zsh의 Git 플러그인gco 이 짧은 작성 방법으로 정의 하기 때문에 작동 합니다 git checkout. 그래서 gco -그냥 호출 git checkout -.
Rory O'Kane

내 친구와 떨어져 설명 할 필요가 없습니다 git checkout -. 안전 장치가 업데이트되었습니다.
Venkat.R

1

가장 인기있는 솔루션은 다음과 같습니다.

git checkout @{-N}

여기서 N-체크 아웃 히스토리로 다시 이동할 분기 수를 계산합니다.


1

다음은 다른 답변에서 제공하는 솔루션 git checkout -git checkout @{-1}솔루션 을 설명하는 Git 문서 부분에 대한 포인터입니다 .

  • 모든 명령에 대해 Git 개정판을 지정할 때 @{-<n>}, 예를 들어@{-1} "현재 n 번째 분기 / 커밋이 체크 아웃되기 전에 체크 아웃 됨 "을 의미합니다 . 다음과 같이 git checkout <branch>반복해서 설명합니다. " @{-N}구문을 사용하여 git checkout작업 을 사용하여 체크 아웃 한 N 번째 마지막 분기 / 커밋을 참조 할 수 있습니다 ."

  • <branch>인수에git checkout- 대해 ' @{-1}' ' 과 동의어 인 ' '을 지정할 수도 있습니다 . "

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.