Git Branch (local/remote)


「branch」という言葉は枝を意味しますが、よく考えると枝は中心の幹から周囲に伸びていると考えられます.gitの分岐もあまり違いはありません.
中心の分岐があり、ここから両側まで(もちろん方向性とはあまり関係ありません).伸びた小枝がある.どうしてこんなものを使うの?ブランチの作成とは、プロジェクトに新しい独立した空間を作成することです.
通常、デフォルトのbranchはmaster brunchと呼ばれ、ユーザーはbranchコマンドを使用して複数のbranchを作成できます.

さらに、作成したブランチを他のブランチとマージして、作業内容を新しいブランチに再マージできます.
次の図は、ブランチを使用して複数のタスクを同時に処理する場合のワークフローを示しています.

複数の人が同時に作業するときに他の人の作業に影響を与えたり影響を与えたりしないように、まずメインブランチに自分の作業専用ブランチを作成します.その後、それぞれの作業が完了すると、作業を完了した人は自分のブランチの変更をメインブランチに適用します.これにより、他人の仕事の影響を受けずに、独立して特定の仕事を実行し、結果を集中させることができます.このようにして作業すると、「作業単位」(すなわち分岐)の作業記録が中間に残るため、問題が発生すると、作業の原因を特定したり、対応策を講じたりすることが容易になります.

朝食を使う


  • 新しい朝食の作成git branch  コマンドを使用して新しいブランチを作成できます.
    以前働いたことがあります.  master  ブランチ  testing  という名前のブランチを作成します.
    $ git branch testing
  • 한 커밋 히스토리를 가리키는 두 브랜치
    
    지금 작업 중인 브랜치가 무엇인지 Git은 어떻게 파악할까?
    
    다른 버전 관리 시스템과는 달리 Git은 HEAD 라는 특수한 포인터가 있다. 이 포인터는 지금 작업하는 로컬 브랜치를 가리킨다. 브랜치를 새로 만들었지만, Git은 아직 master 브랜치를 가리키고 있다. 이렇듯 git branch 명령은 브랜치를 만들기만 하고 HEAD가 가리키는 브랜치를 옮기지 않는다.
    현재 작업 중인 브랜치를 가리키는 HEAD

  • ブランチの移動git branch  コマンドはブランチを作成するだけで、HEADが指すブランチは移動しません.
    では、ブランチはどのように移動しますか?git checkout  コマンドを使用して他のブランチに移動できます.
    $ git checkout testing
    
    // HEAD는 testing 브랜치를 가리킨다
  • HEAD가 testing 브랜치를 가리킴
    java
    $ vim test.rb
    $ git commit -a -m 'made a change'
    HEAD가 가리키는 testing 브랜치가 새 커밋을 가리킴
    
    새로 커밋해서 testing 브랜치는 앞으로 이동했다. 하지만, master 브랜치는 여전히 이전 커밋을 가리킨다. 그럼 이번엔 master 브랜치로 되돌아가본다.
        java
        $ git checkout master
    HEAD가 checkout 한 브랜치로 이동함
    
    방금 실행한 명령이 한 일은 두 가지이다
    
    **`master`** 브랜치가 가리키는 커밋을 HEAD가 가리키게 하고, 워킹 디렉토리의 파일도 그 시점으로 되돌려 놓았다. 앞으로 커밋을 하면 다른 브랜치의 작업들과 별개로 진행되기 때문에 **`testing`** 브랜치에서 임시로 작업하고 원래 **`master`** 브랜치로 돌아와서 하던 일을 계속할 수 있다.
    
    브랜치를 이동하면 워킹 디렉토리의 파일이 변경된다.
    
    이전에 작업했던 브랜치로 이동하면 워킹 디렉토리의 파일은 그 브랜치에서 가장 마지막으로 했던 작업 내용으로 변경됩니다. 파일 변경시 문제가 있어 브랜치를 이동시키는게 불가능한 경우 Git은 브랜치 이동 명령을 수행하지 않는다.
    
    이번에는 **`master`** 브랜치에서 파일을 수정하고 커밋을 해본다.
       java
        $ vim test.rb
        $ git commit -a -m 'made other changes'
    이렇게 되면 프로젝트 히스토리는 분리되어 진행한다.(브랜치가 갈라진다.)
    
    두 작업 내용은 서로 독립적으로 각 브랜치에 존재합니다. 커밋 사이를 자유롭게 이동하다가 때가 되면 두 브랜치를 Merge 하면 된다.
    갈라지는 브랜치
    
    실제로 Git의 브랜치는 어떤 한 커밋을 가리키는 40글자의 SHA-1 체크섬 파일에 불과하기 때문에 만들기도 쉽고 지우기도 쉽다. **새로 브랜치를 하나 만드는 것은 41바이트 크기의 파일을(40자와 줄 바꿈 문자) 하나 만드는 것에 불과하다.**
    
    브랜치가 필요할 때 프로젝트를 통째로 복사해야 하는 다른 버전 관리 도구와 Git의 차이는 극명하다. 통째로 복사하는 작업은 프로젝트 크기에 따라 다르겠지만 수십 초에서 수십 분까지 걸린다. 그에 비해 Git은 순식간이다.
    
    게다가 커밋을 할 때마다 이전 커밋의 정보를 저장하기 때문에 Merge 할 때 어디서부터(Merge Base) 합쳐야 하는지 알수있다. 이런 특징은 개발자들이 수시로 브랜치를 만들어 사용하게 한다.