Git에서 원점/마스터의 위치를 ​​어떻게 찾을 수 있고 어떻게 변경합니까?

StackOverflow https://stackoverflow.com/questions/277077

  •  07-07-2019
  •  | 
  •  

문제

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

또한 unfdudd.com을 사용하여 코드를 저장하고 있습니다. 기차에서 직장에서오고 나가는 Mac 노트북을 변경 한 다음 다음 명령을 사용하여 네트워크 연결이있을 때 풀 링을 밀어냅니다.

git push unfuddle master

배포에 Capistrano를 사용하고 마스터 브랜치를 사용하여 Fulduddle 저장소에서 코드를 당기십시오.

최근에 노트북에서 "git 상태"를 실행할 때 다음과 같은 메시지를 발견했습니다.

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

그리고 나는 이유에 대해 혼란스러워합니다. 나는 내 노트북이 기원이라고 생각했지만 ... 내가 원래 전복에서 뽑았다는 사실이 메시지가 나타나게하는 것인지는 모른다. 내가 어떻게 할 수있는:

  1. Git이 'Origin/Master'가 어디에 있는지 알아보십시오.
  2. 다른 곳이라면 노트북을 '원산지/마스터'로 어떻게 바꾸나요?
  3. 이 메시지를 떠나십시오. 그것은 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 Aristotle 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 프로젝트를 전복에서 GIT로 변환 할 때 사용한 임시 디렉토리였으며 아마도 내가 풀 렸을 것입니다. 그런 다음 나는 Unfdudd에서 신선한 사본을 확인했다고 생각합니다. geekfor 예배 규칙서.

그래서 DBR의 조언을 따라야하는 것처럼 보입니다.

git remote rm origin
git remote add origin git@spilth.unfuddle.com:spilth/geekfor.git
도움이 되었습니까?

해결책

1. Git Thinks '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 당신이 같은 일을 할 때 기본적으로 git push 또는 git pull. 따라서 리모컨이 있으면 많은 것을 사용합니다 (unpdrudd, 귀하의 경우).

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의 일반적인 계획에서 "당신의 지점이 ... 여기에 대한 대답은 없었지만,이 질문은 현재 "당신의 지점이 '원산지/마스터'보다 앞서 있습니다. , 나는 여기에 정보를 게시 할 것이라고 생각했다.

그래서, 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

때로는 Origin Master (Origin/Master)의 로컬 캐시 버전과 True Origin Master 사이에 차이가 있습니다.

당신이 달리면 git remote update 이것은 원산지 마스터를 원산지/마스터와 재 동기화합니다

이 질문에 대한 대답을 참조하십시오

Git Pull Origin Master & Git Pull Origin/Master의 차이점

내 노트북이 기원이라고 생각했습니다 ...

그것은 일종의 무의미한 일입니다. origin 기본 원격 저장소를 나타냅니다. 일반적으로 다른 사람들의 변경 사항을 가져 오거나 끌어 당기십시오.

내가 어떻게 할 수있는:

  1. git remote -v 당신에게 무엇을 보여줄 것입니다 origin 이다; origin/master 마지막으로 알려진 상태에 대한 "책갈피"입니다. master 의 지점 origin 저장소 및 자신의 master a 추적 브랜치 ~을 위한 origin/master. 이것이 바로 그 모든 것입니다.

  2. 당신은 그렇지 않습니다. 적어도 저장소가 기본 원격 저장소 자체가되는 것은 의미가 없습니다.

  3. 그렇지 않습니다. 그것은 단지 당신이 원격 저장소에 있지 않은 현지에서 많은 커밋을 만들었다는 것을 알려줍니다 (그 저장소의 마지막 알려진 상태에 따라).

해결책

$ git push origin

^ 이것은 나를 위해 그것을 해결했습니다. 그 일은 원격 서버에있는 "원산지"와 마스터 (노트북)를 동기화했습니다.

나는이 문제로 어려움을 겪고 있으며 이전 답변 중 어느 것도 내가 볼 수 있듯이 질문을 다루지 않습니다. 문제를 기본으로 철회하여 문제를 명확하게 할 수 있는지 확인했습니다.

새 저장소 (REP1)를 생성하고 파일 하나를 넣고 커밋합니다.

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

rep1의 클론을 만들고 그것을 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 상태'를 할 때 나는 원산지보다 앞서 있다고 들었습니다.

# 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로 밀어내는 것입니다. 내가 이해하지 못하는 것은 무엇입니까?

당신이 "푸시"를 기다리고 있습니다. 노력하다:

$ git push

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

그래서 나는 달렸다

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

그런 다음 커밋과 밀어 넣었습니다.

그것은 문제를 해결했습니다.

나는 또한 git 초보자입니다. 나는 '당신의 지점이 N Commits'메시지에 의해 Origin/Master보다 앞서있는 것과 같은 문제를 겪었습니다. 제안 된 'git diff origin/mas 그래서 ...

내 git 클론이 호스팅을위한 것이었고, 나는 마스터 레포의 정확한 사본을 원했고, 로컬 변경을 유지하기 위해 신경 쓰지 않았기 때문에, 나는 전체 리포지기를 절약하고 새로운 것을 만들기로 결정했습니다.

(호스팅 기계에서)

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

편의를 위해 호스팅 기계의 클론을 변경했습니다. 더 이상은 없어. 나는 그러한 변화를 주인에게, git 커밋하고, git 당기기를 할 것입니다. 바라건대, 이것은 내 git 클론을 호스팅 머신의 완전한 동기화로 유지해야합니다.

/나라

나는 내 repo에 대해 똑같은 것을 궁금해했다. 내 경우에는 더 이상 밀리지 않는 오래된 리모컨이 있었기 때문에 제거해야했습니다.

리모컨 목록 가져 오기 :

git remote

필요하지 않은 것을 제거하십시오

git remote rm {insert remote to remove}

자신의 커밋이 이루어지기 전에 특정 커밋으로 재설정 할 수 있습니다.

$ 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

나는 "당신의 지점이 NN Commits의 'Origin/Master'보다 앞서 있습니다." 다음과 같이 원격 저장소로 밀었을 때

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

내 원격 흡입이 파일 .git/fetch_head 파일에 있고 사용 된 것을 발견했을 때 :

git push

문제가 사라졌습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top