programing

모든 풀에서 모든 것을 덮어쓰도록 깃 풀을 강제하려면 어떻게 해야 합니까?

javajsp 2023. 6. 23. 21:44

모든 풀에서 모든 것을 덮어쓰도록 깃 풀을 강제하려면 어떻게 해야 합니까?

3개의 개발자 저장소가 정상적으로 풀링하고 푸시하는 중앙 베어 저장소가 있습니다.

또한 중앙 저장소에서 사용할 수 있는 다른 두 개의 저장소가 있습니다. 하나는 라이브 서버이고 다른 하나는 테스트/스테이지 서버입니다. 각각의 저장소는 각자의 지점에서 사용할 수 있습니다.

시나리오는 다음과 같습니다.나는 있습니다post-update테스트 및 라이브 저장소에 자동으로 액세스하고 각각에 대해 풀 명령을 실행하는 CENTRAL repo의 후크 스크립트.이렇게 하면 테스트 서버와 활성 서버가 모두 업데이트되며, 이는 새 커밋이 있는 분기에 따라 달라집니다.이 모든 것이 잘 작동합니다.

문제는 이것입니다. 비상시에는 ftp 등을 통해 서버에서 파일이 직접 업데이트될 수 있으며 병합/덮어쓰기 충돌이 발생하기 때문에 CENTAL 사후 업데이트 스크립트가 실패할 수 있습니다.이 시나리오를 피할 방법이 없고, 피할 수 없는 일입니다.

제가 원하는 것은 다음과 같습니다.라이브 사이트와 테스트 사이트에서 끌어오기를 원할 때 항상 덮어쓰거나 병합합니다.항상.이러한 리포지토리는 개발용이 아니므로 풀 전용입니다.

제가 조사한 바로는 항상 로컬 파일을 강제로 덮어쓰는 풀을 사용할 수 있는 좋은 해결책을 찾을 수 없습니다.이것이 가능할까요?그렇다면 훌륭한 개발 시나리오가 될 것입니다.

정말로 이상적인 방법은 사용하지 않는 것입니다.pull전혀, 하지만 대신에fetch그리고.reset:

git fetch origin master
git reset --hard FETCH_HEAD
git clean -df

(변경)master원하는 지점으로 이동합니다.)

pull어떤 식으로든 변화를 함께 병합하는 것을 중심으로 설계된 반면,reset로컬 복사본이 특정 커밋과 일치하도록 만드는 것을 중심으로 설계되었습니다.

약간 다른 옵션을 고려하는 것이 좋습니다.clean시스템의 필요에 따라 달라집니다.

사용해 볼 수 있습니다.

git reset --hard HEAD
git pull

("git pull"을 강제로 사용하여 로컬 파일을 덮어쓰려면 어떻게 해야 합니까?)

다른 아이디어는 전체 Git를 삭제하고 새 클론을 만드는 것입니다.

분기의 복사본을 가져와서 원본에서 로컬 파일을 강제로 덮어쓰려면 다음을 사용합니다.

git reset --hard origin/current_branch

현재 작업은 모두 손실되고 오리진 분기와 동일합니다.

git reset --hard HEAD
git fetch --all
git reset --hard origin/your_branch

한 명령으로 수행하는 방법은 잘 모르겠지만 다음과 같은 작업을 수행할 수 있습니다.

git reset --hard
git pull

아니 심지어는

git stash
git pull

후크를 교체하여 모든 것을 깨끗하게 닦을 수 있습니다.

# Danger! Wipes local data!

# Remove all local changes to tracked files
git reset --hard HEAD

# Remove all untracked files and directories
git clean -dfx

git pull ...

마지막 풀/클론 이후 아직 로컬 변경을 커밋하지 않은 경우 다음을 사용할 수 있습니다.

git checkout *
git pull

checkout마지막 로컬 커밋으로 로컬 변경 사항을 삭제합니다.pull합니다.

언급URL : https://stackoverflow.com/questions/9589814/how-do-i-force-git-pull-to-overwrite-everything-on-every-pull