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


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.