나는 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로 푸시했다는 사실이 메시지를 표시하는 원인인지 모르겠습니다. 내가 어떻게 할 수있는:
- Git이 ‘원산지 / 마스터’를 어떻게 생각하는지 알아?
- 그것이 다른 곳에 있다면, 어떻게 노트북을 ‘원산지 / 마스터’로 바꾸는가
- 이 메시지를 보내십시오. 그것은 Git이 무언가에 대해 불행하다고 생각하게 만듭니다.
내 Mac은 Git 버전 1.6.0.1을 실행 중입니다.
git remote show origin
dbr에서 제안한대로 실행 하면 다음과 같은 결과가 나타납니다.
~/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
. gf
Subversion에서 Git으로 프로젝트를 변환 할 때 사용했던 임시 디렉토리 라고 생각 합니다. 그런 다음 나는 풀장에서 geekfor
디렉토리 로 새로운 사본을 체크 아웃했다고 생각합니다 .
따라서 dbr의 조언을 따르고 해야하는 것처럼 보입니다.
git remote rm origin
git remote add origin git@spilth.unfuddle.com:spilth/geekfor.git
답변
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 push
git 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
답변
나는이 질문에 git의 일반적인 체계에서 “당신의 지사가 앞서 나간다 …”라는 메시지가 무엇을 의미하는지에 대한 설명을 찾아 보았다. 여기에는 그에 대한 답변이 없었지만이 질문은 현재 “귀하의 지점이 ‘원산지 / 마스터’보다 앞서 있습니다”라는 문구를 검색 할 때 Google 상단에 나타나기 때문에 그 메시지가 실제로 무엇을 의미하는지 알아 냈습니다. , 여기에 정보를 게시한다고 생각했습니다.
그래서 git 초보자이기 때문에 필요한 대답이 분명히 초보자 대답이라는 것을 알 수 있습니다. 특히 “지점을 앞두고 …”라는 문구는 로컬 리포지토리에 추가하고 커밋 한 파일이 있지만 원본으로 푸시 한 파일이 없다는 것을 의미합니다. 이 메시지의 의도는 적어도 나에게는 “git diff”가 차이를 보이지 않았다는 사실에 의해 난독 화된다. “git diff origin / master”를 실행하기 전까지는 로컬 리포지토리와 원격 마스터 사이에 차이점이 있다고 들었습니다.
따라서 명확하게 :
“지점은 …” => 원격 마스터로 푸시해야합니다. “git diff origin / master” 를 실행 하여 로컬 저장소와 원격 마스터 저장소의 차이점을 확인하십시오.
이것이 다른 초보자에게 도움이되기를 바랍니다.
또한 마스터가 실제로 “원격”이 아닐 수도 있고 “원점”이 컨벤션 등에 사용되는 재구성 가능한 이름과 같이이 솔루션을 부분적으로 무효화 할 수있는 구성 미묘함이 있음을 알고 있습니다. 우리는 간단하고 간단한 답변을 원합니다. 긴급한 문제를 해결 한 후에는 미묘한 부분에 대해 나중에 읽을 수 있습니다.)
백작
답변
내 작업 디렉토리가 ahead of origin by X commits
있지만 그 git pull
결과 와 비슷한 문제 가 발생했습니다 Everything up-to-date
. 이 조언 에 따라 문제를 해결했습니다 . 비슷한 문제가있는 다른 사람을 돕기 위해 여기에 게시하고 있습니다.
기본 수정 사항은 다음과 같습니다.
$ git push {remote} {localbranch}:{remotebranch}
괄호 안의 단어는 원격 이름, 로컬 지점 이름 및 원격 지점 이름으로 대체해야합니다. 예 :
$ git push origin master:master
답변
때로는 로컬 캐시 된 원점 마스터 버전 (원점 / 마스터)과 실제 원점 마스터간에 차이가 있습니다.
git remote update
이것을 실행 하면 오리진 마스터를 오리진 / 마스터와 다시 동기화합니다
이 질문에 대한 답변을 참조하십시오
답변
내 노트북이 원산지라고 생각했는데…
이것은 무의미합니다. origin
기본 원격 저장소 – 일반적으로 다른 사람들의 변경 사항을 가져 오거나 당기는 저장소입니다.
내가 어떻게 할 수있는:
-
git remote -v
무엇인지 보여줄 것origin
입니다.origin/master
는 저장소master
지점의 마지막 알려진 상태에 대한 “책갈피”origin
이고, 사용자master
는에 대한 추적 지점 입니다origin/master
. 이 모든 것이 있어야합니다 . -
당신은하지 않습니다. 최소한 리포지토리가 기본 원격 리포지토리가되는 것은 의미가 없습니다.
-
그렇지 않습니다. 그것은 단지 원격 저장소에없는 (그 저장소의 마지막 알려진 상태에 따라) 로컬에서 너무 많은 커밋을했다는 것을 말해줍니다.
답변
[ 해결책 ]
$ git push origin
^ 이것은 나를 위해 그것을 해결했다. 이 작업은 랩톱의 마스터와 원격 서버의 “원본”을 동기화했습니다.
답변
나는이 문제로 어려움을 겪고 있으며 이전 답변 중 어느 것도 내가 본 질문을 다루지 않습니다. 문제를 명확하게 할 수 있는지 확인하기 위해 문제를 기본 사항으로 되돌 렸습니다.
새 저장소 (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로 밀어 내고 싶었습니다. 내가 파악하지 못하는 것은 무엇입니까?