현재 변경 사항이있는 Git 브랜치 작성


848

나는 나의 일이 쉬울 것이라고 생각하면서 마스터 지점 에서 일하기 시작했습니다 . 잠시 후 더 많은 작업이 필요하다는 것을 깨달았고이 모든 작업을 새로운 지점에서 수행하고 싶습니다.

새로운 브랜치를 만들고 더티 마스터 없이 어떻게 모든 변경 사항을 가져갈 수 있습니까?




4
그렇습니다. 이것은 중복 된 질문이지만, 표현이 너무 다르기 때문에 이것이 유지하는 것이 유용하다고 생각합니다. 키워드는 branch current changesvs existing uncommited branch입니다. 영어를 구사하는 사람은 즉시 같은 언어임을 알 수 있지만 검색 엔진은 그렇지 않을 것입니다. 이 질문을 유지하십시오.
— Scott Biggs

답변:


691

아직 커밋하지 않은 경우 (1 : 분기) 및 (3 : 체크 아웃)만으로 충분합니다.
또는 하나의 명령으로 :git checkout -b newBranch

git reset매뉴얼 페이지 에서 언급했듯이 :

$ git branch topic/wip     # (1)
$ git reset --hard HEAD~3  # (2)  NOTE: use $git reset --soft HEAD~3 (explanation below)
$ git checkout topic/wip   # (3)
  1. 커밋을했지만 " master"브랜치 에있는 것은 너무 이른 것입니다 . 토픽 브랜치에서 계속 연마하고 싶기 때문에 " topic/wip"브랜치에서 현재 브랜치를 생성 하십시오 HEAD.
  2. master세 가지 커밋을 제거하기 위해 분기를 되감습니다 .
  3. " topic/wip"분기로 전환 하고 계속 작동하십시오.

참고 : git reset --hard명령 의 "파괴적"효과로 인해 (인덱스 및 작업 트리가 재설정됩니다. 작업 트리에서 추적 된 파일의 변경 사항 <commit>은 삭제됩니다) 오히려 다음과 같이 진행합니다.

$ git reset --soft HEAD~3  # (2)

이렇게하면 개인 파일 (인덱스에 추가되지 않음)이 손실되지 않습니다.
이 --soft옵션은 인덱스 파일이나 작업 트리에 전혀 영향을 미치지 않습니다 (그러나 <commit>모든 모드와 마찬가지로 헤드를으로 재설정 ).


함께 힘내 2.23+ 의 새로운 명령을git switch (같은 종류의 하나 개의 라인에서 분기를 만들 것 reset --hard때문에 그 효과 조심) :

git switch -f -c topic/wip HEAD~3

6
다른 사람들이 가져 오는 저장소의 마스터 브랜치에 주제 자료를 커밋 한 경우에는 이것이 좋은 아이디어가 아닐 수도 있습니다. 또는 최소한 리셋을해야하는 경우 사람들에게 자신이하는 일을 알려 주어야합니다. 따라서 다음 풀에서 오는 경고는 너무 충격적이지 않습니다.
— Andrew Walker

39
미래 독자들을위한 참고 사항 : 아래에서 위로 읽거나 전체 내용을 읽으십시오. git reset --hard변경 사항을 해결하고 아직 커밋되지 않은 경우 복구 할 수 없습니다! 당신은해야 할 수도 있습니다git checkout -b …
— 콘라드 마이어에게

3
@ConradMeyer 좋은 지적입니다. 나는 답변을 편집하고 git checkout -b첫 번째를 넣었습니다 .
— VonC

5
왜 주제 / 지점 ?? 왜 branchname만이 아니라,이 명명에 특별한 이유가 있습니까? 궁금해
— Sam Stoelinga

1
@It은 네임 스페이스 명명 규칙 ( 계층 적 분기 이름을 사용하여 네임 스페이스를 정의 하여 분기를 쉽게 분류하는 방법 )입니다 : stackoverflow.com/a/2527436/6309 . 예를 들어, 문제 : randyfay.com/content/... . 분기 이름을 지정할 때 계층 구조를 사용할 필요가 없습니다. topic_wip)
— VonC 2016 년

269

이 질문에서 언급했듯이 : 힘내 : 마스터에서 태그가 지정되지 않은 / 커밋되지 않은 변경 사항으로 분기를 만듭니다 . 숨김은 필요하지 않습니다.

그냥 사용하십시오 :

git checkout -b topic/newbranch

커밋되지 않은 작업은 새 지점으로 이동합니다.

당신이 밀어하려고하면 다음 메시지가 나타납니다

치명적 : 현재 분기 기능 / NEWBRANCH에 업스트림 분기가 없습니다. 현재 분기를 누르고 리모콘을 업스트림으로 설정하려면

git push --set-upstream origin feature/feature/NEWBRANCH

원격으로 분기를 작성하도록 제안 된대로 수행하십시오.

git push --set-upstream origin feature/feature/NEWBRANCH


3
새 작업을 커밋 할 때가 아니라 새 분기를 푸시하는 경우에만 '업스트림 분기 없음'오류가 발생합니다.
— sam

2
@sam 나는 그에 따라 답변을 수정했습니다
— Nick Kennedy

73

이 단계를 따르세요:

  1. 새 지점을 만듭니다.

    git branch newfeature
    
  2. 새 지점 체크 아웃 : (이는 작업을 재설정하지 않습니다.)

    git checkout newfeature
    
  3. 이제이 새로운 브랜치에서 작업하십시오.

    git commit -s
    

위의 단계를 사용하면 원래 분기를 깨끗하게 유지하고 'git reset --hard'를 수행하지 않아도됩니다.


3
3 단계에서 '-s'는 무엇을합니까?
— Scott Biggs

12
@ScottBiggs 불필요하지만 일부 사람들이 따르는 연습입니다. 그것은이다 "--signoff"에 대한 짧은 하고 당신이 커밋 용서 알고 로그를 찾고 미래의 사람들을 위해 커밋에 사용자 이름을 추가합니다.
— Frank Bryce

5
좋은 답변이지만 -s3 단계 에서는 필요하지 않습니다.
— Mohammed Ali

나는 의견에서 새로운 것을 배웠다. Thanks @FrankBryce
— Kasparov92

30

커밋을 아직 수행하지 않았으므로 모든 변경 사항을 숨김에 저장하고 새 분기로 만들고 전환 한 다음 해당 변경 사항을 작업 트리에 다시 넣을 수 있습니다.

git stash  # save local modifications to new stash
git checkout -b topic/newbranch
git stash pop  # apply stash and remove it from the stash list

9
또는 VonC가 'git checkout -b newbranch'를 지적하고 숨김을 건너 뛸 때
— willcodejavaforfood

@ will : 새 브랜치를 만들면 커밋되지 않은 변경 사항을 덮어 쓸 것이라고 생각했지만 그렇지 않은 경우 숨김을 건너 뛸 수 있습니다.
— Ether

1
자식이고, 나는 그것을 시도하고 괜찮 았는데 매우 사려 깊고 늘 덮어 쓰기 로컬 변경
— willcodejavaforfood

2
나는 그것이 오타라고 생각하지만 git stash push명령이 아닌 단지 머리 입니다. 아마도 git stash또는 을 사용하고 싶을 것 git stash save입니다. 추적에 추적되지 않은 파일을 포함 시키려면 --include-untracked옵션을 사용하십시오 . 마찬가지로, 추적되지 않은 파일과 무시 된 파일을 모두 숨김에 포함하려면 --add옵션을 대신 사용하십시오 .
— 6

지점을 이미 만든 경우에 도움이됩니다.
— 확실히

13

새 브랜치에 새로운 변경 사항을 추가하고 원격으로 푸시하려면 :

git branch branch/name
git checkout branch/name
git push origin branch/name

종종 비트 버킷에 새로운 브랜치 / 커밋이 보이지 않는 이유는 무엇입니까?

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.