Git-잘못된 브랜치에서 작업-기존 토픽 브랜치에 변경 사항을 복사하는 방법


333

나는 프로젝트에서 일하고 있지만 불행히도 잊어 버렸습니다. 내 지점으로 전환하는

마스터에서 커밋 하지 않고 마스터에서 내 브랜치 (예 : branch123 )로 수행 한 작업 (3 파일)을 어떻게 복사 할 수 있습니까?

답변:


540

필요한 것은 다음과 같습니다.

git stash
git checkout branch123
git stash apply

그런 다음 마스터 브랜치를 건드리지 않고 자신의 브랜치로 돌아와야합니다.


6
ok- 나는 그것을 실행했지만 master (git checkout master)로 다시 전환하고 git status를 실행할 때 동일한 파일이 여전히 "수정"됩니다.
Alex

5
현재 브랜치 (마스터)와 토픽 브랜치 (branch123)의 차이점이 로컬에서 수정 한 파일에없는 경우 실제로 숨길 필요가 없습니다. Git을 사용하면이 경우 주제 분기를 간단히 확인할 수 있습니다.
Cascabel

3
@Alex : 그렇습니다. 이것은 커밋을 포함하지 않습니다. stash로컬 수정 사항을 저장 한 다음 stash apply다시 가져옵니다.
Cascabel

6
어떻게 마스터 브랜치에서 제거 할 수 있습니까?
Alex

7
git reset --hard HEAD마스터 브랜치에 마지막 커밋으로 돌아갑니다.
gnab

46

허용되는 답변이 가장 철저하지만 단순화 할 수있는 특별한 경우가 있습니다. 당신이 작업 디렉토리에 수정 한 파일이 모두 동일한 경우 masterbranch123간단히 할 수있는

git checkout branch123

기본 동작은 checkout작업 디렉토리에서 수정 된 파일을 덮어 쓰지 않는 것이므로 아무 것도 숨기지 않아도 되므로 아무 것도 잃지 않습니다. (이것은 실제로 Cascabel의 첫 번째 의견에서 언급되었습니다)

다른 사람들이 의견에서 언급했듯이 branch123아직 존재하지 않으면 할 수 있습니다

git checkout -b branch123

내가 여기서 찾은 것을 기반으로 합니다 .


3
또는 새로운 지사를 만들려면git checkout -b newbranch
Phil Mitchell

2
이것은 숨김보다 나에게 더 효과적이며 훨씬 쉽습니다. 감사!
Matthias

31
이 작동하지 않습니다. Git은 "변경 사항을 커밋하거나 숨기고 분기를 전환하기 전에"라는 메시지를 표시합니다.
dsharew

1
@DegenSharew : 예. 작업 디렉토리에서 수정 한 파일이 master및 에서 동일하지 않은 경우가 있습니다 branch123. 내 편집 답변을 참조하십시오.
Russel Dirks

1
이것은 나를 위해 잘 작동했습니다. 아직 지점을 만들지 않았으므로 git checkout -b newbranchname을 수행했습니다. 내 변경 사항은 해당 지점에 자체적으로 표시되었습니다.
dex3703


0

파일을 체크 아웃하는 동안 새 분기를 만들 수는 있지만 기존 분기를 체크 아웃 할 수 없으므로 임시 분기를 사용하여 다음 트릭을 발견했습니다.

이 시나리오는 적어도 VS 2015 Git 플러그인에서 작동하지만 대부분의 git 도구에서 작동합니다.

  1. 마스터에서 파일을 체크 아웃하고 변경하십시오 (ups !, 잘못된 브랜치)
  2. master에서 새 브랜치 "temp"(또는 선택하지 않은 이름)를 만듭니다. 체크 아웃 된 파일은 이제 마스터가 아닌 임시로 체크 아웃됩니다.
  3. 온도 변경 사항을 확인하십시오 (마스터는 손대지 않습니다)
  4. 이제 모든 것이 체크인되었으며 기존 지점을 체크 아웃 할 수 있습니다. 원하는 브랜치 (내가 변경을 시작하려는 브랜치)를 확인하십시오 3.5 Git Rebase
  5. 원하는 브랜치에 temp를 병합하십시오. 이제 변경 사항이 올바른 지점에 있습니다.
  6. 더 이상 필요하지 않으므로 임시 지점을 삭제하십시오.

편집 : 병합을 수행하기 전에 임시 분기의 리베이스 (git rebase --onto)를 수행해야한다는 것을 알았습니다. 그렇지 않으면 마스터의 변경 사항이 병합에 포함됩니다. 위의 추가 단계 3.5. rebase에 대한 자세한 내용은 여기를 참조하십시오 : https://git-scm.com/book/en/v2/Git-Branching-Rebasing


제공하는 솔루션에 대한 설명을 조금 더 추가하여 답변을 더 자세히 설명해 주시겠습니까?
abarisone

의견을 보내 주셔서 감사합니다. 이 솔루션은 매우 간단하지만 숨김 대신 임시 분기가 사용된다는 점을 제외하고 "스 태쉬"솔루션과 동일한 원칙을 따릅니다. 이것은 GIT 플러그인에서 숨김을 지원하지 않기 때문에 적어도 Visual Studio 사용자에게 더 편리합니다
Pasi
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.