IT story

힘내, 원산지 / 마스터를 커밋으로 재설정하는 방법?

hot-time 2020. 4. 25. 09:54
반응형

힘내, 원산지 / 마스터를 커밋으로 재설정하는 방법?


이 명령으로 로컬 마스터를 커밋으로 재설정했습니다.

git reset --hard e3f1e37

$ git status명령을 입력 하면 터미널이 말합니다.

# On branch master
# Your branch is behind 'origin/master' by 7 commits, and can be fast-forwarded.

#   (use "git pull" to update your local branch)
#
nothing to commit, working directory clean

출발지 / 헤더도 재설정하고 싶어서 출발지 / 마스터로 결제합니다

$ git checkout origin/master
Note: checking out 'origin/master'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b new_branch_name

HEAD is now at 2aef1de... master problem fixed for master. its okay now.

이 명령으로 헤더를 재설정하십시오.

$ git reset --hard e3f1e37
HEAD is now at e3f1e37 development version code incremented for new build.

그런 다음 내가 성공하지 못했다는 출처 / 헤더에 커밋을 추가하려고했습니다.

$ git commit -m "Reverting to the state of the project at e3f1e37"
# HEAD detached from origin/master
nothing to commit, working directory clean

마지막으로 로컬 마스터에게 체크 아웃합니다.

$ git checkout master
Switched to branch 'master'
Your branch is behind 'origin/master' by 7 commits, and can be fast-forwarded.
  (use "git pull" to update your local branch)

원산지 / 마스터 헤드를 재설정했기 때문에 로컬과 원산지 방향이 동일해야하지만 git은 내 로컬 / 마스터가 7 커밋에 의해 원산지 / 마스터 뒤에 있다고 말합니다.

이 문제를 어떻게 해결할 수 있습니까? 내가 찾고있는 것은 로컬 / 마스터 및 원산지 / 마스터 책임자가 동일한 커밋을 가리킨다는 것입니다. 다음 이미지는 내가 한 일을 보여줍니다. 감사.

여기에 이미지 설명을 입력하십시오


origin/xxx분기는 항상 리모컨을 가리 킵니다. 로컬 리포지토리에 대한 포인터가 아니기 때문에 체크 아웃 할 수 없습니다 (커밋 만 체크 아웃하십시오. 명령 행 인터페이스 분기 마커에 작성된 이름이 표시되지 않고 커밋 해시 만 표시됩니다).

리모컨을 업데이트하기 위해해야 ​​할 일은 로컬 변경 사항을 마스터로 강제 푸시하는 것입니다.

git checkout master
git reset --hard e3f1e37
git push --force origin master
# Then to prove it (it won't print any diff)
git diff master..origin/master

여기 에서 찾은 솔루션 은 이미 푸시 된 이전 커밋으로 마스터를 업데이트하는 데 도움이되었습니다.

git checkout master
git reset --hard e3f1e37
git push --force origin e3f1e37:master

허용되는 답변과의 주요 차이점은 push 명령에서 마스터 전에 커밋 해시 "e3f1e37 :"입니다.


비슷한 상황을 겪었 기 때문에 내 상황과 이러한 답변이 어떻게 도움이 되었습니까 (모든 사람에게 감사함).

그래서 나는 메인 브랜치에서 진행 상황을 저장하고 싶을 때마다 마지막 커밋을 수정하여 로컬로 작업하기로 결정했습니다 (지사에서 나가서 커밋하고 계속 밀어 넣고 마스터로 다시 병합해야 함을 알고 있습니다).

어느 늦은 밤, 하드웨어 고장이나 이더의 무언가에 대한 나의 진보를 잃어버린 것에 대한 편집증에 대한 두려움으로, 나는 마스터를 원점으로하기로 결정했다. 나중에 나는 내 로컬 마스터 지점을 개정 보관하고 나는 다시 밀어 그것의 시간을 결정했을 때, 나는 다른 마스터 가지에 직면하고 있었고, 난 원산지 / 업스트림 (수정 할 수없는 발견 대만족을! 나는 지역 개발 가지를 할 수있는 것처럼).

그래서 나는 이미 커밋 후에 마스터를 체크 아웃하지 않았습니다. 주인은 변하지 않았다. 심지어 재설정 할 필요조차 없었습니다. 현재 커밋이 정상이었습니다.

이 경우 HEAD가있는 것이기 때문에 마스터에 강제로 커밋하려는 커밋을 지정하지 않아도 원점으로 강제 전환합니다. git diff master..origin/master차이점이 없었는지 확인 했습니다. 모두 고정되었습니다. 감사! (나는 알고있다, 나는 자식 초보자이다, 용서해주세요!).

따라서 로컬에서 마스터 브랜치에 대해 이미 괜찮다면 다음을 수행하십시오.

git push --force origin master
git diff master..origin/master

브랜치를 master여기와 원격으로 모두 호출 하고 리모트를 호출한다고 가정하면 origin다음을 수행 할 수 있습니다.

git reset --hard <commit-hash>
git push -f origin master

그러나 다른 사람이 원격 저장소를 작업 중이고 변경 사항을 가져온 경우이 작업을 수행하지 마십시오. 이 경우 원하지 않는 커밋을 되 돌린 다음 평소대로 푸시하는 것이 좋습니다.

참고 URL : https://stackoverflow.com/questions/17667023/git-how-to-reset-origin-master-to-a-commit

반응형