날짜별로 Git에서 결제하는 방법은 무엇입니까? 중입니다. Git에 “매개

소스 코드에서 회귀를 작업 중입니다. Git에 “매개 변수 날짜 / 시간을 기준으로 소스를 체크 아웃하십시오”라고 말하고 싶습니다. 이게 가능해?

또한 현재보기에서 잃고 싶지 않은 변경 사항을 단계별로 적용했습니다. 이상적으로는 현재 소스와 이전 날짜를 기준으로 관심있는 일부 버전 사이를 전환하고 싶습니다.



답변

현재 변경 사항을 유지하려면

로 커밋하지 않고 작업을 숨길 수 있습니다 git stash. 당신은 git stash pop그것을 다시 얻기 위해 사용 하는 것보다 . 또는 ( 칼리토가 말했듯이) git commit별도의 지점 으로 수 있습니다 .

rev-parse를 사용하여 날짜 별 체크 아웃

다음을 사용하여 특정 날짜까지 커밋을 체크 아웃 할 수 있습니다 rev-parse.

git checkout 'master@{1979-02-26 18:30:00}'

사용 가능한 옵션에 대한 자세한 내용은에서 확인할 수 있습니다 git-rev-parse.

주석에서 언급 했듯이이 방법은 reflog를 사용하여 기록에서 커밋을 찾습니다. 기본적으로이 항목 은 90 일 후에 만료됩니다 . reflog 사용 구문이 덜 장황하지만 90 일만 되돌릴 수 있습니다.

rev-list를 사용하여 날짜별로 체크 아웃

reflog를 사용하지 않는 다른 옵션은 다음을 사용 rev-list하여 특정 시점에 커밋을 얻는 것입니다.

git checkout `git rev-list -n 1 --first-parent --before="2009-07-27 13:37" master`

병합으로 가져온 버전이 아닌 내역 만 원하는 경우 –first-parent를 참고하십시오 . 그것이 당신이 보통 원하는 것입니다.


답변

앤디의 해결책이 나를 위해 작동하지 않습니다. 여기에 다른 방법이 있습니다.

git checkout `git rev-list -n 1 --before="2009-07-27 13:37" master`

힘내 : 날짜 별 체크 아웃


답변

이 라인을 따라 무언가가 필요한 것 같습니다 :
날짜를 기준으로 Git 체크 아웃

즉, rev-list커밋을 찾은 다음 checkout을 사용하여 실제로 가져옵니다.

단계적 변경 사항을 잃지 않으려면 가장 쉬운 방법은 새 분기를 만들고 해당 분기에 커밋하는 것입니다. 분기간에 언제든지 전환 할 수 있습니다.

편집 : 링크가 다운되었으므로 다음 명령을 사용하십시오.

git checkout `git rev-list -n 1 --before="2009-07-27 13:37" master`

답변

파이프 대체를 선호하는 사람들에게

git rev-list -n1 --before=2013-7-4 master | xargs git checkout

답변

제 경우에는 -n 1옵션이 작동하지 않습니다. Windows에서 다음 명령 시퀀스가 ​​제대로 작동한다는 것을 알았습니다.

git rev-list -1 --before="2012-01-15 12:00" master

주어진 날짜에 대한 적절한 커밋의 SHA를 반환합니다.

git checkout SHA

답변

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"에서 시간 사용을 지정하려는 경우 )


답변

rev-list마스터 브랜치에서 프로덕션 브랜치로 가장 최근의 병합 커밋을 찾으려면 이 옵션을 사용하십시오 (순전히 가상의 예).

git checkout `git rev-list -n 1 --merges --first-parent --before="2012-01-01" production`

주어진 날짜에 프로덕션 서버에 있던 코드를 찾아야했습니다. 이것은 나를 위해 그것을 발견했다.