programing

리모트 저장소 HEAD와 동일하게 로컬 저장소 브랜치를 리셋합니다.

starjava 2023. 4. 12. 21:41
반응형

리모트 저장소 HEAD와 동일하게 로컬 저장소 브랜치를 리셋합니다.

로컬 브런치를 리모트저장소의 브런치와 동일하게 리셋하려면 어떻게 해야 합니까?

나는 시도했다.

git reset --hard HEAD

★★★★★★★★★★★★★★★★★.git status다음과 같이 합니다.

On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)
      modified:   java/com/mycompany/TestContacts.java
      modified:   java/com/mycompany/TestParser.java

리모트 브랜치와 정확하게 일치하도록 브랜치를 설정하는 순서는, 다음의 2개의 순서로 실행할 수 있습니다.

git fetch origin
git reset --hard origin/master

이것을 실시하기 전에 현재의 브랜치 상태를 보존하는 경우는, 다음의 조작을 실행할 수 있습니다.

git commit -a -m "Saving my work, just in case"
git branch my-saved-work

작업물은 나중에 확인하거나 갱신된 브랜치와 대조하여 작업하고 싶은 경우에 대비하여 브랜치 "my-saved-work"에 저장됩니다.

첫 번째 예에서는 리모트리포의 이름이 "origin"이고 리모트리포의 "master"라는 이름의 브랜치가 로컬리포에서 현재 체크아웃된 브랜치와 일치한다고 가정하고 있습니다.

그나저나, 지금 당신이 처한 상황은 베어가 아닌 저장소의 현재 체크아웃된 분기에 푸시된 일반적인 경우와 매우 유사합니다.최근에 지역 리포트에 들어갔어요?그렇지 않다면 걱정할 필요가 없습니다. 다른 이유로 인해 파일이 예기치 않게 수정되었을 수 있습니다.그렇지 않은 경우, 베어 이외의 저장소(특히 현재 체크아웃된 브랜치에는 푸시하지 않는 것이 좋습니다)에 주의해 주십시오.

저는 (합격된 답변의 해결책)을 수행해야 했습니다.

git fetch origin
git reset --hard origin/master

그 뒤를 이어:

git clean -f

로컬 파일을 삭제하다

(실제로 삭제하지 않고) 삭제할 파일을 확인하려면:

git clean -n -f

먼저 git reset을 사용하여 이전에 가져온 설정으로 리셋합니다.HEAD응하는업 업업스스스 :

git reset --hard @{u}

「 」를 @{u} 그 한 형식입니다.@{upstream}리모트 리포와 브랜치의 이름을 명시적으로 지정할 필요가 없습니다.에서 Windows PowerShell 을 합니다."@{u}"( 옴옴표 ( )

다음으로 필요에 따라 git clean을 사용하여 추적되지 않은 파일을 삭제합니다.옵션으로,-x:

git clean -df

마지막으로 필요에 따라 최신 변경 사항을 가져옵니다.

git pull

git reset --hard HEAD실제로는 마지막으로 커밋된 상태로 리셋됩니다.HEAD라고 합니다.

여러 개의 커밋이 있는 경우 이 작업은 수행되지 않습니다.

원하는 작업은 오리진 선두 또는 원격 저장소로 리셋됩니다.난 아마 그냥 이런 걸 할 거야

git reset --hard origin/HEAD

그래도 조심해.하드 리셋은 쉽게 취소할 수 없습니다.Dan이 제안하는 대로 하고, 재설정하기 전에 변경 사항의 복사본을 분기하는 것이 좋습니다.

위의 모든 제안이 옳습니다.그러나 프로젝트를 실제로 리셋하기 위해서는, 많은 경우, 그 안에 있는 파일도 삭제할 필요가 있습니다..gitignore.

프로젝트 디렉토리를 지우고 리모트에서 다시 복제하는 것과 동등한 도덕성을 얻으려면 다음과 같이 하십시오.

git fetch
git reset --hard
git clean -x -d -f

경고:git clean -x -d -f원래대로 되돌릴 수 없으며 파일 및 데이터가 손실될 수 있습니다(사용을 무시한 경우 등)..gitignore를 참조해 주세요.

다음 명령을 사용합니다.이 명령어는 로컬 git에서 추적되지 않은 모든 파일도 삭제합니다.

git fetch origin
git reset --hard origin/master
git clean -d -f

이 질문에는 다음 두 가지 문제가 혼재합니다.

  1. 로컬 브런치를 리모트가 있는 지점까지 리셋하는 방법
  2. 영역, 「」를 「」로 .git status라고 말하다nothing to commit, working directory clean.

원스톱 답변은 다음과 같습니다.

  1. git fetch --prune (임의) 리모트리포의 로컬스냅샷을 업데이트합니다.추가 명령어는 로컬에서만 사용할 수 있습니다.
    git reset --hard @{upstream}로컬 분기 포인터를 리모트의 스냅샷이 있는 장소에 배치하고 인덱스와 작업 디렉토리를 커밋의 파일로 설정합니다.
  2. git clean -d --force git가 "working directory clean"이라고 말하는 것을 방해하는 추적되지 않은 파일 및 디렉토리를 제거합니다.

가 「」인 .origin그리고 당신이 관심있는 것은branch_name:

git fetch origin
git reset --hard origin/<branch_name>

지금 있는 ᄀ, ᄂ, ᄃ의 분기를 리셋합니다.origin로로 합니다.HEAD.

git fetch origin
git reset --hard origin/HEAD

구조:

git fetch origin는 리모트로부터 최신의 파일을 다운로드해, 아무것도 Marge 또는 베이스 변경하지 않습니다.

'하다'는git reset는, 을 합니다.<branch_name>방금 가져온 것으로 분기합니다.--hard을 지정하면 작업 트리 내의 합니다.origin/branch_name.

이것은 제가 정기적으로 직면하는 것입니다.볼프강은 위에서 제공한 대본을 어느 지점과도 협력할 수 있도록 일반화하고 있습니다.

또, 「확실한가」라고 하는 프롬프트와 피드백 출력도 추가했습니다.

#!/bin/bash
# reset the current repository
# WF 2012-10-15
# AT 2012-11-09
# see http://stackoverflow.com/questions/1628088/how-to-reset-my-local-repository-to-be-just-like-the-remote-repository-head
timestamp=`date "+%Y-%m-%d-%H_%M_%S"`
branchname=`git rev-parse --symbolic-full-name --abbrev-ref HEAD`
read -p "Reset branch $branchname to origin (y/n)? "
[ "$REPLY" != "y" ] || 
echo "about to auto-commit any changes"
git commit -a -m "auto commit at $timestamp"
if [ $? -eq 0 ]
then
  echo "Creating backup auto-save branch: auto-save-$branchname-at-$timestamp"
  git branch "auto-save-$branchname-at-$timestamp" 
fi
echo "now resetting to origin/$branchname"
git fetch origin
git reset --hard origin/$branchname

원점을 가져와 재설정하면 문제를 해결할 수 있습니다.

 git fetch origin
 git reset --hard origin/main

다음과 같이 리셋하기 전에 변경 내용을 저장할 수 있습니다.

git stash

리셋 후 변경을 되돌리려면 간단히 실행할 수 있습니다.

git stash apply

나는 했다:

git branch -D master
git checkout master

가지를 완전히 다시 세우다


주의: 필요한 브랜치를 삭제하려면 다른 브랜치로 체크아웃해야 합니다.

여기 가장 인기 있는 답변을 자동화하는 스크립트가 있습니다.브런치를 지원하는 향상된 버전은 https://stackoverflow.com/a/13308579/1497139을 참조하십시오.

#!/bin/bash
# reset the current repository
# WF 2012-10-15
# see https://stackoverflow.com/questions/1628088/how-to-reset-my-local-repository-to-be-just-like-the-remote-repository-head
timestamp=`date "+%Y-%m-%d-%H_%M_%S"`
git commit -a -m "auto commit at $timestamp"
if [ $? -eq 0 ]
then
  git branch "auto-save-at-$timestamp" 
fi
git fetch origin
git reset --hard origin/master

정답은

git clean -d -f

(디렉토리를 삭제하기 위해 (-d))가 낮게 평가되었습니다.감사합니다!

몇 로든 그것을은 '', '아니다', '아니다', '아니다', '아니다', '아니다', '아니다', '아니다', '아니다', '아니다', '아니다', '아니다', '아니다'를 사용하는 것입니다.git reset음음음같 뭇매하다

git reset --hard HEAD~2

나는 2개의 불필요한 커밋이 있었고, 그래서 2라는 숫자가 2개.리셋하는 커밋의 개수로 변경할 수 있습니다.

질문에 대한 답변 - 리모트 저장소 HEAD보다 5 커밋 앞서 있는 경우 다음 명령을 실행해야 합니다.

git reset --hard HEAD~5

변경 내용이 손실될 수 있으므로 주의하십시오.

이전 답변에서는 리셋할 브런치가 현재 브런치(체크 아웃)라고 가정합니다.논평에서 OP hap497은 지점이 실제로 체크아웃되었지만, 이는 최초 질문에서 명시적으로 요구되지는 않는다고 명확히 밝혔다.적어도 1개의 "복제" 질문이 있기 때문에 분기를 완전히 저장소 상태로 리셋합니다.이것은 분기가 체크아웃되었다고 가정하지 않습니다.대안은 다음과 같습니다.

지점 "mybranch"가 현재 체크아웃되지 않은 경우 원격 지점 "myremote/mybranch" 헤드로 재설정하려면 다음과 같은 낮은 수준의 명령을 사용할 수 있습니다.

git update-ref refs/heads/mybranch myremote/mybranch

이 메서드는 체크아웃된 브랜치를 그대로 유지하며 작업 트리는 변경되지 않습니다.두 번째 논거가 무엇이든 간에 마이브랜치의 머리를 다른 약속으로 옮길 뿐이다.이는 여러 지점을 새 원격 헤드로 업데이트해야 하는 경우에 특히 유용합니다.

이 또, 「 」, 「 」, 「 」, 「 」gitk또는 소스 및 대상을 다시 확인하는 유사한 도구입니다.현재 브랜치에서 실수로 이 작업을 수행하게 되면(git로 인해 이 작업이 중단되지 않을 경우), 새로운 브랜치 콘텐츠가 변경되지 않은 작업 트리와 일치하지 않기 때문에 혼란스러울 수 있습니다(브런치를 수정하고 이전 위치로 다시 업데이트하십시오).

3개의 명령어만으로 동작합니다.

git fetch origin
git reset --hard origin/HEAD
git clean -f

자주 사용하는 것은 다음과 같습니다.

git fetch upstream develop;
git reset --hard upstream/develop;
git clean -d --force;

브랜치에 을 가하지 해 하는 것을 이름에는 「」/「」)이 부가되어 있습니다.feat/,chore/,fix/ 변경만 .다른 지사에 대해서도 마찬가지로 공헌하고 있습니다.따라서 위의 내용은 다른 사용자가 커밋한 브랜치에 변경을 커밋하여 리셋할 필요가 있는 경우에만 사용하십시오.그렇지 않으면 앞으로는 다른 사람이 푸시하는 브랜치에 푸시하는 것을 피하여 체크아웃 후 체크아웃된 브랜치를 통해 해당 브랜치에 푸시합니다.

로컬 브런치를 업스트림브런치의 최신 커밋으로 리셋 하는 경우는, 다음의 조작이 가능합니다.

않은 는, 「원점」을 사용해 주세요.그렇않 、 경경,,,, 、 ,,해요요요 。git remote add upstream <insert URL> GitHub repo/또는 GitHub repo가 git remote add origin <insert URL of the forked GitHub repo>.

git remote --verbose

git checkout develop;
git commit -m "Saving work.";
git branch saved-work;
git fetch upstream develop;
git reset --hard upstream/develop;
git clean -d --force

GitHub에서는 로컬과 같은 이름으로 브런치를 체크 아웃하여 작업을 저장할 수도 있습니다.단, 오리진 개발이 로컬의 saved-work 브런치와 같은 변경을 가지고 있는 경우에는 이것이 필요하지 않습니다.예를 들어 develope 브랜치를 사용하고 있습니다만, 기존의 브랜치명을 사용할 수 있습니다.

git add .
git commit -m "Reset to upstream/develop"
git push --force origin develop

그런 다음 충돌이 있는 동안 이러한 변경 사항을 다른 분기와 병합해야 하는 경우 개발 중인 변경 사항을 보존하려면 다음을 사용하십시오.

git merge -s recursive -X theirs develop

사용 중

git merge -s recursive -X ours develop

변경을 합니다. 않으면 을 mergetool과 함께 합니다.git mergetool.

모든 변경 사항을 종합하면 다음과 같습니다.

git commit -m "Saving work.";
git branch saved-work;
git checkout develop;
git fetch upstream develop;
git reset --hard upstream/develop;
git clean -d --force;
git add .;
git commit -m "Reset to upstream/develop";
git push --force origin develop;
git checkout branch_name;
git merge develop;

업스트림할 수 있습니다.upstream/develope "커밋", "커밋", "커밋", "커밋"을 할 수 있습니다.[ My ] 및합니다([Oh My Zsh]에서 ).이것은 커밋할 것이 없고, 작업 디렉토리가 깨끗한 것을 나타냅니다(이것도 확인 또는 확인 가능).git status 추가될 수 UML의 을 풀 수 origin develop로로 합니다.upstream develop(일부러)

최상위 등급의 답변이 예상대로 내 로컬 코드를 재설정하지 않았습니다.

  1. 오늘날에는 대개 마스터가 주를 이룬다.
  2. 추적되지 않은 파일로는 아무 일도 할 수 없습니다.

대신:

  1. 디폴트 리모트브런치 이름 확인(Git이 아니니 GitHub에서 확인) 후 아래 4단계에서 main 또는 master를 이것으로 바꿉니다.

  2. 정보를 git stash -u

  3. 로부터의 git fetch origin

  4. 위의 )git reset --hard origin/main

「 」로 , 「 」HEAD의 양쪽 디렉토리와 인덱스의 양쪽 모두에 대해 "State"git reset --hard HEADHEAD^은, 의 대 이 있습니다.--hard

이 파일들이 수정된 상태로 표시되는 이유에 대해서는 하드 리셋이 아닌 소프트 리셋을 한 것 같습니다..HEAD마치 무대에 올려진 것처럼 보이도록 커밋합니다.을 사용법

리셋과 클리닝은 로컬 git repo에서 추적되지 않고 수정된 파일에는 영향을 주지 않는 것 같습니다(위의 모든 옵션을 시도해 보았습니다).이에 대한 유일한 해결책은 로컬 repo를 관리하여 원격에서 다시 복제하는 것이었습니다.

다행히 신경 쓸 만한 다른 지점은 없었어요.

xkcd: Git

제가 본 모든 경우에 효과가 있는 유일한 해결책은 삭제하고 다시 눕히는 것입니다.다른 방법이 있을 수도 있지만, 분명히 이 방법으로는 구태의연한 상태를 남길 가능성이 없기 때문에, 저는 그것을 선호합니다.bash one-liner는 git에서 자주 일을 망치면 매크로로 설정할 수 있습니다.

REPO_PATH=$(pwd) && GIT_URL=$(git config --get remote.origin.url) && cd .. && rm -rf $REPO_PATH && git clone --recursive $GIT_URL $REPO_PATH && cd $REPO_PATH

* .filename 파일이 손상되지 않은 것으로 가정합니다.

기능 브랜치를 만드는 것을 잊어버리고 실수로 마스터에 직접 커밋한 적이 있습니까?

기능 브랜치를 생성하여 워크트리(로컬 파일 시스템)에 영향을 주지 않고 마스터를 되돌리면 빌드, 테스트 및 파일 잠금 문제를 방지할 수 있습니다.

git checkout -b feature-branch
git branch -f master origin/master

먼저 확인하겠습니다.git status」의 그것들을 해 주세요.있을 경우 저장하십시오.

다음으로 다음을 실행합니다.

git fetch
git reset --hard @{push}

합니다.이 브랜치에서는, 재음음에 로 리셋 .git push 기능은 나 사용하기에 git config push.default current을 사용하다를 들어, 브런치가 「」인 .abc는 「」입니다.origin이 됩니다.origin/abc.

자세한 내용은 Git 리비전을 참조해 주세요.@{push}

  • 수정되지 않은 변경 사항이 있기 때문에 오류 발생.
  1. 이렇게 해서 쓰면 돼요', '아저씨', '아저씨' 이렇게git stash
  • 이렇게 하면 나중에 사용할 수 있도록 수정되지 않은 변경 내용이 저장된 후 작업 복사본에서 되돌아갑니다.
  • 변경을 이 변경을 하다를 사용하시면 .git stash apply
  1. 하면 .git pull
  • 리모트 리포트로부터 최신의 코드를 취득합니다.

로컬 변경 내용을 저장해도 상관없지만 오리진/HEAD와 일치하도록 리포지토리를 업데이트하려면 로컬 변경 내용을 저장한 후 다음을 수행할 수 있습니다.

git stash
git pull

언급URL : https://stackoverflow.com/questions/1628088/reset-local-repository-branch-to-be-just-like-remote-repository-head

반응형