현재 변경 사항이있는 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.