자식에서 원산지 / 마스터의 위치를 ​​어떻게 찾을 수 있습니까? 어떻게 변경합니까?


227

나는 Git 초보자입니다. 최근에 Rails 프로젝트를 Subversion에서 Git으로 옮겼습니다. 나는 여기 튜토리얼을 따라 갔다 : http://www.simplisticcomplexity.com/2008/03/05/cleanly-migrate-your-subversion-repository-to-a-git-repository/

또한 unfuddle.com을 사용하여 코드를 저장하고 있습니다. 다음 명령을 사용하여 네트워크에 연결되어있을 때 기차에서 내 Mac 랩톱을 업무용 / 체크 아웃으로 변경 한 후 풀리도록 밀어 넣습니다.

git push unfuddle master

Capistrano를 배치에 사용하고 마스터 브랜치를 사용하여 언 플러드 저장소에서 코드를 가져옵니다.

최근에 랩톱에서 "git status"를 실행할 때 다음 메시지가 나타났습니다.

# On branch master
# Your branch is ahead of 'origin/master' by 11 commits.
#
nothing to commit (working directory clean)

그리고 나는 왜 혼란 스럽습니다. 내 노트북이 원산지라고 생각했지만 원래 Subversion에서 가져 왔거나 Unfuddle로 푸시했다는 사실이 메시지를 표시하는 원인인지 모르겠습니다. 내가 어떻게 할 수있는:

  1. Git이 '원산지 / 마스터'를 어떻게 생각하는지 알아?
  2. 그것이 다른 곳에 있다면, 어떻게 노트북을 '원산지 / 마스터'로 바꾸는가
  3. 이 메시지를 보내십시오. 그것은 Git이 무언가에 대해 불행하다고 생각하게 만듭니다.

내 Mac은 Git 버전 1.6.0.1을 실행 중입니다.


git remote show origindbr에서 제안한대로 실행 하면 다음과 같은 결과가 나타납니다.

~/Projects/GeekFor/geekfor 10:47 AM $ git remote show origin
fatal: '/Users/brian/Projects/GeekFor/gf/.git': unable to chdir or not a git archive
fatal: The remote end hung up unexpectedly

내가 실행하면 git remote -v아리스토텔레스 Pagaltzis에 의해 제안, 나는 다음을 얻을 :

~/Projects/GeekFor/geekfor 10:33 AM $ git remote -v
origin  /Users/brian/Projects/GeekFor/gf/.git
unfuddle    git@spilth.unfuddle.com:spilth/geekfor.git

흥미롭게도 geekfor디렉토리 에서 프로젝트를 진행하고 있지만 디렉토리 에서 내 원본은 로컬 컴퓨터라고 말합니다 gf. gfSubversion에서 Git으로 프로젝트를 변환 할 때 사용했던 임시 디렉토리 라고 생각 합니다. 그런 다음 나는 풀장에서 geekfor디렉토리 로 새로운 사본을 체크 아웃했다고 생각합니다 .

따라서 dbr의 조언을 따르고 해야하는 것처럼 보입니다.

git remote rm origin
git remote add origin git@spilth.unfuddle.com:spilth/geekfor.git

답변:


202

1. Git이 'origin / master'를 사용하고 있다고 생각하는 곳을 찾으십시오. git-remote

git remote show origin

.. 어떤 것을 반환 할 것입니다 ..

* remote origin
  URL: me@remote.example.com:~/something.git
  Remote branch merged with 'git pull' while on branch master
    master
  Tracked remote branch
    master

원격은 기본적으로 원격 저장소에 대한 링크입니다. 당신이 할 때 ..

git remote add unfuddle me@unfuddle.com/myrepo.git
git push unfuddle

..git은 추가 한 주소로 변경 사항을 푸시합니다. 원격 저장소의 책갈피와 같습니다.

를 실행 git status하면 원격에 커밋이 누락되었는지 (로컬 리포지토리와 비교하여) 커밋이 있는지 확인합니다. 모든 변경 사항을 "원본"으로 푸시하면 둘 다 동기화되므로 해당 메시지가 표시되지 않습니다.

2. 그것이 다른 곳에 있다면, 어떻게 노트북을 '원산지 / 마스터'로 바꾸는가

이 작업에는 아무런 의미가 없습니다. "원본"의 이름이 "노트북"으로 바뀌 었다고 말하지 마십시오.git push laptop 에서 .

원점 리모트를 제거하려면 다음을 수행하십시오.

git remote rm origin

파일 내용 / 수정 내역과 관련하여 아무 것도 삭제하지 않습니다. 더 이상 리포지토리를 원격 저장소와 비교하지 않기 때문에 "지점을 앞두고 .."메시지가 중지됩니다.

기억해야 할 한 가지는 특별한 것이 없다는 것입니다 origin. git이 사용하는 기본 이름 일뿐입니다.

Git은 또는 origin과 같은 일을 할 때 기본적으로 사용 합니다 . 따라서 리모컨이 많은 경우 많이 사용합니다 (귀하의 경우 Unfuddle). "ungin"을 "origin"으로 추가하는 것이 좋습니다.git pushgit pull

git remote rm origin
git remote add origin git@subdomain.unfuddle.com:subdomain/abbreviation.git

또는 set-url을 사용하여 하나의 명령으로 위의 작업을 수행하십시오.

git remote set-url origin git@subdomain.unfuddle.com:subdomain/abbreviation.git

그런 다음 대신 간단하게 수행 git push하거나 git pull업데이트 할 수 있습니다.git push unfuddle master


1
그는 origin저장소에 푸시한다고 썼는데 (git 용어로 어떻게 작동하는지 알지 못하더라도) 리모컨을 제거하는 것은 그에게 유용한 일이 아닐 것입니다.
아리스토텔레스 Pagaltzis

10
왜 사람들이 질문에 답을하는지 이해하지 못합니다. 그것은 질문의 의미를 바꾸고, 기존의 대답은 의미가 없으며, 다른 사람들에게 질문자가 약간 '올바르지 않다'는 사실에 기초하여 더 많은 정보가 필요하다는 것을 다른 사람들에게 알리지 않습니다.
stu

9
원격 근원을 제거했다 정확하게 는 더 이상하지 unfuddle 저장소를 존재하지 않는 로컬 저장소를 가리키는 때문에 내가 필요한 것.
브라이언 켈리

3
stu : Rewording은 좋은 것입니다! 그들이 먼저 말을하지 않았다면 실제 문제를 해결하지 못하는 답을 얻는 데 아무런 의미가 없습니다.
dbr

4
그러나 화를 내고 쓴 것은 훨씬 쉽습니다. :-) 그러나 나는 당신의 요점을 봅니다.
stu

286

나는이 질문에 git의 일반적인 체계에서 "당신의 지사가 앞서 나간다 ..."라는 메시지가 무엇을 의미하는지에 대한 설명을 찾아 보았다. 여기에는 그에 대한 답변이 없었지만이 질문은 현재 "귀하의 지점이 '원산지 / 마스터'보다 앞서 있습니다"라는 문구를 검색 할 때 Google 상단에 나타나기 때문에 그 메시지가 실제로 무엇을 의미하는지 알아 냈습니다. , 여기에 정보를 게시한다고 생각했습니다.

그래서 git 초보자이기 때문에 필요한 대답이 분명히 초보자 대답이라는 것을 알 수 있습니다. 특히 "지점을 앞두고 ..."라는 문구는 로컬 리포지토리에 추가하고 커밋 한 파일이 있지만 원본으로 푸시 한 파일이 없다는 것을 의미합니다. 이 메시지의 의도는 적어도 나에게는 "git diff"가 차이를 보이지 않았다는 사실에 의해 난독 화된다. "git diff origin / master"를 실행하기 전까지는 로컬 리포지토리와 원격 마스터 사이에 차이점이 있다고 들었습니다.

따라서 명확하게 :


"지점은 ..." => 원격 마스터로 푸시해야합니다. "git diff origin / master" 를 실행 하여 로컬 저장소와 원격 마스터 저장소의 차이점을 확인하십시오.


이것이 다른 초보자에게 도움이되기를 바랍니다.

또한 마스터가 실제로 "원격"이 아닐 수도 있고 "원점"이 컨벤션 등에 사용되는 재구성 가능한 이름과 같이이 솔루션을 부분적으로 무효화 할 수있는 구성 미묘함이 있음을 알고 있습니다. 우리는 간단하고 간단한 답변을 원합니다. 긴급한 문제를 해결 한 후에는 미묘한 부분에 대해 나중에 읽을 수 있습니다.)

백작


2
@Earl git diff --cached origin/master다음 푸시의 결과가 무엇인지 설명하므로 여기에 더 나은 지침이 아닐까요? 위에서 강조 표시된 명령은 커밋되지 않은 & 준비되지 않은 파일도 표시합니다 (저도 git 초보자입니다)
nhed

48
git fetcha 이후에이 오류가 발생하면 실행해야 할 수도 있습니다 git pull remote branch. 귀하의 심판이 구식 일 수 있습니다. git fetch그 수정.
브라이언 케네디

origin/master부분은 repo의 master분기를 의미 origin합니까?
Rakib

1
이 설명은 불완전합니다. 현재 경험하고 # On branch master # Your branch is ahead of 'origin/master' by 3 commits. 있지만 git diff origin / master는 아무 것도 표시하지 않습니다 (그리고 --cached 옵션은 이것을 변경하지 않습니다). 그리고 git fetch는 이것을 변경하지 않고 git pull은 이것을 변경하지 않으며 git reset --hard는 이것을 변경하지 않습니다. 이것을 변경하려면 다음이 필요했습니다 .git reset --hard origin / master 그리고 다른 사람들 이이 저장소에서 나와 함께 일하고 있고 테스트를 무효화하고 싶지 않고 이러한 커밋이 무엇인지 알 수 없기 때문에 해당 경로를 선택합니다 아르.
rdm

1
또한 원산지 / 마스터로 푸시하지 않고 가져와야 할 때이 메시지가 표시됩니다 . 예를 들어 git checkout master메시지를 받으면 다른 지점에서 git pull origin master작업하기 전에 해야합니다 . 그러나 메시지의 문구가 반대를 제안하기 때문에 매우 혼란스러워합니다.
Anentropic

38

내 작업 디렉토리가 ahead of origin by X commits있지만 그 git pull결과 와 비슷한 문제 가 발생했습니다 Everything up-to-date. 이 조언 에 따라 문제를 해결했습니다 . 비슷한 문제가있는 다른 사람을 돕기 위해 여기에 게시하고 있습니다.

기본 수정 사항은 다음과 같습니다.

$ git push {remote} {localbranch}:{remotebranch}

괄호 안의 단어는 원격 이름, 로컬 지점 이름 및 원격 지점 이름으로 대체해야합니다. 예 :

$ git push origin master:master

1
고맙습니다. git diff아무 것도 보여주지 않았고, 당신이 묘사 한 것을 한 후에 더 이상 혼란스럽고 성가신 메시지를 얻지 못했습니다.
LaundroMat

1
더 많은 투표가 필요합니다 :). 투표율이 높은 답변은 모두 나에게 "효과 없음"이었습니다 (예 : "git fetch"– 아무것도하지 않았습니다 ... "git remote show origin"을 확인하십시오-부정확 한 내용, 변화가 필요한 사항 없음)
Adam


10

내 노트북이 원산지라고 생각했는데…

이것은 무의미합니다. origin기본 원격 저장소 – 일반적으로 다른 사람들의 변경 사항을 가져 오거나 당기는 저장소입니다.

내가 어떻게 할 수있는:

  1. git remote -v무엇인지 보여줄 것 origin입니다. origin/master는 저장소 master지점의 마지막 알려진 상태에 대한 "책갈피" origin이고, 사용자 master는에 대한 추적 지점 입니다 origin/master. 이 모든 것이 있어야합니다 .

  2. 당신은하지 않습니다. 최소한 리포지토리가 기본 원격 리포지토리가되는 것은 의미가 없습니다.

  3. 그렇지 않습니다. 그것은 단지 원격 저장소에없는 (그 저장소의 마지막 알려진 상태에 따라) 로컬에서 너무 많은 커밋을했다는 것을 말해줍니다.


1
필자는 처음에 리포지토리 (원산지)를 만든 이후로 랩톱을 원산지로 가정했습니다.
브라이언 켈리

1
반면 origin오프라인 또는 네트워크 전환이 랩톱과 같은 휴대용 장치에 매우 일반적인 경우이기 때문에 로컬로 랩톱 을 가리키는 것은 완벽하게 의미가 있습니다. 당신이 사용할 수있는이 방법 git pushgit pull언제, 당신은 올바른 네트워크에 연결되어있는 경우에 대해 생각하는 필요가 없습니다. 이 로컬 origin은 현재 로밍 상태에 따라 네트워크 링크를 사용할 수있을 때 실제 리모컨과 자동으로 동기화 될 수 있습니다. 문제가되는 부분은 GIT 부분이 매우 쉽다는 것과 비교하여 어떤 동기화를 실행할지입니다.
티노

2
랩탑의 다른 저장소를 가리키는 origin것은 완벽합니다. 그러나 리포지토리 자체를 가리키는 것은 아닙니다. 리포지토리는 항상 정확하게 자체와 동기화되기 때문에 또는 실행 여부에 관계없이 차이가 없습니다 . 오류, 일종의 긴장 론입니다. origingit pushgit pull
아리스토텔레스 Pagaltzis

3

[ 해결책 ]

$ git push origin

^ 이것은 나를 위해 그것을 해결했다. 이 작업은 랩톱의 마스터와 원격 서버의 "원본"을 동기화했습니다.


1

나는이 문제로 어려움을 겪고 있으며 이전 답변 중 어느 것도 내가 본 질문을 다루지 않습니다. 문제를 명확하게 할 수 있는지 확인하기 위해 문제를 기본 사항으로 되돌 렸습니다.

새 저장소 (rep1)를 작성하고 하나의 파일을 넣고 커밋합니다.

mkdir rep1
cd rep1
git init
echo "Line1" > README
git add README
git commit -m "Commit 1"

rep1의 복제본을 만들어 rep2라고합니다. rep2 내부를 살펴보고 파일이 올바른지 확인하십시오.

cd ~
git clone ~/rep1 rep2
cat ~/rep2/README

rep1에서 파일을 한 번 변경하고 커밋합니다. 그런 다음 rep1에서 rep2를 가리키고 변경 사항을 푸시하는 리모컨을 만듭니다.

cd ~/rep1
<change file and commit>
git remote add rep2 ~/rep2
git push rep2 master

이제 rep2로 이동하여 'git status'를 수행하면 원점보다 앞서 있다는 메시지가 나타납니다.

# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   modified:   README
#

rep2의 README는 두 번째 커밋 이전의 원래 상태입니다. 내가 한 유일한 수정은 rep1에 대한 것이며 rep2로 밀어 내고 싶었습니다. 내가 파악하지 못하는 것은 무엇입니까?


1
rep2의 "origin / master"체크는 실제로 rep1을 보지 않습니다. rep2에서 'git pull'을 수행하면 동일한 상태에 있고 불평을 중지합니다. 작업 복사본에서 푸시로 인한 변경 사항을 실제로 보려면 'git checkout'을 수행해야합니다. 푸시는 dest repo의 작업 복사본을 건드리지 않습니다.
Walter Mundt

나는 그런 경우라고 생각했지만 "git checkout M README 당신의 브랜치는 1 커밋으로 '원점 / 마스터'보다 앞서 있습니다." 그러나 내 작업 사본은 실제로 1 커밋보다 뒤쳐져 있습니다.
Steve Hindmarch


1

최근 에이 문제가 있었고 더 이상 필요하지 않은 파일을 삭제했기 때문에 발생했습니다. 문제는 git이 파일이 삭제되었음을 알지 못하고 서버에 여전히 파일이 있음을 알 수 있다는 것입니다. (서버 = 원점)

그래서 나는 달렸다

git rm $(git ls-files --deleted)

그리고 커밋을 실행했습니다.

문제가 해결되었습니다.


1
이것은 커밋 메시지가
delete-

1

나는 자식 초보자이기도합니다. '당신의 브랜치가 N 커밋에 의해 출발지 / 마스터보다 앞서 있습니다.'메시지와 같은 문제가있었습니다. 제안 된 'git diff origin / master'를 수행하면 유지하지 않아도되는 몇 가지 차이점을 보여주었습니다. 그래서 ...

내 자식 복제본은 호스팅을위한 것이며 마스터 리포지토리의 정확한 사본을 원했고 로컬 변경 사항을 유지하지 않아도 되었기 때문에 전체 리포지토리를 저장하고 새 리포지를 생성하기로 결정했습니다.

(호스팅 머신에서)

mv myrepo myrepo
git clone USER@MASTER_HOST:/REPO_DIR myrepo

편의상 호스팅 시스템에서 클론을 변경했습니다. 더 이상은 없어. 마스터를 변경하고 git commit하고 git pull을 수행합니다. 바라건대, 이것은 호스팅 머신의 git clone을 완전한 동기화 상태로 유지해야합니다.

/ 나라


0

나는 내 레포에 대해 같은 것을 궁금해했다. 내 경우에는 더 이상 밀지 않는 오래된 리모컨이 있었으므로 제거해야했습니다.

리모컨 목록 가져 오기 :

git remote

필요없는 것을 제거하십시오

git remote rm {insert remote to remove}

0

자체 커밋이 발생하기 전에 특정 커밋으로 재설정 할 수 있습니다.

$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 2 commits.
#
nothing to commit (working directory clean)

git log로컬 변경이 이루어지기 전에 커밋이 무엇인지 확인하는 데 사용하십시오 .

$ git log
commit 3368e1c5b8a47135a34169c885e8dd5ba01af5bb
...
commit baf8d5e7da9e41fcd37d63ae9483ee0b10bfac8e
...

로컬 커밋을 기록하고 이전 커밋으로 직접 재설정하십시오.

git reset --hard baf8d5e7da9e41fcd37d63ae9483ee0b10bfac8e

-1

나는 "당신의 지점은 nn commits에 의해 'origin / master'보다 앞서 있습니다." 내가 원격 저장소에 푸시했을 때 :

git push ssh://git@xxx.repositryhosting.com/yyy/zzz.git

내 원격 주소가 .git / FETCH_HEAD 파일에 있고 다음을 사용했음을 발견했을 때 :

git push

문제가 사라졌습니다.

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