programing

강제 업데이트 후 Git Pull

muds 2023. 5. 31. 18:36
반응형

강제 업데이트 후 Git Pull

방금 몇 가지 약속을 취소했습니다.git rebase그리고 했습니다.git push --force(악이란 걸 알아요.).

이제 다른 소프트웨어 엔지니어들은 다른 역사를 가지고 있고 그들이 할 때git pullGit가 병합됩니다.이것을 고칠 수 있는 방법이 있습니까?rm my-repo; git clone git@example.org:my-repo.git?

저는 반대의 것이 필요합니다.git push --force,그렇지만git pull --force의도한 결과를 제공하지 않았습니다.

새 커밋 수신

git fetch

리셋

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

로컬 분기의 커밋을 변경하는 방법

git reset origin/main --hard

설명서에 나와 있듯이 주의해야 합니다.

인덱스와 작업 트리를 재설정합니다.<commit> 이후 작업 트리에서 추적된 파일에 대한 변경 사항은 모두 삭제됩니다.

로컬에서 변경한 내용을 실제로 유지하려면 다음 작업을 수행합니다.--soft대신 재설정합니다.이렇게 하면 분기에 대한 커밋 기록이 업데이트되지만 작업 디렉토리의 파일은 변경되지 않습니다(그 후 커밋할 수 있음).

리베이스

다음을 사용하여 다른 커밋/분기 외에 로컬 커밋을 재생할 수 있습니다.git rebase:

git rebase -i origin/main

이렇게 하면 대화형 모드에서 기본 재배치를 실행하며, 여기서 다시 기본 재배치하는 기록에 없는 각 개별 커밋을 적용하는 방법을 선택할 수 있습니다.

제거한 커밋의 경우(와 함께)git push -f)는 이미 로컬 기록에 추가되었으며, 다시 적용되는 커밋으로 나열됩니다. 다시 기본 재배치의 일부로 삭제하거나 분기 기록에 다시 추가해야 합니다. 다음 번 푸시 시 원격 기록에 다시 추가됩니다.

도움말 사용git command --help위의 (또는 기타) 명령에 대한 자세한 내용과 예제를 참조하십시오.

리베이스로 당김

일반 풀은 fetch + merge이지만 원하는 것은 fetch + rebase입니다.이 옵션은 다음과 같은 옵션입니다.pull명령:

git pull --rebase

특정한 경우 다시 적용하지 않으려는 커밋이 제거되었습니다.이 작업은 수동으로 수행해야 합니다.따라서 이러한 커밋을 건너뛸 수 있도록 기본 재배치는 대화형이어야 합니다.

git pull --rebase=interactive

또는 Git 2.26 기준으로 다음과 같이 단축할 수 있습니다.

git pull --rebase=i

이렇게 하면 원하지 않는 코드가 이미 포함된 분기를 수정할 수는 없지만(아래 참조), 일부 분기를 풀링한 경우(원점/일부 분기의 "앞"이 아니라) 다음과 같이 간단하게 처리할 수 있습니다.

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

참고: &&을 함께 사용하면 이 모든 것을 결합할 수 있습니다.

참고 2: 플로리안은 댓글에서 이것을 언급했지만, 누가 답을 찾을 때 댓글을 읽습니까?

참고 3: 오염된 분기가 있는 경우, 새로운 "덤브런치"를 기반으로 새 분기를 생성하고 체리픽 커밋을 덮어쓸 수 있습니다.

예:

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

이제 추가적인 (아마도 잘못된) 커밋이 없는 새로운 기능입니다!

원격 저장소에서 로컬 저장소로 변경 사항을 가져오려면 다음을 수행합니다.

git fetch --all

추적 분기 이름 변경:

git branch -m <old-branch-name> <new-name>

원격 분기를 추적하는 새 로컬 분기를 만듭니다.

git checkout <old-branch-name>

언급URL : https://stackoverflow.com/questions/9813816/git-pull-after-forced-update

반응형