git push는 로컬 변경 사항이 있어도“최신 정보”라고 말합니다.


238

원격 gitosis 서버와 로컬 git 저장소가 있으며 코드를 크게 변경할 때마다 변경 사항을 해당 서버로 푸시합니다.

그러나 오늘 로컬 변경 사항이 있고 로컬 리포지토리에 커밋하더라도 git push origin master'모든 것이 최신'이라고 표시되지만 git clone원격 서버에서 파일을 체크 아웃 하는 데 사용 하면 최신 변경 사항이 포함되어 있지 않습니다. . 그리고 "master"라는 하나의 지점과 "origin"이라는 하나의 원격 서버 만 있습니다.

추신 : 이것은 실행할 때 git이 표시하는 것입니다 ls-remote, 그것이 도움이되는지 확실하지 않습니다.

$ git ls-remote origin
df80d0c64b8e2c160d3d9b106b30aee9540b6ece        HEAD
df80d0c64b8e2c160d3d9b106b30aee9540b6ece        refs/heads/master
$ git ls-remote .
49c2cb46b9e798247898afdb079e76e40c9f77ea        HEAD
df80d0c64b8e2c160d3d9b106b30aee9540b6ece        refs/heads/master
df80d0c64b8e2c160d3d9b106b30aee9540b6ece        refs/remotes/origin/master
3a04c3ea9b81252b0626b760f0a7766b81652c0c        refs/tags/stage3


올바른 디렉토리에 있는지 다시 확인해야합니다! Esp. 서브 모듈이있을 때 부모로부터 자식 응답을 착각 할 수 있습니다.
geotheory

내 경우에는 내가 commit알지 못하고 코드를 푸시하려고 시도하는 동안 오류가 발생했습니다
Zohab Ali

3
커밋을 잊었습니까?
ldgorman

답변:


256

우연히 분리 된 헤드 로 작업하고 있습니까?

에서처럼 :

분리 된 헤드

최근 커밋이 브랜치 헤드가 아님을 나타냅니다.

경고 : 다음은 다음을 수행합니다 git reset --hard. git stash현재 수정 된 파일을 저장 하려면 먼저 사용 하십시오.

$ git log -1
# note the SHA-1 of latest commit
$ git checkout master
# reset your branch head to your previously detached commit
$ git reset --hard <commit-id>

git checkout맨 페이지 (강조 광산)에 언급 된 바와 같이 :

브랜치 중 하나의 끝에없는 커밋체크 아웃하는 것이 유용 할 때가 있습니다 .
가장 확실한 예는 다음과 같이 태그가 지정된 공식 릴리스 지점에서 커밋을 확인하는 것입니다.

$ git checkout v2.6.18

자식의 이전 버전이 가능하고 사용하며 임시 지점 생성을 요청하지 않았다 -b옵션을하지만, 버전 1.5.0에서 시작하여, 위의 명령은 당신을 분리 HEAD이 태그에 의해 명명 커밋에서 직접 지점을 현재의 지점에서과 ( v2.6.18에 위의 예).

이 상태에서 모든 자식 명령을 사용할 수 있습니다. 예를 들어 추가 이동을 위해
사용할 수 있습니다 git reset --hard $othercommit.
분리 된 HEAD 위에서 변경 사항을 작성하고 새 커미트를 작성할 수 있습니다 .
를 사용하여 병합을 만들 수도 있습니다 git merge $othercommit.

HEAD가 분리되어있는 동안의 상태는 분기에 의해 기록되지 않습니다 (자연 스럽지만 분기가 없습니다).
이것이 의미하는 바는 기존 분기 (예 :)로 전환하여 임시 커밋 및 병합을 버리고git checkout master 나중에 git prune또는 git gc가비지 수집 할 수 있다는 것입니다.
실수로이 작업을 수행 한 경우 예를 들어 HEAD에 대한 리플 로그를 요청할 수 있습니다. 예 :

$ git log -g -2 HEAD

4
내가 어떻게이 상태에 들어 갔는지 (현재 git-svn으로 일부 멍청이를하는) 방법은 완전히 명확하지 않지만, 이것은 나를 올바른 장소로 데려 가기에 충분했습니다. 감사.
Christopher Schmidt

나는 분리 된 헤드 상태에 있고, 변경 사항을 병합하고, 변경 사항을 커밋했으며 이제 이것을 마스터에게 푸시하고 싶지 않습니다. "모든 것이 최신 상태입니다". 그러나 나는 Gitlab이 제공 한 지침을 따르고 있습니다 : Step 1: git fetch origin git checkout -b "nodeAPI" "origin/nodeAPI" Step 2. Review the changes locally Step 3. Merge and fix conflicts git fetch origin git checkout "origin/master" git merge --no-ff "nodeAPI" Step 4. Push the result of the merge to GitLab git push origin "master" 나는 마지막 단계까지 좋습니다. 그러나 이제는 앞으로 나아가는 방법이 혼란 스럽습니다.
John

@John 푸시하려면 지점에 있어야합니다. HEAD 모드가 분리되어 있으면 작동하지 않습니다. 지점을 현재 위치로 재설정 한 다음 해당 지점을 git branch -f myBranch HEAD체크 아웃하고 밉니다. 귀하의 경우 에는 병합하는 myBranch중일 수 있습니다 . masternodeAPI
VonC

이 명령을 실행 한 후 모든 로컬 변경 사항을 잃어 버리지 않도록주의하십시오 !! 이와 같은 작업을 수행하기 전에 자식 숨김 및 코드 백업을 고려하십시오.
kta

@ kta 좋은 지적 : 경고를 보이게하기 위해 답변을 편집했습니다.
VonC

152

Err .. 만약 당신이 git noob이라면 당신은 당신이 git commit전에 있는지 확실 git push합니까? 나는이 실수를 처음으로했다!


10
그것은이었다 git commit -a -m "your message goes here"내 경우
aexl

나는 때때로 github에 새로운 프로젝트를 추가하고 싶을 때마다 (sarcasm)을 좋아하고 때로는 잊어 버리고 오류 메시지로 인해 내가 정말로 잘못했다고 생각하게됩니다-물론 물론 DUH! 나는 새 백업 저장소를 생성하고 경우에만 나에게 일어나는 커밋 나는 잊지
톰 Stickel

git noob
here-

2
@FoxMcCloud 커밋이 의식하는 중요한 단계이다, 나는 당신이 이미 : ~하지 않은 경우 당신이 그것을 사랑을 배울 거라고 확신 git add -A, git diff --staged, 변화를 통해 스크롤 찾고 흠, 아주 좋은 git commit -m 'bam!',git push
AFOC

58

아마도 당신은 새로운 지역 지점을 추진하고 있습니까?

새 로컬 브랜치는 명시 적으로 푸시해야합니다.

git push origin your-new-branch-name

git에 관한 것 중 하나 일뿐입니다. 당신은 리포지토리를 복제하고, 브랜치를 만들고, 약간의 변화를 저지르고, "모든 것이 최신입니다". 왜 그런지 이해하지만이 워크 플로는 새로 온 사람들에게는 매우 비우호적입니다.


3
감사! 이것은 내가 가진 새로운 브랜치로 "모든 것의 최신"문제를 해결했습니다
Pangu

도대체 "새 지점 이름"이란 무엇입니까? 추신 : 당신은 새로운 이민자에 대해 너무 soooo입니다.
www-0av-Com

@ user1863152는 생성 한 새 로컬 지점의 이름입니다. 그렇게하지 않은 것처럼 들리므로 여기에서 다른 답변을 확인하십시오.
로마 Starkov

"이 워크 플로우는 초보자에게 매우 비우호적입니다"라는 것에 전적으로 동의합니다. 나는 1 시간 이후로 이것으로 고투하고 있습니다. 원격 및 로컬 저장소를 설정했습니다. 로컬 REAME 파일을 변경하여 원격으로 푸시하려고 시도했지만 원격에서는 변경되지 않았습니다.
Vir


28

알아 두어야 할 또 다른 상황 : git의 기본 상태는 "마스터"브랜치에서 작업하고 있다는 것입니다. 그리고 많은 상황에서, 당신은 (일부 사람들은 공상을 입히고 다른 일을하더라도) 당신의 주요 작업 지점으로 그만 두게 될 것입니다.

어쨌든, 그것은 단지 하나의 지점입니다. 그래서 내가 들어갈 수있는 상황은 다음과 같습니다.

내 활성 지점은 실제로 마스터 지점이 아닙니다. ...하지만 습관적으로 명령을 수행합니다. git push(이전에 수행 git push origin master했으므로 THAT의 바로 가기입니다.)

그래서 나는 습관적으로 마스터 브랜치를 공유 리포지토리로 밀고 있습니다 ... 내 경우에는 좋은 청소 일 것입니다 ...

그러나 나는 내가하고있는 변경 사항이 아직 마스터 브랜치에 있지 않다는 것을 잊었다.

따라서 내가 시도 할 때마다 git push"모든 것이 최신 상태"인 것을 볼 때 나는 비명을 지르고 싶지만 물론 자식의 잘못이 아닙니다! 내 것이다.

대신 지점을 마스터로 병합 한 다음 푸시하고 모든 것이 다시 행복합니다.


나도 비명을 원하지만, 당신은 다음 마스터로 브랜트을 병합하고, 구원의 길을 전파 git push.
Aaron C

16
$ git push origin local_branch:remote_branch

설명

나는 같은 오류가 있었고 그것을 알아 내려고 몇 시간을 보냈다. 마침내 나는 그것을 발견했다. 내가 몰랐던 것은git push origin branch-x 로컬에서 x 지점을 검색 한 다음 원격 branch-x로 푸시하려고한다는 것입니다.

제 경우에는 두 개의 원격 URL이있었습니다. y를 x 원격으로 로컬로 푸시하려고 할 때 branch-x 에서 branch-y 로 체크 아웃했습니다. 모든 것이 최신 상태라는 메시지가 나타났습니다.

이런 종류의 함정에 빠지지 않기 위해 간단히 이야기하면 소스 참조와 대상 참조를 지정해야합니다.

$ git push origin local_branch:remote_branch

최신 정보:

지점을 누를 때마다이 명령을 실행해야하는 경우 다음을 사용하여 로컬 및 원격 지점간에 업스트림을 설정해야합니다.

$ git push --set-upstream origin local_branch:remote_branch

또는

$ git push -u origin local_branch:remote_branch

'git push upstream dev : master'즉, 소스를 dev에서 master로 푸시합니다. 권리?
Dhaduk Mitesh

이것은 저에게 도움이되었습니다. 원격 지사라는 다른 지사를 가지고있어 혼란을 일으켰습니다.
휴 버트 쿠비 아크

좋아, 이것은 분명히 나를 위해 일하고 있지만 리모콘에 무언가를 밀어 넣고 싶을 때 마다이 작업을 수행해야합니다. 한 번에 해결하려면 어떻게해야합니까?
사무라이 잭

다음을 사용하여 로컬 및 원격 지점 사이에 업스트림을 설정해야 할 수도 있습니다. $ git push --set-upstream origin local_branch : remote_branch
Melchia

6

위의 VonC의 답변을 참조하십시오-추가 단계가 필요했습니다.

$ git log -1
- note the SHA-1 of latest commit
$ git checkout master
- reset your branch head to your previously detached commit
$ git reset --hard <commit-id>

나는 이것을했지만, 시도 할 때 git push remoterepo master, "오류 : 일부 심판을 푸시하지 못했습니다. 당신이 기록을 잃지 않도록 빨리 감기가 아닌 업데이트는 거부되었습니다. 먼저 원격 변경 사항 (예 : 'git pull')을 병합하십시오 다시 밀어 붙입니다. "

그래서 'git pull remoterepo master'를했는데 충돌이 발견되었습니다. 내가 그랬어 git reset --hard <commit-id>, 백업 폴더에 충돌 파일을 복사, 다시 않았다 git pull remoterepo master다시 복사 충돌 파일은 내 프로젝트에 백업, 한 git commit다음 git push remoterepo master,이 시간을 일했다.

힘내는 '모든 것이 최신이다'는 말을 멈추었고 '빨리 감기'에 대한 불평을 중단했다.


3

나는 비슷한 상황에 직면했다. 내가 변경을 시도했을 때 git push origin master모든 것이 최신 상태였습니다.

나는 git add변경된 파일을 가지고 가야했다 git push origin master. 그때부터 일을 시작했습니다.


4
git commit푸시하기 전에 추가 된 파일 이 필요하지 않습니까?
David Harkness

3

당신의 자식 상태에서, 당신은 아마 내 상황과 다른 상황을 가지고있을 것입니다.

그러나 어쨌든, 여기에 나에게 일어난 일이 있습니다. 다음과 같은 오류가 발생했습니다.

fatal: The remote end hung up unexpectedly
Everything up-to-date

더 유익한 메시지는 리모콘이 전화를 끊었다는 것입니다. http post 버퍼 크기를 초과했기 때문입니다. 해결책은

git config http.postBuffer 524288000


3

나는 오늘이 문제를 겪었고 다른 답변과 관련이 없었습니다. 여기 내가 한 일과 내가 고친 방법이 있습니다.

최근에 저의 저장소가 이사했지만 로컬 사본이있었습니다. 로컬 "마스터"지점에서 분기하여 일부 변경을 수행 한 후 리포지토리가 이동했음을 기억했습니다. 예전 git remote set-url origin https://<my_new_repository_url>에는 새 URL을 설정했지만 새 지점을 마스터로 푸시하는 대신 "모든 것이 최신 상태"라고 표시했습니다.

나는 origin/master다음과 같이 명시 적 브랜치 이름을 기반으로 한 다음 푸시하여 문제를 해결했습니다 .

$ git rebase <my_branch> origin/master
$ git push origin <my_branch>

이것이 동일한 문제가있는 사람에게 도움이되기를 바랍니다.


3

매우 드문 경우이지만 여전히 : Windows의 경우 압축 참조 에는 문자 대소 문자가 하나 인 분기 (예 : dev / mybranch)가 있고 refs 폴더에는 core.ignorecase가 true로 설정된 경우 다른 경우 (예 : Dev / mybranch)가있을 수 있습니다. .

해결책은 포장 참조 에서 관련 행을 수동으로 삭제하는 것 입니다. 더 깨끗한 해결책을 찾지 못했습니다.


그것은 나에게도 문제였다. .git 폴더 내부의 대소 문자가 잘못된 폴더 이름 바꾸기 (로그 / 참조 / 헤드, 참조 / 헤드)로 끝났습니다.
Alexey Solonets

2

Github에 지점을 병합하고 로컬에서 계속 개발 하면서이 문제가 발생했습니다. 내 수정은 제안 된 다른 것과 약간 다릅니다.

먼저 이전 로컬 지점에서 새 로컬 지점을 분기했습니다 (누를 수 없었습니다). 그런 다음 새 로컬 지점을 원본 서버 (Github)로 푸시했습니다. 즉

$ git checkout -b newlocalbranch oldlocalbranch
$ git push origin newlocalbranch

이전 로컬 브랜치가 아닌 새 로컬 브랜치에도 불구하고 Github에 변경 사항이 표시되었습니다.


2

제 경우에는 2 개의 원격 저장소가있었습니다.

git remote -v
originhttps https://asim_kt@...
originhttps https://asim_kt@...
origin  ssh:git@bitbucket.org:...
origin  ssh:git@bitbucket.org:...

두 저장소는 동일했습니다. 하나는 https다른 사람이었습니다 ssh. 따라서 원하지 않는 것을 제거하면 (제 경우 에는 작동하지 않았기 때문에 ssh사용 https했기 때문에 ssh!) 문제가 해결되었습니다.


2

내 실수는 지금까지 언급 한 모든 것과 다릅니다. 왜 머리가 분리되어 있는지 모를 경우에는 없을 것입니다. 나는 함께 자동 조종 장치에 일하고 git commitgit push,와의 출력을 읽을 수 있었다 git commit. -am을 잊었 기 때문에 오류 메시지였습니다.

[colin] ~/github/rentap.js [master] M % git commit 'figured out some more stuff with the forms in views and started figuring out row and mode in models so also made matching routes and controllers'
error: pathspec 'figured out some more stuff with the forms in views and started figuring out row and mode in models so also made matching routes and controllers' did not match any file(s) known to git.
[colin] ~/github/rentap.js [master] M % git push
Enter passphrase for key '/home/colin/.ssh/id_ecdsa': 
Everything up-to-date

-am내가 보통 하는 곳에 두어 문제를 해결했습니다 .

[colin] ~/github/rentap.js [master] M % git commit -am 'figured out some more stuff with the forms in views and started figuring out row and mode in models so also made matching routes and controllers'

2

나는 같은 문제에 직면했다. 준비 영역에 변경 사항을 추가하지 않았으므로. 그리고 직접 명령을 사용하여 코드를 원격 저장소로 푸시하려고했습니다.

git push origin master

그리고 메시지를 보여줍니다 Everything up-to-date.

이 문제를 해결하려면 다음 단계를 시도하십시오

  1. git add .
  2. git commit -m "Bug Fixed"
  3. git push -u origin master

1

원격 URL을 손상시키지 않았는지 확인하십시오.

로컬 Jenkins 빌드 구성에서 Git을 CVS로 활성화 한 후 이것에 부딪쳤다 고 언급하고 싶었습니다. Jenkins는 내가 준 지점의 가장 최근 커밋을 확인하고 리포지토리에 준 경로에 따라 리모컨을 재설정 한 것으로 보입니다. 기능 지점을 다시 체크 아웃하고 'git remote set-url'로 내 원점 원격 URL을 수정해야했습니다. 작업 도구를 빌드 도구로 지정하지 마십시오. 그렇지 않으면 시간이 오래 걸립니다. 리모컨은 작업 디렉토리의 파일 경로로 설정되었으므로 동일한 소스 및 대상으로 변경 사항을 푸시하려고 할 때 모든 것이 최신 상태로 자연스럽게보고되었습니다.


1

또 다른 가능성은 .gitignore 파일에서 제외 된 디렉토리의 이름을 지정했을 수 있습니다. 따라서 새로운 커밋은 푸시되지 않습니다. "검색"을 무시하도록 디렉토리 이름을 지정했지만 소스 트리의 디렉토리이기도합니다.


1

내가 찾은 빠른 방법이 있습니다. .git 폴더로 이동하여 HEAD파일을 열고 마스터로 되 돌린 분기를 변경하십시오. 예 : 심판 :refs/heads/master


실제로 refs/heads/master내 저장소 를 파기 하도록 설정했습니다 . 그러나 HEAD 커밋이라고 생각한 것으로 설정하면 다음과 같은 메시지가 나타납니다 Warning: you are leaving 1 commit behind, not connected to any of your branches. 커밋을 새로운 브랜치로 가져 가서 마스터로 다시 병합 할 수있었습니다.
schmijos

1

나는 같은 문제가 있었다. 제 경우에는 동일한 리모컨의 이름을 지정해야했기 때문에 발생했습니다. 표준 'origin'을 만들었지 만 오랫동안 'github'을 리모컨으로 사용하고 있습니다. '원점'원격을 제거하자마자 오류가 사라졌습니다.


1

나는 이것이 일어 났고 (git 로그의 커밋은 git이 모든 것이 최신이라고 말했지만 GitHub에 없었습니다) 문제가 Github이라고 확신합니다. git에 오류 메시지가 나타나지 않았지만 GitHub에 상태 오류가 있었고 몇 시간 후에 커밋이있었습니다.

https://status.github.com/messages

GitHub 상태 메시지는 다음과 같습니다.

  • 서비스 사용 불가 보고서를 조사 중입니다.
  • GitHub.com에 액세스하는 데 문제가있는 것으로 조사되었습니다.
  • GitHub.com에 대한 액세스를 복원하기 위해 데이터 스토리지 시스템을 장애 조치하고 있습니다.

1

내 또 다른 매우 간단하면서도 엉뚱한 실수 : 나는 -m커밋에 메시지 수정자를 추가하는 것을 잊어 버렸습니다 . 그래서 나는 썼다 :

git commit 'My message'

올바른 대신 :

git commit -m 'My message'

참고 : 오류가 발생하지 않습니다! 그러나 커밋을 추진하고 항상 Everything up to date대신 얻을 수는 없습니다.


0

여기에서 내 솔루션은 위와 다릅니다. 이 문제가 어떻게 발생하는지 알지 못했지만 해결했습니다. 조금 예기치 않게.

이제 방법이 온다 :

$ git push origin  use_local_cache_v1
Everything up-to-date
$ git status
On branch test
Your branch is ahead of 'origin/use_local_cache_v1' by 4 commits.
  (use "git push" to publish your local commits)
  ......
$ git push
fatal: The upstream branch of your current branch does not match
the name of your current branch.  To push to the upstream branch
on the remote, use

    git push origin HEAD:use_local_cache_v1

To push to the branch of the same name on the remote, use

    git push origin test
    
$ git push origin HEAD:use_local_cache_v1    
Total 0 (delta 0), reused 0 (delta 0)
remote:

나를 위해 일하는 명령은

$git push origin HEAD:use_local_cache

(가급 한 빨리이 문제에서 벗어나기를 바랍니다)


0

나는 그것이 오래되었다는 것을 알고 있지만, 제 경우에는 매우 빨리 고쳤습니다.

나는 하나의 커밋보다 앞서 같은 오류가 발생했습니다 master. 그런 다음 현재 스택 오버플로 게시물을 찾았습니다. 그러나 제안 된 아이디어를 진행하기 전에 새로운 커밋을하고 원점 푸시로 다시 시도하기로 결정했으며 원활하게 작동했습니다.

이유를 모르겠지만 다른 사람에게 유용 할 수 있습니다.


실제로 질문에 대한 답변을 제공하지는 않습니다. 당신이되면 얻을 만큼 명성을 , 당신은 할 수있는 권한 얻을 것입니다 답변을 upvote에 좋아하세요. 이런 식으로 향후 질문 방문자는 해당 답변에 대해 더 많은 투표를 보게되며, 답변자에게는 평판 포인트가 제공됩니다. 투표가 중요한 이유를 참조하십시오 .
Waqar UlHaq

1
알겠습니다. 설명해 주셔서 감사합니다. 그러나 왜이 문제를 "해결책"으로 간주 할 수 없습니까? 그것은 해결책이 아니지만 어쨌든 다른 사람들에게 유용 할 수 있습니다.
시스코

0

또 다른 가능성은 푸시하려는 디렉토리에 영향을 미치지 않는 커밋이 있다는 것입니다. 그래서 내 경우에는 다음과 같은 구조를 가졌습니다.

- .git
- README.md
- client/
 - package.json
 - example.js
- api/
 - requirements.txt
 - example.py

그리고 나는 수정을 마스터하기 README.md로 결심 한 다음 git subtree push --prefix client heroku-client master메시지 를 실행 하고 받았습니다.Everything up-to-date


0

이기만 적인 오류가 발생했을 때 Jupyter-Notebook 을 사용하고 있었습니다 .

나는 어느 쪽도 없었다로서 상기 제공하는 솔루션을 통해 해결할 수 없었다 분리 된 머리 도 내가 가진 한 다른 이름 제에 대한 지역원격 REPO를.

그러나 내가 가진 것은 파일 크기가 1MB 보다 약간 크고 최대 크기는 거의 ~ 2MB 였습니다. 사용하여 파일 크기를 줄였습니다.iPython 노트북 어떻게 줄일 수 있습니까?를 줄였습니다.기술. 출력을 삭제하여 파일 크기를 줄이는 데 도움이되었습니다. 파일을 KB 단위로 가져 왔으므로 코드를 푸시 할 수있었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.