답변:
로 커밋하지 않고 작업을 숨길 수 있습니다 git stash
. 당신은 git stash pop
그것을 다시 얻기 위해 사용 하는 것보다 . 또는 ( 칼리토가 말했듯이) git commit
별도의 지점 으로 갈 수 있습니다 .
다음을 사용하여 특정 날짜까지 커밋을 체크 아웃 할 수 있습니다 rev-parse
.
git checkout 'master@{1979-02-26 18:30:00}'
사용 가능한 옵션에 대한 자세한 내용은에서 확인할 수 있습니다 git-rev-parse
.
주석에서 언급 했듯이이 방법은 reflog를 사용하여 기록에서 커밋을 찾습니다. 기본적으로이 항목 은 90 일 후에 만료됩니다 . reflog 사용 구문이 덜 장황하지만 90 일만 되돌릴 수 있습니다.
reflog를 사용하지 않는 다른 옵션은 다음을 사용 rev-list
하여 특정 시점에 커밋을 얻는 것입니다.
git checkout `git rev-list -n 1 --first-parent --before="2009-07-27 13:37" master`
병합으로 가져온 버전이 아닌 내역 만 원하는 경우 --first-parent를 참고하십시오 . 그것이 당신이 보통 원하는 것입니다.
git co 'master@{2 days ago}'
.
git rev-list -n 1 --before="2009-07-27 13:37" master
$(...)
이 선호됩니다.
앤디의 해결책이 나를 위해 작동하지 않습니다. 여기에 다른 방법이 있습니다.
git checkout `git rev-list -n 1 --before="2009-07-27 13:37" master`
error: unknown switch `n'
이 문제를 해결하는 방법에 대한 아이디어가 있습니까?
이 라인을 따라 무언가가 필요한 것 같습니다 : 날짜를 기준으로 Git 체크 아웃
즉, rev-list
커밋을 찾은 다음 checkout을 사용하여 실제로 가져옵니다.
단계적 변경 사항을 잃지 않으려면 가장 쉬운 방법은 새 분기를 만들고 해당 분기에 커밋하는 것입니다. 분기간에 언제든지 전환 할 수 있습니다.
편집 : 링크가 다운되었으므로 다음 명령을 사용하십시오.
git checkout `git rev-list -n 1 --before="2009-07-27 13:37" master`
git checkout branch@{date}
reflog가 만료되면 작동을 멈 춥니 다,하지만 당신은 사용할 수 있습니다 git checkout `git rev-list -n 1 --before="2009-07-27 13:37" master`
.
git rev-parse
당신이 관심있는 날짜가 인 경우 @Andy에 의해 제안 된 솔루션은 잘 작동 의 날짜를 커밋 . 당신이에 따라 체크 아웃 싶어하지만 경우 저자의 날짜 , rev-parse
하지 작업이 옵션을 제공하지 않기 때문에 커밋을 선택하는 그 날짜를 사용하는 것입니다. 대신 다음을 사용할 수 있습니다.
git checkout $(
git log --reverse --author-date-order --pretty=format:'%ai %H' master |
awk '{hash = $4} $1 >= "2016-04-12" {print hash; exit 0 }
)
(또한 awk 술어 $1 >= "2016-04-12" && $2 >= "11:37"
에서 시간 사용을 지정하려는 경우 )
빌드 할 때 리포지토리의 정확한 버전으로 돌아가려면 빌드 할 커밋에 태그를 지정하는 것이 가장 좋습니다.
다른 답변은 특정 시간 기준으로 지점에서 가장 최근의 커밋으로 리포지토리를 반환하는 기술을 제공하지만 항상 충분하지는 않습니다. 예를 들어, 분기에서 빌드 한 후 분기를 삭제하거나 나중에 다시 기반을 둔 분기에서 빌드하는 경우 빌드 한 커밋은 현재 분기의 git에서 "연결할 수 없음"이 될 수 있습니다. 리포지토리가 압축되면 git의 연결할 수없는 객체가 결국 제거 될 수 있습니다.
커밋에 태그를 추가하면 나중에 태그를 제거하지 않고 분기로 무엇을 하든지 태그에 도달 할 수 없게됩니다.
git rev-list -n 1 --before="2009-07-27 13:37" origin/master
인쇄 된 문자열 (예 : XXXX)을 가져와 다음을 수행하십시오.
git checkout XXXX
git bisect good
지점 으로 사용합니다 .