programing

현재 분기의 끝부분이 원격 분기의 끝부분 뒤에 있기 때문에 업데이트가 거부되었습니다.

closeapi 2023. 4. 21. 20:52
반응형

현재 분기의 끝부분이 원격 분기의 끝부분 뒤에 있기 때문에 업데이트가 거부되었습니다.

저희 워크플로는요. 가게에는 희희지라는 .dev가 연락할 수 곳은 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★」origin/dev시 dev 개발하다

git checkout -b FixForBug origin/dev

은 제제 called라는 지점이 .FixForBug말인 것 )origin/dev만약에 가 래서 a a a i를 하면git pull 것이다origin/dev.수정이 끝나면 같은 것을 리모트 브랜치로 푸시합니다.

, 저는 이 중에서 로 당깁니다.origin/dev기본 재설정을 수행합니다.

git pull --rebase

그런 다음 변경 내용을 같은 이름의 원격 분기에 푸시합니다.

git push origin FixForBug

리모트 서버상에 브런치가 있어, 그 변경을 승인해, 개발 브런치에 Marge 하기 위한 풀 요구를 작성할 수 있습니다.난 절대 강요하지 않아origin/dev나 자신.★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★♪

할 는 ★★★★★★★★★★★★★★★★★★★★★★★★★★★.git push정상적으로 동작하여 리모트브런치를 만듭니다.그러나 다시 누르면(예를 들어 코드 검토 중에 누군가가 문제를 지적하는 경우) 다음과 같은 오류가 발생합니다.

일부 를 'httpsgithub..info/Product/product.git''에. https://github.mydomain.info/Product/product.git' 에 error error 。
힌트: 현재 브런치 끝부분이 리모트브런치 뒤에 있기 때문에 업데이트가 거부되었습니다.끌어당기다
'git push --help' 'Fast-forwards' 입니다.

만약 , ㅇㅇㅇㅇㅇ.git statusorigin/dev의 커밋있음)에, 1개의 커밋을 하면, 1개의 커밋(일리가 있음)이 됩니다.git pull모든 것이 최신이라고 되어 있습니다.업스트림 브랜치와는 다른 브랜치를 추진하고 있기 때문이라고 생각합니다.다음을 실행하여 이 문제를 해결할 수 있습니다.

git push -f origin FixForBug

이 경우 (강제 업데이트)라고 하는 변경을 리모트브런치에 푸시하고 리모트브런치에서는 모든 이 정상인 것 같습니다.

질문 사항:

?는 왜?-f이 시나리오에서는 필요합니까?보통 당신이 무언가를 강요할 때, 그것은 당신이 무언가를 잘못하고 있거나 적어도 표준적인 관행에 어긋나 있기 때문입니다.제가 이렇게 해도 될까요?아니면 리모트브런치에 문제가 생기거나 나중에 제 파일을 개발로 통합해야 하는 사람에게 폐를 끼칠까요?

-f 는 기본 재배치 때문에 실제로 필요합니다.리모트 브랜치는 커밋으로 고속 전송 할 수 없기 때문에, 베이스 변경을 실시할 때마다 강제 푸시를 실행할 필요가 있습니다.푸시하기 전에 반드시 풀링을 해야 합니다.단, 푸시 또는 개발을 강제하고 싶지 않은 경우 푸시할 새 브랜치를 생성하여 머지 또는 PR을 작성할 수 있습니다.

*"The tip of your current branch is behind its remote counterpart"*리모트 브랜치에 로컬에 없는 변경이 있는 것을 의미합니다. Git은 Git에서 합니다.REMOTE 나서, 「코드에 Marge 합니다.」push리모트에 접속합니다.

이 명령을 사용하여 로컬 저장소가 있는 서버를 강제로 변경할 수 있습니다(). 원격 repo 코드는 로컬 repo 코드로 대체됩니다.

git push -f origin master

-f태그를 지정하면 원격 지점 코드가 로컬 repo 코드로 덮어씁니다.

로컬 브랜치 FixForBug가 리모트 브랜치 FixForBug보다 앞서 있지 않은지 확인하려면 변경을 푸시하기 전에 변경 내용을 Marge합니다.

git pull origin FixForBug
git push origin FixForBug

마스터와 같이 현재 분기 이름을 설정합니다.

git pull --rebase origin master git push origin master

또는 지점 이름 개발

git pull --rebase origin develop git push origin develop

「 」를 하지 -f「」, 「」만을 사용할 수

git pull

대신

git pull --rebase

이 아닌 경우 변경 .origin/dev그리고 그것들을 당신의 것에 합치세요.FixForBug그러면를 할 수 됩니다.

git push origin FixForBug

하지 않고-f.

다음 cmd를 사용하여 로컬 저장소를 사용하여 GitHub에 변경을 강제할 수 있습니다.

git push -f origin main

"updates is rejected been your current branch is behind"라는 메시지가 표시되었을 때 Azure DevOps에서 사용한 명령어는 다음과 같습니다.

git pull origin master

(또는 새 폴더부터 시작하여 복제를 수행할 수 있습니다)...

이 답변은 제기된 질문에 대한 답변은 아닙니다.구체적으로는 Keif가 답변했지만 질문의 제목/제목 텍스트에 대한 답변이며, 이는 Azure DevOps 사용자에게 일반적인 질문입니다.

나는 Keif의 답변에서 "누르기 전에 항상 당기고 싶을 것이다"라는 코멘트를 적어두었다.

Git 명령줄 툴 외에 Git GUI 툴도 사용하고 있습니다.

(Git GUI에서 명령줄 명령어 "git pull origin master"에 해당하는 것을 어떻게 해야 할지 잘 몰라서 다시 명령줄로 돌아왔습니다).

수행할 수 있는 다양한 액션에 대한 다양한 Git 명령어를 나타내는 그림은 다음과 같습니다.

여기에 이미지 설명을 입력하십시오.

그것은 분명 당신의 현재 추진에 앞서 있는 약속 때문일 것이다.

  1. git pull origin "name of branch you want to push"

  2. git rebase

    ifgit rebase★★★★★★★★★★★★★★★★★★★★★★★★★★★그렇지 않으면 모든 병합 충돌을 로컬에서 해결하고 원격과의 기본 재설정이 성공할 때까지 계속 진행해야 합니다.

  3. git rebase --continue

이런 일이 나한테 일어났어.

  • 저는 어제 주인님께 풀 요청을 했습니다.
  • 오늘 동료가 검토하다가 마스터 지점과 동기화되지 않는 것을 보고 저를 도울 생각으로 마스터를 제 지점에 합병했습니다.
  • 난 그가 그런 줄 몰랐어.
  • 그런 다음 마스터를 로컬로 병합해서 푸시하려고 했는데 실패했어요. 왜요?동료가 마스터와 합병하여 로컬에 없는 추가 커밋이 생성되었기 때문입니다.

솔루션: 지부를 끌어내려서 내가 더 많은 책임을 질 수 있게 해그럼 내 리모트 브랜치로 다시 밀어줘

제 지점에서는 말 그대로 다음과 같이 했습니다.

git pull
git push

이 경우 리모트저장소에는 이미 작업 중인 개발 브랜치와 같은 이름의 브랜치가 있었습니다.지점 이름을 바꾸고 코드를 눌렀어요그것은 나에게 효과가 있었다.

git checkout -b new-branch-name
git push origin new-branch-name

문제는 이렇게 해결했습니다.

예를 들어 업스트림브런치가 분기원이고 오리진이 저장소이며 MR/PR을 업스트림브런치로 송신한다고 합니다.

약, 그 커밋이 있고, 그 커밋은 , 4개의 커밋이 있습니다.Updates were rejected because the tip of your current branch is behind.

내가 한 일은 이렇다.

먼저, 네 가지 커밋을 모두 뭉개세요.

git rebase -i HEAD~4

커밋 리스트가 나옵니다.pick(편집기에서 열림)이라고 쓰여져 있습니다.

pick fda59df commit 1
pick x536897 commit 2
pick c01a668 commit 3
pick c011a77 commit 4

로.

pick fda59df commit 1
squash x536897 commit 2
squash c01a668 commit 3
squash c011a77 commit 4

그 후, 합산한 커밋을 보존할 수 있습니다.

다음 분.

너는 너의 약속을 간직해야 할 필요가 있을 것이다.

방법은 다음과 같습니다.

git reset --soft HEAD~1
git stash

다음으로 업스트림브런치로 기본을 변경합니다.

git fetch upstream beta && git rebase upstream/beta

이제 저장된 커밋을 팝합니다.

git stash pop

다음 변경을 커밋하고 푸시합니다.

git add -A
git commit -m "[foo] - foobar commit"
git push origin fix/#123 -f

다음 도움말:

git stash
git pull origin master
git apply
git commit -m "some comment"
git push

다른 접근법에 대해 정말로 고민하고 있는 경우, 이 스텝을 사용해 주세요.

1: 푸시할 변경을 로컬브런치에 저장합니다.

2: 로컬 지점의 이름을 백업으로 변경

3: 리모콘에서 같은 이름의 브런치를 생성하여 모든 변경을 적용합니다.

4: 이 새로운 브런치를 새로운 로컬 브런치로 확인하세요.

5: 브런치 변경사항 작성저장

6: 커밋과 푸시

TortoiseGit 푸시 대화상자를 사용하는 경우

여기에 이미지 설명 입력

출처: https://tortoisegit.org/docs/tortoisegit/tgit-dug-push.html#id692368

기존 변경 사항 - 이를 통해 원격 저장소는 보다 안전한 비고속 포워드 푸시를 받아들일 수 있습니다.이로 인해 원격 저장소의 커밋이 손실될 수 있습니다. 주의하여 사용하십시오.이것에 의해, 리모트상의 다른 유저로부터 알 수 없는 변경이 없어지는 것을 막을 수 있습니다.서버 브랜치가 리모트트래킹 브랜치와 같은 커밋을 가리키고 있는지 확인합니다(기존의 변경).있을 경우 강제 푸시가 수행됩니다.그렇지 않으면 거부됩니다.git에는 원격 추적 태그가 없기 때문에 이 옵션을 사용하여 태그를 덮어쓸 수 없습니다.git push 명령의 --force-with-lease 옵션을 전달합니다.

unknown changes: 이를 통해 원격 저장소는 안전하지 않은 비고속 전달 푸시를 받아들일 수 있습니다.이로 인해 원격 저장소의 커밋이 손실될 수 있습니다. 주의하여 사용하십시오.이것은 서버의 커밋을 체크하지 않기 때문에 리모트상의 알 수 없는 변경이 없어질 가능성이 있습니다.태그를 덮어쓰려면 태그 포함과 함께 이 옵션을 사용합니다.이것은 git push 명령어의 전통적인 --force 옵션을 통과시킵니다.

마스터 브랜치에서 dev-feature 브랜치를 리베이스하려고 할 때 이쪽에서 (참조용 Git 버전>> git 버전 git 버전 2.37.1 (Apple Git-137.1) )

1.120 체크 아웃 개발 프로그램

기능 브랜치 체크 아웃

2. git pull

헤드를 최신 커밋으로 갱신하다

3. git pull --기본 오리진 마스터 리베이스

마스터 리포에서 꺼낼 기본 재배치 플래그를 설정합니다.

4. git config pull.rebase가 설정되어 있지 않은 경우 true입니다.2개의 분기점이 있기 때문에 5. git pull이 정상적으로 rebased 되어 갱신된 refs/heads/dev-feature** 위의 메시지가 뜨면 브랜치가 rebased되었음을 의미합니다.

6. git push origin dev-feature 이러한 변경을 리모트로 푸시합니다.

Visual Studio Code를 통해 기본 리비스를 푸시할 때 이 문제가 발생하였습니다.Git 출력창에서 명령어를 복사하여 Visual Studio Code 단말창에서 실행함으로써 문제가 해결되었습니다.

제 경우 명령어는 다음과 같습니다.

git push origin NameOfMyBranch:NameOfMyBranch

현재 분기의 끝이 뒤에 있기 때문에 푸시가 거부되었습니다.

그런 상황이 닥쳤을 때, 그냥 도망쳤죠

git push -f origin main

그리고 그것은 끝났다.

권한에 따라 다릅니다.

메인 브랜치(마스터, 개발)에 직접 푸시할 수 있는 권한이 없을 수 있습니다.엔터프라이즈 프로젝트인 경우 자신의 토픽 분기를 리모트로 푸시하고 Merge Request(MR; 병합 요청)를 제출해야 합니다.

조직의 GitLab에서는 아무것도 작동하지 않았습니다.featureBranch에서 다음 명령을 사용하게 되었습니다.

기능 브랜치에서 다음 명령을 실행합니다.

git pull origin featureBranch --rebase

충돌이 있는 경우 충돌을 해결한 후 다음을 수행합니다.

git rebase --continue
Enter commit messages -> press ESC -> enter “:wq!” and enter
git push origin featureBranch

푸시되지 않은 새 파일이 커밋에 추가되어 있어야 합니다.파일을 확인하고 파일을 다시 누른 다음 풀/푸시를 시도합니다.

그건 작동할 것이다.이건 나한테 효과가 있었어...

위의 모든 답변을 시도했는데도 문제가 해결되지 않으면 푸시된 브랜치 이름이 고유하고 리모트에 존재하지 않는지 확인합니다.

오류 메시지가 잘못 표시될 수 있습니다.

커밋하려고 했던 브런치가 마스터의 서브브런치였기 때문에 (백레퍼런스 문제로) 먼저 저장소에서 삭제했습니다.그리고 다시 밀어보니까 다시 작동했어요!

주의: 첫 번째 브랜치를 삭제할 때 이전 푸시 변경은 모두 완료되었기 때문에 코드가 손실되지 않았습니다.

리모트 브랜치가 잠겨 있지 않은지 확인합니다.

이 문제는 Gitlab 파이프라인과 Github 액션이 릴리즈 중에 브랜치가 자동으로 통합되고 푸시되는 자동화된 환경에서만 발생하였습니다.지금까지 나에게 효과가 있었던 유일한 수동 솔루션은 동일한 변경으로 새 지점을 만들고 새 지점에서 파이프라인을 운영하는 것입니다.

Gitlab과 Github 파이프라인에서 영구 수정하는 방법을 아직 찾지 못했습니다.

로컬 마스터 브랜치: -> HEAD~N -> 갱신 및 신규 파일 (github에 푸시할 수 없습니다!)

github 마스터 브랜치: -> HEAD~N -> Forward New Commit 1 -> Forward New Commit 2 ...

Step1. HEAD로 리셋~N

$  git reset --soft HEAD~N

순서 2: Award New Commit 1 -> Award New Commit 2 ...를 풀합니다.로컬 마스터 브랜치로 전송

$  git pull origin master

먼저 리모콘에서 변경을 가져와야만 변경을 푸시할 수 있습니다.그렇게 하려면 , 커맨드를 작성할 필요가 있습니다.

git pull 

그 후 충돌을 발견하고 충돌을 해결한 후 명령어를 작성합니다.

git push

이 수정은 유효합니다.한번 시도해 보세요.리모콘의 경합으로 인해 코드를 푸시할 수 없는 것 같습니다.

언급URL : https://stackoverflow.com/questions/39399804/updates-were-rejected-because-the-tip-of-your-current-branch-is-behind-its-remot

반응형