약 한 달 전에 원격 자식 저장소를 복제했습니다. 원격 저장소가 많이 변경되었으며 이제 불안정 해졌습니다. 이제 한 달 전에 복제 한 것과 동일한 버전의 저장소가 필요합니다.
어떻게해야합니까?
약 한 달 전에 원격 자식 저장소를 복제했습니다. 원격 저장소가 많이 변경되었으며 이제 불안정 해졌습니다. 이제 한 달 전에 복제 한 것과 동일한 버전의 저장소가 필요합니다.
어떻게해야합니까?
답변:
원하는 커밋으로 저장소를 "재설정"할 수 있습니다 (예 : 1 개월 전).
이를 위해 git-reset 을 사용하십시오 .
git clone [remote_address_here] my_repo
cd my_repo
git reset --hard [ENTER HERE THE COMMIT HASH YOU WANT]
master
분기 에서만 재설정되며 복제본에서 기본적으로 체크 아웃됩니다. master
이전에 먼저 확인해야하는 주요 개발 지점 이외의 지점 인 경우git reset
git checkout -b new_branch hash
다른 분기를 건드리지 않고 해시를 기반으로 새 분기를 만드는 것이 좋습니다 . 기존 지점의 헤드를 이동하면 원격 서버로 무언가를 푸시 할 때 문제가 발생할 수 있습니다.
git pull origin [branch]
다른 방법으로 할 수 있습니다 .
간단하게 사용할 수 있습니다
git checkout commithash
이 순서로
git clone `URLTORepository`
cd `into your cloned folder`
git checkout commithash
커밋 해시는이 "45ef55ac20ce2389c9180658fdba35f4a663d204"와 같습니다.
git reset --hard
에 찬성하여 피해야 한다고 생각 합니다 git checkout commit-hash
. A git reset --hard
는 때때로 바람직하지 않은 git history의 일부를 제거합니다.
git init
필요하지 않습니다
사용은 git log
당신이 롤백하려는 개정을 발견하고,이 해시를 커밋의 메모를 촬영합니다. 그 후에는 두 가지 옵션이 있습니다.
해당 개정 이후에 커밋 할 계획 이있는 경우 새 지점을 체크 아웃하는 것이 좋습니다 .git checkout -b <new_branch_name> <hash>
당신이 그 개정 후의 아무것도 저지하지 않을 경우 수 단순히 체크 아웃 지점없이 : git checkout <hash>
- 참고 :이은 현재 어느 지점에 연결되지 않은 의미 '분리 HEAD'상태에있는 저장소를 넣어 것입니다 - 그럼 당신 ' 새로운 커밋을 실제 브랜치에 병합하기위한 추가 작업이 필요하다 .
예:
$ git log
commit 89915b4cc0810a9c9e67b3706a2850c58120cf75
Author: Jardel Weyrich <suppressed>
Date: Wed Aug 18 20:15:01 2010 -0300
Added a custom extension.
commit 4553c1466c437bdd0b4e7bb35ed238cb5b39d7e7
Author: Jardel Weyrich <suppressed>
Date: Wed Aug 18 20:13:48 2010 -0300
Missing constness.
$ git checkout 4553c1466c437bdd0b4e7bb35ed238cb5b39d7e7
Note: moving to '4553c1466c437bdd0b4e7bb35ed238cb5b39d7e7'
which isn't a local branch
If you want to create a new branch from this checkout, you may do so
(now or later) by using -b with the checkout command again. Example:
git checkout -b <new_branch_name>
HEAD is now at 4553c14... Missing constness.
이렇게하면 정보를 잃지 않으므로 안정 될 때 최신 버전으로 이동할 수 있습니다.
git checkout develop
develop이 지점의 이름 인 곳만 있으면됩니다.
중앙 집중식 버전 제어 시스템과 달리 Git은 전체 저장소를 복제하므로 현재 원격 파일뿐만 아니라 전체 기록을 가져옵니다. 로컬 저장소에는이 모든 것이 포함됩니다.
당시 특정 버전을 표시하는 태그 가있을 수 있습니다 . 그렇지 않은 경우 로컬에서 직접 만들 수 있습니다. 이를 수행하는 좋은 방법은 (아마도 모든 브랜치와 태그를 보는 git log
것과 같은) 도구 를 사용 하거나보다 시각적으로 사용하는 것 입니다. 당시에 사용 된 커밋 해시를 발견 할 수 있으면이를 사용하여 태그를 지정한 다음 새 작업 복사본에서 태그를 확인할 수 있습니다 (예 : 태그 이름 대신 해시로 직접).gitk
gitk --all
git tag <hash>
git checkout -b new_branch_name tag_name
다음과 같이 해결할 수 있습니다.
git reset --hard sha
어디 sha
예를 들면 :85a108ec5d8443626c690a84bc7901195d19c446
다음 명령으로 원하는 sha를 얻을 수 있습니다.
git log
uploadpack.allowReachableSHA1InWant
Git 2.5.0 부터 서버에서이 구성 변수를 사용할 수 있습니다. 여기에서 GitHub 기능 요청 및 이 기능을 사용 하는 GitHub 커밋이 가능합니다 .
Bitbucket Server는 버전 5.5 이상부터 활성화했습니다 .
용법:
# Make remote with 4 commits, and local with just one.
mkdir server
cd server
git init
touch 1
git add 1
git commit -m 1
git clone ./ ../local
for i in {2..4}; do
touch "$i"
git add "$i"
git commit -m "$i"
done
# Before last commit.
SHA3="$(git log --format='%H' --skip=1 -n1)"
# Last commit.
SHA4="$(git log --format='%H' -n1)"
# Failing control without feature.
cd ../local
# Does not give an error, but does not fetch either.
git fetch origin "$SHA3"
# Error.
git checkout "$SHA3"
# Enable the feature.
cd ../server
git config uploadpack.allowReachableSHA1InWant true
# Now it works.
cd ../local
git fetch origin "$SHA3"
git checkout "$SHA3"
# Error.
git checkout "$SHA4"
아마 git reset
당신의 문제를 해결합니다.
git reset --hard -#commit hash-