programing

Git, 오리진/마스터를 커밋으로 재설정하는 방법은 무엇입니까?

bestprogram 2023. 6. 1. 23:02

Git, 오리진/마스터를 커밋으로 재설정하는 방법은 무엇입니까?

다음 명령을 사용하여 로컬 마스터를 커밋으로 재설정했습니다.

git reset --hard e3f1e37

▁i에 .$ 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)

원산지/마스터 헤드를 재설정했기 때문에 로컬과 오리진이 같은 방향이어야 하지만 보시다시피 로컬/마스터가 오리진/마스터보다 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 명령에서 마스터 앞에 있는 commit 해시 "e3f1e37:"입니다.

지점이 호출되었다고 가정합니다.master할 수 있으며, 은 여와원모서에두격다호그고, 리니출됩이모컨당신의기리▁both다니호▁is▁called▁your입니다.origin은 할 수 있었습니다

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

그러나 다른 사용자가 원격 리포지토리에서 작업 중이고 변경사항을 가져온 경우에는 이 작업을 수행하지 마십시오.이 경우 원하지 않는 커밋을 되돌린 다음 정상적으로 푸시하는 것이 좋습니다.

저도 비슷한 상황이 있었기 때문에, 저는 제 상황과 이 답변들이 저에게 어떻게 도움이 되었는지 공유하려고 생각했습니다(여러분 감사합니다).

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

어느 늦은 밤, 저는 하드웨어 고장이나 다른 것에 대한 진전을 잃을까봐 편집증적인 두려움 때문에 마스터를 시작으로 밀어내기로 결정했습니다.나중에 저는 지역 마스터 브랜치를 계속 수정했고, 다시 추진할 때가 되었다고 판단했을 때, 다른 마스터 브랜치에 직면했고, 로컬 개발 브랜치처럼 오리진/업스트림(duh!)을 수정할 수 없다는 것을 알게 되었습니다.

그래서 저는 이미 약속을 하고 있었기 때문에 마스터를 로컬로 체크아웃하지 않았습니다.마스터가 변경되지 않았습니다.저는 리셋할 필요도 없었습니다. 하드, 제 현재의 약속은 괜찮았습니다.

저는 마스터에게 어떤 커밋을 적용할지조차 지정하지 않은 채 시작을 강요했습니다. 이 경우 HEAD가 무엇이든 상관없기 때문입니다.확인했다git diff master..origin/master그래서 아무런 차이가 없었고 그것뿐입니다.모두 고정.감사합니다! (알아요, 저는 기민한 초보자예요, 용서해 주세요!)

따라서 로컬에서 마스터 브랜치를 사용하는 것이 이미 정상이라면 다음과 같이 하십시오.

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

여기 제 제안이 있습니다.하지만, 위의 사이먼 보드리아스의 대답 또한 훌륭합니다.

지점 확인

git checkout master

소프트 재설정. 즉, 변경 내용이 커밋되지 않습니다.

git reset --soft HEAD~1

마스터가 아닌 경우 오리진에서 분기 수동 삭제

코드를 수정하거나 쌓습니다.

그런 다음, 그렇지 않은 경우에 대한 설명으로 새 커밋을 수행합니다.

git push -f origin master 

1단계. 분기를 특정 HEAD로 재설정합니다.2단계.원격 분기에 변경 사항을 강제로 밀어넣습니다.

 git reset --hard e3f1e37 /   git reset --hard origin/master
 git push --force origin "Branch name"

완료. 이제 이전 커밋으로 재설정하여 원격 지점을 확인합니다.

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