지점을 머리로 빨리 감는 방법?


249

지점에서 오랫동안 개발 한 후 마스터로 전환했습니다. 로그에는 다음이 표시됩니다.

당신의 브랜치는 167 커밋에 의해 'origin / master'뒤에 있고 빨리 전달 될 수 있습니다.

나는 시도했다 :

git checkout HEAD

효과가 없습니다. 마스터에서 중간 커밋을 체크 아웃했기 때문입니다.

마스터가 머리에 머무르는 방법?


6
git checkout HEAD아무것도하지 않습니다. HEAD이미 체크 아웃 된 커밋을 의미합니다.
Emre Tapcı

답변:


244

하기:

git checkout master
git pull origin

origin/master분기 를 가져오고 병합합니다 ( git pull원점이 기본값 이라고 말할 수 있습니다 ).


52
Rob의 대답이 더 낫다고 생각합니다. 나는 보통 방금 당기는 이 상황에 직면 하고 다른 지점으로 전환합니다.이 지점은 빨리 감기되어야합니다. 내가 다른 (no-op) 당기기를하고 그것을 완료하기를 기다려야한다면 그것은 나에게 성가신 일입니다. 로컬 전용 작업을 수행하는 것이 더 빠르며 어쨌든 원하는 것입니다.
Baron Schwartz

353

시도하십시오 git merge origin/master. 빨리 감기 만하고 싶다면이라고 말할 수 있습니다 git merge --ff-only origin/master.


4
리모컨에 인증 고리가있을 때 사용하면 좋습니다. 하나의 지점을 가져 오면 인증을 받아야합니다. 그런 다음 다른 지점으로 전환 할 때 (예 : 변경 사항을 선택하기 위해)이 merge명령을 사용하여 다시 인증 할 필요가 없습니다.
RustyTheBoyRobot

30
--ff-only매우 유용합니다.
Luke

4
만약 내가 모르는 origin/master부분이 필요하거나 현명 기본값이 경우,하지만 난 빨리 감기의 별칭을하는 것이 유용하다고 그래서 상류 지점 대신에 하드 코딩의 사용되었는지 확인하고 싶었 origin/master: ff = merge --ff-only @{u}( @{u}상류) .
Thor84no

2
더 나은 제안 대답보다는 그게 당신이 오프라인 경우
제이 섹 Pietal

1
간단한 풀이 같은 일을하지 않는 이유를 설명해 주시겠습니까? 또한 이렇게하면 풀이 여전히 필요합니까?
Zuzu Corneliu

40

당신의 상황에서, git rebase트릭을 할 것입니다. 마스터가 가지고 있지 않은 변경 사항이 없으므로 git은 빨리 감습니다. 리베이스 워크 플로로 작업하는 경우 혼란스러운 경우 병합 커밋으로 끝나지 않으므로 더 권장 할 수 있습니다.

username@workstation:~/work$ git status
# On branch master
# Your branch is behind 'origin/master' by 1 commit, and can be fast-forwarded.
#   (use "git pull" to update your local branch)
#
nothing to commit, working directory clean
username@workstation:~/work$ git rebase
First, rewinding head to replay your work on top of it...
Fast-forwarded master to refs/remotes/origin/master.
# On branch master
nothing to commit, working directory clean

1
우리가 git pull을 사용하지 않기 때문에 매우 유용합니다!
Stefan

보류중인 변경 사항이 있더라도 항상 숨기고 rebase 할 수 있습니다. 이것이 '적절한'방법인지는 모르겠지만 놀라운 일입니다.
fn.

28
git checkout master
git pull

일을해야합니다.

master가 아닌 다른 브랜치에서 작업 할 때마다 누군가가 master로 변경하고 git pull 을 수행 할 때마다 "당신의 브랜치가 뒤에 있습니다"메시지가 나타납니다 .

(branch) $ //hack hack hack, while someone push the changes to origin/master
(branch) $ git pull   

이제 원산지 / 마스터 참조가 당겨하지만, 마스터가되어 병합되지 함께

(branch) $ git checkout master
(master) $ 

이제 마스터는 출발지 / 마스터 뒤에 있으며 빨리 전달 될 수 있습니다

this will pull and merge (so merge also newer commits to origin/master)
(master) $ git pull 

this will just merge what you have already pulled
(master) $ git merge origin/master

이제 마스터와 출발지 / 마스터가 동기화되었습니다


13

다른 지점에 서서 최신 버전의 마스터를 확인하려면 다음을 수행하십시오.

git checkout -B master origin/master


9

빨리 감기를 원하는 사람에게 그들이 에없는 그 지점을 확인하지 않고 (자신 포함) 다른 원격 지사에, 당신은 할 수 있습니다 :

git fetch origin master:other

이 기본적으로 빨리 감기 인덱스 otherorigin/master당신이하지 않은 경우 other지점입니다. 이 방법으로 여러 지점을 빨리 감을 수 있습니다.

일정 기간 동안 다른 지점에서 작업하고 있고 오래된 지점을 원격에서 해당 헤드로 업데이트하려는 경우 :

git fetch origin master:master other:other etc:etc

2

복잡성이 필요하지 않습니다. 지사에 서서 git pull 을 수행하십시오.

또는 두 번째 시도로 git pull origin master 는 첫 번째 명령으로 운이 좋지 않은 경우에만


0

로컬 변경 사항을 최신 원격 상태로 이동 하여 현재 로컬 추적기 브랜치 를 리베이스 하려면 :

$ git fetch && git rebase

보다 일반적으로, 로컬 변경 사항 을 빨리 감기 및 삭제하려면 ( 하드 리셋 ) * :

$ git fetch && git checkout ${the_branch_name} && git reset --hard origin/${the_branch_name}

빨리 감기 와 지역 변경 (유지 REBASE를 )

$ git fetch && git checkout ${the_branch_name} && git rebase origin/${the_branch_name}

*-HEAD git reflog의 상태를 역순으로 표시하는 의도하지 않은 하드 리셋으로 인한 변경을 취소하려면 HEAD가 리셋 작업 전에 가리키고있는 해시 (일반적으로 명백 함)를 찾아 해당 해시로 분기를 하드 리셋합니다.


0

귀하의 경우 빨리 감기하려면 다음을 실행하십시오.

$ git merge --ff-only origin/master

이 질문은 특별히 "빨리 감기"를 요구하기 때문에 의 --ff-only옵션을 사용합니다 git merge.

다음은 git-merge(1)더 빠른 옵션을 보여주는 발췌 부분입니다 .

--ff, --no-ff, --ff-only
    Specifies how a merge is handled when the merged-in history is already a descendant of the current history.  --ff is the default unless merging an annotated
    (and possibly signed) tag that is not stored in its natural place in the refs/tags/ hierarchy, in which case --no-ff is assumed.

    With --ff, when possible resolve the merge as a fast-forward (only update the branch pointer to match the merged branch; do not create a merge commit). When
    not possible (when the merged-in history is not a descendant of the current history), create a merge commit.

    With --no-ff, create a merge commit in all cases, even when the merge could instead be resolved as a fast-forward.

    With --ff-only, resolve the merge as a fast-forward when possible. When not possible, refuse to merge and exit with a non-zero status.

나는 별칭을 보증하기에 충분할 정도로 빨리 앞으로 나아 갔다.

$ git config --global alias.ff 'merge --ff-only @{upstream}'

이제 이것을 빨리 진행할 수 있습니다.

$ git ff

-2

분기 포인터를 HEAD로 이동하십시오.

git branch -f master

브랜치가 master이미 존재하므로 git을 사용하지 않으면 git에서 덮어 쓸 수 없습니다 -f(이 인수는의 약자입니다 --force)

또는 rebase를 사용할 수 있습니다.

git rebase HEAD master

자신의 위험에 따라하십시오;)


1
시도하지 마십시오. 다음과 같은 상황이 발생하면 C0 --- C1 --- C2 --- C3 --- C4 (마스터)와 같은 나쁜 일이 발생합니다. C0 --- C1 --- C2 --- B1 --- B2 --- B3 (dev) 헤드가 B3 (dev)에 있고 git branch -f master를 수행하면 C0으로 끝납니다. -C1 --- C2 --- B1 --- B2 --- B3 (dev) (마스터). C3 --- C4는 어느 지점에서도 접근 할 수 없으며 결국 가비지 수집됩니다. 이 상황에서 자신을 발견하면 -b <branch> 옵션으로 reflog 및 check C4 commit을 확인하여 새 분기를 작성하십시오.
A_P
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.