힘내 푸시는 아무것도하지 않습니다 (모든 최신 상태)


100

GitHub에서 Git 저장소를 업데이트하려고합니다. 나는 많은 변경을 가하고 추가하고 커밋 한 다음 git push. 응답은 모든 것이 최신이라고 말하지만 분명히 그렇지 않습니다.

git remote show origin

내가 예상했던 저장소로 응답합니다.

저장소에 표시되지 않는 로컬 커밋이있을 때 Git에서 저장소가 최신 상태라고 말하는 이유는 무엇입니까?

  [searchgraph]  git status
# On branch develop
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       Capfile
#       config/deploy.rb
nothing added to commit but untracked files present (use "git add" to track)

  [searchgraph]  git add .

  [searchgraph]  git status
# On branch develop
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       new file:   Capfile
#       new file:   config/deploy.rb
#

  [searchgraph]  git commit -m "Added Capistrano deployment"
[develop 12e8af7] Added Capistrano deployment
 2 files changed, 26 insertions(+), 0 deletions(-)
 create mode 100644 Capfile
 create mode 100644 config/deploy.rb

  [searchgraph]  git push
Everything up-to-date

  [searchgraph]  git status
# On branch develop
nothing to commit (working directory clean)

답변:


142

git push모든 로컬 브랜치를 푸시하지 않습니다. 어떤 원격 브랜치를 푸시 할 것인지 어떻게 알 수 있습니까? 특정 원격 분기로 푸시하도록 구성된 로컬 분기 만 푸시합니다.

내 버전의 Git (1.6.5.3)에서 실행 git remote show origin하면 실제로 푸시를 위해 구성된 브랜치가 출력됩니다.

Local refs configured for 'git push':
  master pushes to master (up to date)
  quux   pushes to quux   (fast forwardable)

Q.하지만 master이 모든 것에 대해 걱정하지 않고 밀어 붙일 수 있습니다 !

이 때 git clone, 기본적으로 로컬 설정 master원격의에 밀어 분기 master지점 (로컬로 언급 origin/master만에 커밋 그래서 만약,) master, 다음 간단한 git push항상 다시 변경 사항을 밀어 것입니다.

그러나 게시 한 출력 스 니펫에서라는 브랜치에 있습니다.이 지점은 develop아무것도 푸시하도록 설정되지 않은 것 같습니다. 따라서 git push인수가 없으면 해당 분기에서 커밋을 푸시하지 않습니다.

"Everything up-to-date"라는 말은 "푸시 방법을 알려 주신 모든 브랜치가 최신 상태입니다"를 의미합니다.

Q. 커밋을 푸시하려면 어떻게해야합니까?

하고 싶은 것이에서 변경 사항을에 develop넣는 origin/master것이라면 아마도 로컬에 병합 master한 다음 푸시해야합니다.

git checkout master
git merge develop
git push             # will push 'master'

원하는 것이 develop원격에 분기 를 만들고 에서 분리 master한 다음에 인수를 제공하는 것입니다 git push.

git push origin develop

그것은 다음과 같습니다 :라는 원격지에 새 분기를 만듭니다 develop. 지역에 최신 해당 분기를 가져 develop가지; 세트 develop로 밀어 origin/develop, 그래서 미래에 git push인수가없는 것이다 밀어 develop자동으로.

로컬 develop을가 아닌 다른 지점 으로 푸시 하려면 develop다음과 같이 말할 수 있습니다.

git push origin develop:something-else

그러나이 양식 미래 develop에 항상 푸시하도록 설정 되지 않습니다origin/something-else . 그것은 원샷 작업입니다.


고마워요, 당신의 git push origin develop : something-else가 한동안 얻을 수 없었던 질문에 대한 답변을주었습니다.
Antroid 2017-04-13

1
제 경우 git push origin x에는 앞으로도 x 지점을 설정하지 않았습니다. .gitconfig [remote "origin"]섹션 의 특정 pushspec 으로 인해 git의 동작이 발생했습니다.
Raman

27

이것은 스테이징 중에 SourceTree 응용 프로그램이 충돌했을 때 나에게 발생했습니다. 그리고 명령 줄에서 이전 git add이 손상된 것처럼 보였습니다 . 이 경우 다음을 시도하십시오.

git init
git add -A
git commit -m 'Fix bad repo'
git push

마지막 명령에서 분기를 설정해야 할 수 있습니다.

git push --all origin master

분기 나 그런 종류의 작업을 수행하지 않은 경우이 정도면 충분합니다. 이 경우와 같은 올바른 분기로 푸시해야합니다 git push origin develop.


15

시험:

git push --all origin

이것은 한 분기에서 마스터로가 아니라 저장소에서 분기를 분리하도록 커밋을 푸시합니다.
Sreedevi J

13

마지막 커밋으로 이동 한 다음 수행하십시오 git push origin HEAD:master.


1
이것은 실제로 작동했습니다. 효과 가 있었 는지 설명 하시겠습니까 ?
René Nyffenegger

문서에서 텍스트 :Push the current branch to the remote ref matching master in the origin repository. This form is convenient to push the current branch without thinking about its local name.
uruapanmexicansong

나를 위해 일했습니다
Jerad Rutnam

내 저장소가 구성되고 모든 분기가 동일하게 보이는 방법을 비교했습니다. 그러나 한 브랜치에서는 단순히 다음을 사용할 수 없었습니다 git push. : / 이것은 나에게도 효과적 git push origin HEAD:my_branch_name이었습니다..
iaforek

6

제 경우에는 다른 솔루션이 작동하지 않았습니다. 새로 수정 된 파일 (로 표시됨 git status)을 백업 하고 git reset --hard. 이를 통해 원격 서버와 재정렬 할 수있었습니다. 새로 수정 된 파일 추가 및 실행

git add .
git commit -am "my comment"
git push

트릭을했습니다. 이것이 "마지막 기회"해결책으로 누군가에게 도움이되기를 바랍니다.


4

지금은 개발 브랜치에있는 것처럼 보입니다. 오리진에 개발 브랜치가 있습니까? 그렇지 않은 경우 git push origin develop. git push오리진의 개발 브랜치에 대해 알게되면 작동합니다.

더 읽으면서 git-push man 페이지 , 특히 예제 섹션을 살펴 보겠습니다.


3

구체적으로 말하면 마스터에 병합하려는 경우 아래 단계를 수행 할 수 있습니다.

git add --all // If you want to stage all changes other options also available
git commit -m "Your commit message"
git push // By default when it clone is sets your origin to master or you would have set sometime with git push -u origin master.

풀 요청 모델에서 새 로컬 브랜치를 생성 한 다음 해당 브랜치를 원격으로 푸시하는 것은 일반적인 관행입니다. 이를 위해 원격에서 변경 사항을 푸시 할 위치를 언급해야합니다. 푸시 할 때 리모컨을 언급하면됩니다.

git push origin develop // It will create a remote branch with name "develop".

로컬 브랜치 이름 이외의 브랜치를 생성하려면 다음 명령을 사용하면됩니다.

git push origin develop:some-other-name

2

Sam Stokes에게 감사합니다. 그의 대답에 따르면 다른 방법으로 문제를 해결할 수 있습니다 (나는 이렇게 사용했습니다). 개발 디렉토리를 업데이트 한 후 다시 초기화해야합니다.

git init

그런 다음 업데이트를 커밋하고 마스터에 푸시 할 수 있습니다.


1
감사! 제 경우에는 다음을 입력 git init하고 새 명령 탭을 열고 다음을 입력하십시오.git push origin branch_name
s7ven

2

이것은 GitHub ^C를 사용하는 도중에 나에게 일어났습니다 git push. 그러나 GitHub는 변경 사항이 있음을 보여주지 않았습니다.

이를 수정하기 위해 작업 트리를 변경하고 커밋 한 다음 다시 푸시했습니다. 완벽하게 잘 작동했습니다.


2

이것은 나에게 일어난 일입니다. 방금 변경 사항을 다시 커밋 한 다음 푸시했습니다.


2

여기에 정의 된 것을 포함하여 많은 방법을 시도했습니다. 내가 얻은 것은

  • 저장소 이름이 유효한지 확인하십시오. 가장 좋은 방법은 저장소 사이트에서 링크를 복사하여 git bash에 붙여 넣는 것입니다.

  • 선택한 파일을 커밋했는지 확인하십시오.

    git commit -m "Your commit here"
    
  • 두 단계가 모두 작동하지 않으면 시도해보십시오.

    git push -u -f origin master


1

대신 다음을 시도 할 수 있습니다. 당신은 갈 필요가 없습니다 master; 브랜치 자체에서 변경 사항을 직접 강제로 푸시 할 수 있습니다.

위에서 설명한 것처럼 리베이스를 수행하면 브랜치의 히스토리가 변경됩니다. 결과적으로 git push리베이스 후에 정상적인 작업을 시도 하면 서버의 커밋에서 브랜치의 커밋까지 직접 경로가 없기 때문에 Git에서이를 거부합니다. 대신 -f또는 --force플래그 를 사용하여 Git에 예, 수행중인 작업을 실제로 알고 있다고 알려야합니다. 강제 푸시를 수행 할 때 push.default구성 설정을 Git 2.0의 기본값 인 simple로 설정하는 것이 좋습니다 . 구성이 올바른지 확인하려면 다음을 실행하십시오.

$ git config --global push.default simple

정확하면 다음을 실행할 수 있습니다.

$ git push -f

그리고 풀 요청을 확인하십시오. 업데이트해야합니다!

자세한 내용 은 풀 요청을 리베이스하는 방법의 맨 아래로 이동 하십시오.



0

이것은 새 브랜치에서 푸시를 시도하고 git push origin master대신 사용했을 때 나에게 발생했습니다 . 다음 중 하나를 수행해야합니다.

  • 사용 : git push origin your_new_branch이 분기가 원격 저장소에서도 발생하도록하려면.
  • 그렇지 않으면 마스터 브랜치에서 병합 한 다음 git merge origin master.

요약 : 여기서 요점 은 git merge 에 대한 두 번째 매개 변수 에서 제공하는 위치를 확인해야한다는 것 입니다. 따라서 마스터에있는 경우 마스터를 두 번째 매개 변수로 사용하십시오. new_branch에있는 경우이 분기를 두 번째 매개 변수로 사용하십시오.이 분기를 원격 저장소에 유지하려면 대신 위의 두 번째 옵션을 선택하십시오.


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