지점에서 오랫동안 개발 한 후 마스터로 전환했습니다. 로그에는 다음이 표시됩니다.
당신의 브랜치는 167 커밋에 의해 'origin / master'뒤에 있고 빨리 전달 될 수 있습니다.
나는 시도했다 :
git checkout HEAD
효과가 없습니다. 마스터에서 중간 커밋을 체크 아웃했기 때문입니다.
마스터가 머리에 머무르는 방법?
지점에서 오랫동안 개발 한 후 마스터로 전환했습니다. 로그에는 다음이 표시됩니다.
당신의 브랜치는 167 커밋에 의해 'origin / master'뒤에 있고 빨리 전달 될 수 있습니다.
나는 시도했다 :
git checkout HEAD
효과가 없습니다. 마스터에서 중간 커밋을 체크 아웃했기 때문입니다.
마스터가 머리에 머무르는 방법?
답변:
하기:
git checkout master
git pull origin
origin/master
분기 를 가져오고 병합합니다 ( git pull
원점이 기본값 이라고 말할 수 있습니다 ).
시도하십시오 git merge origin/master
. 빨리 감기 만하고 싶다면이라고 말할 수 있습니다 git merge --ff-only origin/master
.
merge
명령을 사용하여 다시 인증 할 필요가 없습니다.
--ff-only
매우 유용합니다.
origin/master
부분이 필요하거나 현명 기본값이 경우,하지만 난 빨리 감기의 별칭을하는 것이 유용하다고 그래서 상류 지점 대신에 하드 코딩의 사용되었는지 확인하고 싶었 origin/master
: ff = merge --ff-only @{u}
( @{u}
상류) .
당신의 상황에서, 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
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
이제 마스터와 출발지 / 마스터가 동기화되었습니다
빨리 감기를 원하는 사람에게 그들이 에없는 그 지점을 확인하지 않고 (자신 포함) 다른 원격 지사에, 당신은 할 수 있습니다 :
git fetch origin master:other
이 기본적으로 빨리 감기 인덱스 other
에 origin/master
당신이하지 않은 경우 other
지점입니다. 이 방법으로 여러 지점을 빨리 감을 수 있습니다.
일정 기간 동안 다른 지점에서 작업하고 있고 오래된 지점을 원격에서 해당 헤드로 업데이트하려는 경우 :
git fetch origin master:master other:other etc:etc
복잡성이 필요하지 않습니다. 지사에 서서 git pull 을 수행하십시오.
또는 두 번째 시도로 git pull origin master 는 첫 번째 명령으로 운이 좋지 않은 경우에만
로컬 변경 사항을 최신 원격 상태로 이동 하여 현재 로컬 추적기 브랜치 를 리베이스 하려면 :
$ 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가 리셋 작업 전에 가리키고있는 해시 (일반적으로 명백 함)를 찾아 해당 해시로 분기를 하드 리셋합니다.
귀하의 경우 빨리 감기하려면 다음을 실행하십시오.
$ 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
분기 포인터를 HEAD로 이동하십시오.
git branch -f master
브랜치가 master
이미 존재하므로 git을 사용하지 않으면 git에서 덮어 쓸 수 없습니다 -f
(이 인수는의 약자입니다 --force
)
또는 rebase를 사용할 수 있습니다.
git rebase HEAD master
자신의 위험에 따라하십시오;)
git checkout HEAD
아무것도하지 않습니다.HEAD
이미 체크 아웃 된 커밋을 의미합니다.