카테고리 보관물: git

git

GitHub에 푸시 할 수 없음-병합 필요를 계속 표시

GitHub를 처음 사용합니다 . 오늘 코드를 GitHub에 푸시하려고 할 때 문제가 발생했습니다.

Pushing to git@github.com:519ebayproject/519ebayproject.git
To git@github.com:519ebayproject/519ebayproject.git
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'git@github.com:519ebayproject/519ebayproject.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Merge the remote changes (e.g. 'git pull')
hint: before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

아직 저장소에 아무것도 넣지 않았으므로 왜 무언가를 가져와야합니까?



답변

이로 인해 원격 저장소가 커밋을 잃을 수 있습니다. 조심해서 사용하십시오.

원격 브랜치를 로컬 브랜치에 병합하지 않고 ( git diff 와의 차이점 참조 ) 강제 푸시를 수행하려면 push 명령을 -f와 함께 사용하십시오.

git push -f origin <branch>

어디에서 원격 저장소 origin의 이름입니다 .

일반적으로이 명령은 덮어 쓰기에 사용 된 로컬 참조의 조상이 아닌 원격 참조 업데이트를 거부합니다. 이 플래그는 검사를 비활성화합니다. 이로 인해 원격 저장소가 커밋을 잃을 수 있습니다. 조심해서 사용하십시오.


답변

메시지에서 알 수 있듯이

원격 변경 사항 병합 (예 : ‘git pull’)

git pull원격 저장소에서 로컬 저장소로 최신 변경 사항을 가져 오는 데 사용하십시오 . 이 경우 로컬 리포지토리를 변경 했으므로 변경 내용을 가져 오려면 병합이 필요합니다.

설명 할 예제와 그림을 제공하겠습니다. 출발지 / 지점에서 마지막으로 가져간 것이 커밋 B에 있다고 가정합니다. 일부 작업을 완료하고 커밋했습니다 (커밋 C). 동시에 다른 누군가가 작업을 완료하고 원산지 / 지점으로 옮겼습니다 (커밋 D). 이 두 가지간에 병합이 필요합니다.

local branch:                         --- Commit C
                                    /
                                   /
                                  /
origin/branch: Commit A ------ Commit B ---- Commit D

푸시하려는 사람이기 때문에 Git은 강제로 병합을 수행합니다. 이렇게하려면 먼저 출발지 / 분기에서 변경 사항을 가져와야합니다.

local branch:                         --- Commit C -- Commit E
                                    /               /
                                   /               /
                                  /               /
origin/branch: Commit A ------ Commit B ---- Commit D

병합을 완료 한 후에는 변경 사항을 푸시하여 원산지 / 분기를 커밋 E로 빨리 감을 수 있습니다.

Git은 병합이 충돌을 일으킬 수 있으므로 병합을 직접 처리해야합니다.


답변

푸시하기 전에 코드를 업데이트 했습니까?

git pull origin master아무것도 밀기 전에 사용하십시오 .

나는 당신이 origin당신의 리모컨의 이름 으로 사용한다고 가정합니다 .

다른 사람이 이미 코드를 업데이트 한 경우를 대비하여 무언가를 푸시하기 전에 로컬 저장소를 최신 상태로 유지하려면 푸시하기 전에 가져와야합니다 github.com. 이는 로컬에서 충돌을 해결하는 데 도움이됩니다.


답변

이것은 일반적으로 다른 누군가가 이미 변경 한 지점 에서 변경을 git commit시도 할 때 발생합니다 .git pushgit pullingx

정상적인 흐름은 다음과 같습니다.

1 단계 : git stash해당 지점에서 커밋되지 않은 로컬 변경 사항

2 단계 : git pull origin branch_name -vpull and merge해당 분기에 로컬로 최선을 다하고 변화 ( 이 병합에게 어떤 메시지를주고, 수정 충돌이있는 경우. )

3 단계 : ED 변경 ( 당신이 원하는 또는 첫번째) 커밋 변경 (STEP4 이미 밀어 나중에 파일에 커밋 새로운 만들 경우에 당신은 터진 파일에 커밋을 만들 수 있습니다. )git stash popstash

4 단계 : git push origin branch_name -v병합 된 변경 사항

교체 branch_name와 함께 master(대한 master지점).


답변

첫 번째 간단한 솔루션 (권장하지 않음)

  • 이 명령을 사용해보십시오 git push -f origin master.
  • 이 명령은 원격 저장소 (GitHub)를 강제로 덮어 씁니다.

권장 솔루션

  • 다음 명령을 실행하십시오.
git pull --allow-unrelated-histories  //this might give you error but nothing to worry, next cmd will fix it
git add *
git commit -m "commit message"
git push

이것이 작동하지 않으면 ?를 따르십시오.

  • .git폴더에서 디렉토리를 삭제 하십시오.
  • 그런 다음 다음 명령을 실행하십시오.

    git init
    git add .
    git commit -m "First Commit"
    git remote add origin [url]
    git push -u origin master
    

또는

git push -f origin master

당신을 위해 작동하지 않는 git push -f origin master경우 에만 사용 -u하십시오.

이렇게하면 파일을 푸시하는 동안 발생하는 거의 모든 종류의 오류가 해결됩니다.


답변

때때로 우리는 당기기를 잊고 지역 환경에서 많은 일을했습니다.

누군가가 당기지 않고 밀고 싶다면

git push --force

작동합니다. 다른 사람과 함께 작업 할 때는 권장하지 않지만 작업이 간단한 일이거나 개인 장난감 프로젝트 인 경우 빠른 솔루션이됩니다.


답변

Git이 푸시하려는 브랜치를 모르기 때문에 일부 사용자에게이 오류가 발생할 수 있습니다.

오류 메시지에 다음이 포함 된 경우

error: failed to push some refs to 'git@github.com:jkubicek/my_proj.git'
hint: Updates were rejected because a pushed branch tip is behind its remote
hint: counterpart. If you did not intend to push that branch, you may want to
hint: specify branches to push or set the 'push.default' configuration
hint: variable to 'current' or 'upstream' to push only the current branch.

그런 다음 Jim Kubicek의 편리한 팁 ( 현재 분기 만 푸시하도록 Git 구성 )을 따라 기본 분기를 현재로 설정하십시오.

git config --global push.default current