갈래 저장소에서 git master 브랜치를 업스트림 브랜치로 재설정하려면 어떻게해야합니까?


107

분기 된 자식 저장소의 마스터 분기를 완전히 엉망으로 만들었습니다.

업스트림 마스터 리포지토리의 내용으로 포크로 푸시 된 마스터 브랜치를 완전히 재설정하고 싶습니다. 마스터 브랜치 변경 사항이나 기록을 유지하는 데 관심이 없습니다.

가장 간단한 방법은 내 분기 된 저장소를 삭제하고 업스트림 프로젝트에서 다시 분기하는 것입니다. 그러나 나는 잃고 싶지 않은 다른 푸시 브랜치에서 일하고 있습니다.

따라서 업스트림 마스터로 푸시 된 마스터 브랜치를 재설정하는 방법은 무엇입니까?


git clone https://myrepo.git
cd myrepo
git remote add upstream https://upstream.git
git fetch upstream

업스트림 마스터로 로컬 및 원격 마스터 분기를 재설정하려면 여기에서 어디로 가야합니까?

답변:


202

로컬 마스터 브랜치를 업스트림 버전으로 재설정하고 리포지토리로 푸시 할 수 있습니다.

"upstream"이 원래 저장소이고 "origin"이 포크라고 가정합니다.

# ensures current branch is master
git checkout master

# pulls all new commits made to upstream/master
git pull upstream master

# this will delete all your local changes to master
git reset --hard upstream/master

# take care, this will delete all your changes on your forked master
git push origin master --force

(원래 저장소를를 사용하여 "업스트림"으로 정의 할 수 있습니다 git remote add upstream /url/to/original/repo.)


1
git reset --hard upstream/master작업 디렉토리도 재설정 해야합니다 . 그럼에도 불구하고 귀하의 대답은 정확합니다.
j6t

"--hard"를 사용하지 않는 것도 로컬 변경 사항을 유지하면서 작동합니다. 나는 diff를 검사하기 위해 분할 된 단계에서 하드 리셋을 수행 할 것입니다.
Johannes Barop

1
이것은 매우 도움이되었습니다.
Aleem S

4
git fetch upstream먼저 전화해야 함
Henry E

3
@HenryE가 언급했듯이 먼저 업스트림 변경 사항을 가져 오지 못하면 git fetch upstream일반적으로 다음과 같은 사람이 읽을 수없는 오류가 발생합니다."fatal: ambiguous argument 'upstream/master': unknown revision or path not in the working tree."
Cecil Curry

5

이것은 업스트림 마스터로 마스터 브랜치를 재설정하고 분기 이후 브랜치가 업데이트 된 경우 해당 변경 사항도 가져옵니다.

git checkout master 
git reset upstream/master
git pull --rebase upstream master
git push origin master --force

추신 : 원본이 귀하의 사본이고 업스트림이 원본 저장소라고 가정합니다.


다른 커밋에서 브랜치를 만든 것처럼 보입니다. 리베이스의 주된 이유는 선형 프로젝트 기록을 유지하는 것입니다. 즉, 이전 커밋을 새 커밋으로 대체하기 때문에 공용 저장소에 게시 된 후에는 커밋을 리베이스해서는 안됩니다. 자세한 내용은 참조하시기 바랍니다 atlassian.com/git/tutorials/rewriting-history/git-rebase
user8128167

0

다음과 같은 방법을 시도했습니다.

$REPO=<repo>
$ORIGIN=<user>/$REPO
$UPSTREAM=<upstream>/$REPO

$ git clone git@github.com:$ORIGIN.git
$ cd $REPO
$ git checkout master
$ git remote add upstream git@github.com:$UPSTREAM.git
$ git reset --hard upstream/master
$ git pull --rebase upstream master
$ git push origin master --force

출력에 경고가 표시됩니다.

fatal: ambiguous argument 'upstream/master': 
unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'

올바른 방법이 넣어 그래서 git pull전에 git reset:

$ git clone git@github.com:$ORIGIN.git
$ cd $REPO
$ git checkout master
$ git remote add upstream git@github.com:$UPSTREAM.git
$ git pull --rebase upstream master
$ git reset --hard upstream/master
$ git push origin master --force

그러면 출력은 다음과 같습니다.

From github.com:<upstream>/<repo>
 * branch                master     -> FETCH_HEAD
 * [new branch]          master     -> upstream/master
HEAD is now at 7a94b1790 Merge pull request #4237 from <upstream>/...
Current branch master is up to date.
Everything up-to-date.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.