git 분기를 오리진 버전으로 재설정해야 합니다.
한동안 있어서는 안 될 지점에서 일을 하다가 그만 두게 되었습니다.이제 원래 버전(github)에 올리지 말았어야 했던 브랜치를 덮어씁니다.쉽게 할 수 있는 방법이 있을까요?브런치를 삭제하고 트래킹브런치를 리셋하려고 했는데 다시 작업하던 버전이 나옵니다.
아직 오리진에 푸시하지 않은 경우 다음을 사용하여 브런치를 업스트림브런치로 리셋할 수 있습니다.
git checkout mybranch
git reset --hard origin/mybranch
(질문에 기재한 바와 같이, 반드시 다른 브랜치에서의 최신 커밋을 참조해 주세요.)
에 「」라고 하는 것은,mybranch@{1}
는 리셋 전 오래된 커밋을 나타냅니다.
그러나 이미 푸시한 경우 다른 옵션에 대해서는 "git 브랜치 생성 및 원래 상태로 업스트림 상태로 되돌리기"를 참조하십시오.
Git 2.23(2019년 8월)에서는 하나의 명령어가 됩니다.
즉,
예
C:\Users\vonc\git\git>git switch -C master origin/master
Reset branch 'master'
Branch 'master' set up to track remote branch 'master' from 'origin'.
Your branch is up to date with 'origin/master'.
색인이나 트리가됩니다.git reset --hard
수 있습니다.
브래드 허먼의 코멘트에 따르면reset --hard
새로운 파일이 삭제되거나 수정된 파일이 HEAD로 리셋됩니다.
슬레이트한다면 '깨끗한 슬레이트', '깨끗한 슬레이트', '깨끗한 슬레이트', '깨끗한 슬레이트'부터 시작하세요.git clean -f -d
리셋 후에는 리셋한 브랜치와 완전히 같은 동작 트리가 됩니다.
이 블로그 투고에서는 이러한 에일리어스를 제안하고 있습니다.master
브랜치만 사용할 수 있지만, 그것들을 조정/수정할 수 있습니다.
[alias] resetorigin = !git fetch origin && git reset --hard origin/master && git clean -f -d resetupstream = !git fetch upstream && git reset --hard upstream/master && git clean -f -d
다음으로 다음과 같이 입력합니다.
git resetupstream
또는
git resetorigin
조금 더 쉬운 방법이 있습니다.
git reset --hard @{u}
@{u}
브랜치가트래킹브런치에 는 숏컷입니다.master
그 트랙은 ★★★★★★★★★★★★★★★★★★★★★」origin/master
,@{u}
origin/master
.
이 기능을 사용하면 추적 지점의 전체 이름을 기억하거나 입력할 필요가 없다는 장점이 있습니다.에일리어스를 작성할 수도 있습니다.
git-reset-origin="git reset --hard @{u}"
어떤 지점에 있든 상관없습니다.
다음과 같이 가정합니다.
# on branch master
vi buggy.py # you edit file
git add buggy.py # stage file
git commit -m "Fix the bug" # commit
vi tests.py # edit another file but do not commit yet
그리고 당신은 당신이 잘못된 지점에 변경을 가했다는 것을 깨달았습니다.
git checkout -b mybranch # you create the correct branch and switch to it
★★★★★★★★★★★★★★★★★.master
여전히 커밋을 가리키고 있습니다.당신은 그것이 이전에 가리킨 곳을 가리키기를 원한다.
솔루션
가장 쉬운 방법은 다음과 같습니다.
git branch --force master origin/master
또 다른 방법은 다음과 같습니다.
git checkout master
git reset --soft origin/master
git checkout mybranch
「 」를 사용하고 있는 에 주의해 .reset --hard
않은 변경 됩니다(예: 변경 내용이 손실됩니다).tests.py
★★★★★★★★★★★★★★★★★★★★★」
이것을 시도했지만, 현재의 브랜치가 리모트 GITHUB의 최신으로 리셋 되지 않았습니다.검색해보니 https://itsyndicate.org/blog/how-to-use-git-force-pull-properly/이 나왔다.
그것이 시사하는 바이다
git fetch origin master
git reset --hard origin/master
v8 브런치를 리셋하고 싶어서 리셋을 했습니다.
git fetch origin v8
git reset --hard origin/v8
그리고 그것은 성공하였다.
서버에 프라이빗 리포(private repo)가 있어 정기적으로 리베이스화/강제 푸시를 하기 때문에 다른 컴퓨터의 로컬 브랜치를 자주 리셋할 필요가 있습니다.따라서 현재 브랜치에 대해 이 작업을 수행할 수 있는 다음 별칭 "catchup"을 만들었습니다.다른 답변과 달리 이 별칭에는 하드코드된 지점 이름이 없습니다.
꼭 잡아.
[alias]
catchup = "!f(){ echo -n \"reset \\033[0;33m$(git symbolic-ref -q --short HEAD)\\033[0m to \\033[0;33m$(git for-each-ref --format='%(upstream:short)' $(git symbolic-ref -q HEAD))\\033[0m? (Y/n) \"; read -r ans; if [ \"$ans\" = \"y\" -o \"$ans\" = \"Y\" -o -z \"$ans\" ]; then git reset --hard $(git for-each-ref --format='%(upstream:short)' $(git symbolic-ref -q HEAD)); else echo \"catchup aborted\"; fi }; f"
올바른 포맷(.gitconfig의 줄 바꿈에서는 동작하지 않습니다)은 다음과 같습니다.
"
!f(){
echo -n \"reset \\033[0;33m$(git symbolic-ref -q --short HEAD)\\033[0m to \\033[0;33m$(git for-each-ref --format='%(upstream:short)' $(git symbolic-ref -q HEAD))\\033[0m? (Y/n) \";
read -r ans;
if [ \"$ans\" = \"y\" -o \"$ans\" = \"Y\" -o -z \"$ans\" ]; then
git reset --hard $(git for-each-ref --format='%(upstream:short)' $(git symbolic-ref -q HEAD));
else
echo \"catchup aborted\";
fi
}; f
"
- 그
\\033[0;33m
그리고.\\033[0m
는 현재의 브랜치 및 업스트림에 컬러를 강조하기 위한 것입니다. $(git symbolic-ref -q --short HEAD)
현재 지점 이름입니다.$(git for-each-ref --format='%(upstream:short)' $(git symbolic-ref -q HEAD))
는 현재 브런치의 업스트림입니다.
리셋은 잠재적으로 위험한 콜이기 때문에(특히 --hard 옵션을 사용하면 커밋되지 않은 변경은 모두 손실됩니다), 우선 리셋이 무엇을 할지 알립니다.예를 들어 qcpp/dev-container라는 이름의 리모트를 사용하여 브랜치 dev-container에 있는 경우git catchup
, 프롬프트가 표시됩니다.
dev-container를 qcpp/dev-container로 재설정? (Y/n)
그런 다음 y를 입력하거나 return 키를 누르면 리셋이 수행됩니다.다른 항목을 입력하면 재설정이 수행되지 않습니다.
슈퍼 세이프하고 프로그램 방식으로 비스테이지/미커밋 변경 손실을 방지하려면 diff-index 체크에 따라 위의 에일리어스를 더 popping할 수 있습니다.
경고의 의무 단어:다른 사람이 작업한 공용 저장소에서 작업 중인데 이 별칭이 필요한 경우 잘못된 것입니다™.
언급URL : https://stackoverflow.com/questions/9301782/need-to-reset-git-branch-to-origin-version
'programing' 카테고리의 다른 글
목표 C의 MD5 알고리즘 (0) | 2023.04.09 |
---|---|
루프 vba에서 다음 반복으로 건너뜁니다. (0) | 2023.04.09 |
git 저장 해제 (0) | 2023.04.09 |
SQL 테이블에서 중복 값 찾기 (0) | 2023.04.09 |
dispatch_after - GCD (스위프트) (0) | 2023.04.09 |