강제 업데이트 후 Git Pull
방금 몇 가지 약속을 취소했습니다.git rebase
그리고 했습니다.git push --force
(악이란 걸 알아요.).
이제 다른 소프트웨어 엔지니어들은 다른 역사를 가지고 있고 그들이 할 때git pull
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/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
'programing' 카테고리의 다른 글
특성의 마야비 색 막대빈 창을 만드는 UI (0) | 2023.05.31 |
---|---|
활동 컨텍스트 외부에서 시작 활동() 호출 (0) | 2023.05.31 |
findOneAndUpdate 메서드에서 업데이트된 문서를 다시 가져오는 방법은 무엇입니까? (0) | 2023.05.31 |
웹 뷰가 URL 로드를 마치기 위해 듣는 방법은 무엇입니까? (0) | 2023.05.31 |
제안된 내용 간격띄우기에 대한 대상 내용 간격띄우기:UICollectionViewFlowLayout을 하위 분류하지 않고 스크롤 속도 사용 (0) | 2023.05.31 |