programing

Git 푸시를 적절하게 강제하려면 어떻게 해야 하나요?

oldcodes 2023. 4. 19. 23:27
반응형

Git 푸시를 적절하게 강제하려면 어떻게 해야 하나요?

베어 이외의 리모트 「메인」리포를 셋업 해, 컴퓨터에 복제했습니다.로컬에서 몇 가지 변경을 가하고 로컬 저장소를 업데이트한 후 변경 내용을 원격 보고로 되돌렸습니다.거기까지는 괜찮았어요.

나서 나는를 바꿨다.그리고 지역 리포트에서 뭔가를 바꿨어요.리모트 리포로의 변경이 필요없다는 것을 알았습니다. ★★★★★★★★★★★★★★★★★★★★★★★★.git push로컬 레포에서 리모트 레포에 접속했습니다만, 다음과 같은 에러가 발생했습니다.

기록 손실을 방지하기 위해 빨리 전달되지 않은 업데이트가 거부되었습니다. 다시 누르기 전에 원격 변경 사항을 병합합니다.「Fast-forwards」의 fast-forwards.git push --help세한것 、 을을해해요요 。

아마...

git push --force

로컬 복사를 강제로 리모트복사에 푸시하여 동일하게 만듭니다.강제 갱신을 실시합니다만, 리모트 리포에 돌아와 커밋을 실시하면, 파일에 오래된 변경(메인 리모트 리포의 변경)이 포함되어 있는 것을 알 수 있습니다.

답변하나에 대한 코멘트에서 언급했듯이:

[I] 강제하려고 했는데 변경을 저장하기 위해 마스터 서버로 돌아가면 오래된 스테이징이 나타납니다.따라서 내가 커밋할 때 저장소는 같지 않습니다.그리고 다시 git push를 사용하려고 하면 같은 오류가 발생합니다.

이 문제를 해결하려면 어떻게 해야 하나요?

다음 작업을 수행합니다.

git push origin <your_branch_name> --force

또는 특정 보고서가 있는 경우:

git push https://git.... --force

이전 커밋이 삭제되고 현재 커밋이 푸시됩니다.

적절하지 않을 수도 있지만, 만약 누군가가 이 페이지를 우연히 보게 된다면, 간단한 해결책을 원할지도 모른다는 생각을 하게 될 것이다.

짧은 플래그

, 「 」, 「 」라고 하는 도 주의해 주세요.-f 말하다--force

git push origin <your_branch_name> -f

동작합니다.

만약 ★★★★★★★★★★★★★★★★★.push --force동작하지 않습니다.이 인스턴스의 2 행을 참조해nd 주세요.

git reset --hard HEAD~3  # reset current branch to 3 commits ago
git push origin master --delete  # do a very very bad bad thing
git push origin master  # regular push

하지만 조심해...

절대로 공공장소 기록에 돌아가지 마세요!

즉, 다음과 같습니다.

  • 하지 마force공용 저장소를 푸시합니다.
  • 거나 사람의 수 거 누군가의 감정을 상하게 할 수 있는 그런 짓은 하지 마세요.pull.
  • 하지 마reset ★★★★★★★★★★★★★★★★★」rewrite누군가 이미 끌어냈을 수도 있는 레포의 역사.

물론 이 규칙에도 예외적으로 드문 예외가 있지만 대부분의 경우 이 규칙을 실행할 필요가 없으며 다른 모든 사용자에게 문제가 발생합니다.

대신 되돌리기를 수행합니다.

그리고 공공장소에 밀고 나가는 것에 항상 주의하세요.되돌리는 중:

git revert -n HEAD~3..HEAD  # prepare a new commit reverting last 3 commits
git commit -m "sorry - revert last 3 commits because I was not careful"
git push origin master  # regular push

실제로 (복귀악의적 리셋에서) 두 원본 HEAD에는 동일한 파일이 포함됩니다.


[ ]를 클릭하여 주위에 합니다.push --force

밀어넣기 대신 리스로 밀어넣기를 고려하지만 여전히 되돌리기를 선호합니다.

하나의 문제push --force당신이 하기 전에 누군가가 무언가를 밀어붙일 때, 하지만 당신이 이미 가져온 후에 가져올 수 있습니다.지금 재기반의 버전을 강제 적용하면 다른 사용자의 작업을 대체할 수 있습니다.

git push --force-with-leasegit 1.8.5에 소개된 (질문에 대한 @VonC 코멘트 덕분에)는 이 특정 문제에 대처하려고 합니다.기본적으로는 에러가 발생하며 마지막 가져오기 이후 리모컨이 변경된 경우 푸시되지 않습니다.

에는 이 push --force필요하지만 더 많은 문제를 방지해야 합니다.는 디폴트라고 push --force그렇다고 해서 억지로 그런 을 하는 .push기본 변경 전에 가져온 사용자는 여전히 많은 문제를 겪을 수 있으며, 대신 되돌아가면 쉽게 문제를 피할 수 있습니다.

★★★★★★★★★★★★★★★★★★★★★★★★★★★★.git --push★★★★★★★★★★★…

왜 억지로 밀어붙이려 하겠어?

@linquize는 코멘트에 좋은 푸시 포스 예를 제시했습니다., 기밀 데이터입니다.밀지 말아야 할 데이터가 잘못 유출되었습니다.속도가 빠르면 '수정'할 수 있습니다.*위쪽으로 밀어서.

*가비지 수집을 하거나 정리하지 않는 한 데이터는 리모트에 남습니다.이미 가져온 사람이 퍼트릴 수 있는 명백한 잠재력도 있습니다. 하지만 이해하실 수 있습니다.

로컬 지점 A에 있고 로컬 지점 B를 원래 지점 C에 강제로 푸시하려면 다음 구문을 사용할 수 있습니다.

git push --force origin B:C

다음 명령을 사용합니다.

git push -f origin master

우선, 「메인」리포에 직접 변경을 가하지 않습니다.만약 당신이 정말로 "메인" 레포(repo)를 갖고 싶다면, 당신은 그것을 추진해야만 하고, 그것을 직접적으로 바꾸지 말아야 한다.

있는 입니다만, 요?git pull에 「」를 참조해 주세요.git push당신이 지금 하고 있는 일(제가 잘 이해했다면)은 강요를 하고 나서 "메인" 레포에서 당신의 변경 사항을 잃게 되는 것입니다.먼저 변경 내용을 로컬로 병합해야 합니다.

다음 사항을 권장합니다.

  • 본론으로 들어가다

  • 메인 리포 작업 트리가 해당 리포와 동기화되지 않는 문제를 일으키지 않도록 메인 리포가 베어 리포임을 확인합니다..gitbase. "로컬 git 저장소를 다른 컴퓨터에 푸시하는 방법"을 참조하십시오.

  • 메인(베어) 레포에서 변경해야 할 경우 (메인 서버에서) 클론하고 수정 후 푸시백합니다.

즉, 풀/풀링하는 업스트림레포 1개를 가지기 위해 메인서버와 로컬컴퓨터 양쪽에서 베어레포에 액세스 할 수 있도록 합니다.

git push --force할 수 단,git push --force-with-lease이다.

git push --force는 리모트브런치를, 「」는 「」로 덮어씁니다.git push --force-with-lease는 로컬 복사가 리모트브런치 상의 모든 커밋을 인식하고 있는 경우에만 리모트브런치를 덮어씁니다.이러한 차이로 인해 프로젝트에 대한 다른 사용자의 변경 사항을 파기하는 것이 훨씬 더 어려워집니다.

저도 같은 질문이 있었는데 드디어 알아냈어요.가장 필요한 것은 다음 2개의 git 명령어를 실행하는 것입니다(git 커밋 리비전 번호로 해시를 바꿉니다).

git checkout <hash>
git push -f HEAD:master

이력을 유지하면서 회사 gitHub 저장소의 마스터를 교체하는 솔루션이었습니다.

push -f지사 기록을 유지하기 위해 회사 리포지토리에서 마스터하는 기능이 비활성화되어 있는 경우가 많습니다.이 솔루션은 우리에게 효과가 있었다.

git fetch desiredOrigin
git checkout -b master desiredOrigin/master // get origin master

git checkout currentBranch  // move to target branch
git merge -s ours master  // merge using ours over master
// vim will open for the commit message
git checkout master  // move to master
git merge currentBranch  // merge resolved changes into master

desiredOrigin을 .

Github 액세스토큰을 사용하여 인증하는 경우 다음 절차를 수행합니다.

  • git remote set-url origin https://YourTokenNum@github.com/UserName/ProjectName

  • git push --force --set-upstream origin master

「」를 사용합니다.--force-with-lease더 나은 선택일 수 있습니다.

git push <remote> <branch> --force-with-lease

브랜치를 수정하기 전에 아무도 브랜치를 업데이트하지 않았으므로 브랜치의 변경 내용을 덮어쓰지 않습니다.

제 문제는.. 제가 그랬어요

git checkout arbitrary_commit
git push origin master --force

그건 옳은 일이 아니었어요대신 나는 다음과 같이 해야 했다.

git reset HEAD~3
git push origin master --force

: " " "3예에 불과합니다.이치노

언급URL : https://stackoverflow.com/questions/5509543/how-do-i-properly-force-a-git-push

반응형