IT

강제 업데이트 후 Git pull

lottoking 2020. 3. 21. 10:46

강제 업데이트 후 Git pull


난 그냥 몇 가지 커밋을 숙청 git rebase하고했다 git push --force(악한, 나는 알고있다).

이제 다른 소프트웨어 엔지니어는 다른 이력을 가지고 있으며 git pullGit 을 수행하면 Git이 병합됩니다. ?를 수행하는 것을 제외하고이 문제를 해결하는 방법이 rm my-repo; git clone git@example.org:my-repo.git있습니까?

의 반대와 같은 것이 필요 git push --force하지만 git pull --force의도 한 결과를주지 못했습니다.


새로운 커밋을 받으려면

git fetch

초기화

을 사용하여 로컬 브랜치에 대한 커밋을 재설정 할 수 있습니다 git reset.

로컬 지점의 커밋을 변경하려면

git reset origin/master --hard

그러나 설명서에 명시된대로주의하십시오.

색인 및 작업 트리를 재설정합니다. <commit> 이후 작업 트리에서 추적 된 파일에 대한 모든 변경 사항은 무시됩니다.

실제로 변경 사항을 로컬로 유지하려면 --soft재설정을 수행하십시오. 브랜치의 커밋 히스토리를 업데이트하지만 작업 디렉토리의 파일을 변경하지 마십시오 (그리고 커밋 할 수 있습니다).

리베이스

다음을 사용하여 다른 커밋 / 브랜치 위에서 로컬 커밋을 재생할 수 있습니다 git rebase.

git rebase -i origin/master

그러면 대화식 모드에서 rebase가 호출되어 기반이되는 히스토리에없는 각 개별 커밋을 적용하는 방법을 선택할 수 있습니다.

삭제 한 커밋 git push -f이 이미 로컬 히스토리로 가져온 경우 다시 적용되는 커밋으로 나열됩니다. 리베이스의 일부로 삭제해야하거나 단순히 히스토리에 다시 포함됩니다. 분기에 대해-다음 푸시에서 원격 기록에 다시 나타납니다.

git command --help위의 (또는 다른) 명령에 대한 자세한 내용과 예를 보려면 도움말 사용하십시오 .


이것은 이미 원하지 않는 코드가있는 분기를 수정하지는 않지만 (이를 수행하는 방법은 아래 참조) 분기를 가져 와서 깨끗하게 만들고 싶다면 원산지 / 일부 지점) 다음과 같이하면됩니다.

git checkout some-branch   # where some-branch can be replaced by any other branch
git branch base-branch -D  # where base-branch is the one with the squashed commits
git checkout -b base-branch origin/base-branch  # recreating branch with correct commits

참고 : &&를 넣어서이 모든 것을 결합 할 수 있습니다.

Note2 : Florian은 이것을 주석으로 언급했지만, 답변을 찾을 때 누가 주석을 읽습니까?

Note3 : 오염 된 가지가있는 경우 새로운 "멍청한 가지"를 기반으로 새 가지를 만들 수 있고 체리 픽 (Cherry-pick) 커밋 만 가능합니다.

전의:

git checkout feature-old  # some branch with the extra commits
git log                   # gives commits (write down the id of the ones you want)
git checkout base-branch  # after you have already cleaned your local copy of it as above
git checkout -b feature-new # make a new branch for your feature
git cherry-pick asdfasd   # where asdfasd is one of the commit ids you want
# repeat previous step for each commit id
git branch feature-old -D # delete the old branch

이제 새로운 기능은 여분의 커밋이없는 지점입니다!

참고 URL : https://stackoverflow.com/questions/9813816/git-pull-after-forced-update