원격 저장소에서 특정 풀 수정 git repo를

우리는 최신 푸시 버전의 repo를 얻기 위해 일반적으로 git pushdev 서버 에서 사용 하고 나서 git pull라이브 서버 에서 배포하는 원격 git repo를 가지고 있습니다 .

그러나 우리가 ( git pull라이브 서버를 사용 하지 않고) 몇 가지 개정을 커밋하고 추진했다면 어떻게 git pull원하는 이전 커밋을 참조 할 수 있습니까?

즉, 같은 git pull -r 3ef0dedda699f56dc1062b5dcc2c59f7ad93ede4



답변

저장소를 가져 오면 다음을 수행 할 수 있습니다.

git checkout 3ef0d...

답변

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 checkout 3ef0d, 풀 후 작업 할 수없는 경우 ) 프로덕션에서 배포 할 버전에 태그를 지정하고 프로덕션에서 해당 태그를 체크 아웃하여 풀이 즉시 발생하지 않도록해야합니다. 작업 디렉토리를 변경하십시오. 그렇지 않으면 당기기 직전에 누군가가 밀릴 위험이 있습니다.


답변

A가 있습니다
git pull
git checkout my-old-commit

지금은 분리 된 HEAD 상태에서 당신을 잎 – 효율적으로 새 커밋 경로 아래로이 저장소에 미래의 커밋을 보내는. 배포 리포지토리의 경우 커밋 만 풀기 전에 커밋 만 커밋해야하므로 큰 문제는 아닙니다.

그러나 커밋 마커 (헤드, 태그, 원격)가 마스터 리포지토리와 동일한 지 확인하는 것이 유용한 경우가 있습니다. 체크 아웃 후이 문제를 해결하려면 :
git reset -헤드를 다시 연결합니다
git fetch .-리모콘의 마커를 동기화합니다 (git 버전에 따라 다를 수 있음-환경은 여전히 ​​1.7에 있습니다. 따라서 더 이상 YMMV가 필요하지 않을 수 있습니다)