ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [git] git clone, rebase개념, pull, push
    et al/Docker&git 2023. 12. 5. 21:04

    (추후 정리 예정)

    head

    head를 detach하게 되면 아래와 같아진다.

    paremt는 head가 가리키는 노드가 부모가 된다.

    head가 가리키게 된다.

    exp branch를 만들면 다음과 같다.

    만약 main을 그대로 둔 채로 commit하면 main이 움직이게 되므로 실험적인 가지의 의미가 퇴색된다.

    checkout은 head를 바꾸고, reset은 branch를 바꾼다.

    git reset --hard 커밋id

     

    커밋 메세지 변경이 가능하다.

    git commit --amend -m vv2

    커밋 id가 변경된다.

    기존 c는 삭제된 효과가 있다.

     

    merge시.

    exp의 변화를 main에 주고자 할 때. main을 가리키는 상황에서 ,exp를 병합.

     exp에 마우스를 대고 병합한 건 branch 이름으로 만들어지고 exp의 메세지에서 병합한 건 커밋 id로 메세지가 작성된다.

    병합시 커밋메세지 바꾸지 않는 게 국룰

     

    3-way-merge 활용은 

    rebase, revert, cherry-pick

     

    merge가 너무 많으면 merge hell !!

    rebase의 일부 기능 : 실제로 병렬로 작성했으나 거짓말로 직렬로 작성된 것처럼 하는 것. -> 타임라인별로 보기 편하게 하고 싶을 때.

     

     

     

    * rebase

    main을  exp로 rebase해

     

    이건 잘못한 경우이다.

    아래처럼 바꾸는 게 원래 의도대로 바꾼 것이다.

    (아래 가지 두개는 삭제 효과)

    rebase는 merge 이후에 적용하는 것이 아니라 merge와 다른 결로 병합하는 방법임.

    무엇이 base가 되는 것인지 잘 생각해야한다.(base는 계속 바뀜)

     

    * cherry-pick

    특정 버전의 변화만 가져오고 싶을 때 사용.(우리의 구현체에서 특정 커밋 하나만 병합하고 싶을 때 사용)

    3-way merge를 할 때 항아리가 base이고,  풍선이 변화이다.

    우는 아이에게서 버전을 만든다.

     

    * 깃허브 연동

    or create는 저장소부터 만드는 거

    or push는 저장소가 있을 때 만드는 거

     

    로컬과 클라우드(깃허브)를 연결할 때 로컬에 깃허브 주소를 넘겨줘야한다.

    깃허브 주소는 외우기 힘드므로 origin으로 이름을 설정해서 넣어줌.

    이름을 설정하는 이유는 여러 주소를 연결할 수 있기 때문이다.

     

    remote repository에 push해야 한다.

    잘 연결 됐고 push하면 

    git log 시 (HEAD -> master, origin/master)가 붙는다.

    origin/main은 remote tracking branch이다. git이 알아서 관리하는 애로, 로컬의 마지막 push상황을 기록해놓는다.

    이미 push한 건 수정하면 안 된다!!

    git log는 head를 start pointing으로 찾는다.

    git log --all 해야 다 보인다.

    git log --all --oneline 

    git log --all --oneline --graph

    git log --all # 모든 로그가 다 보인다.
    
    git log --all --oneline # 한줄로 요약해서 보여준다.
    
    git log --all --oneline --graph # 그래프로 보여준다.

     

     

    push 전에 위와 같이 로컬에 B를 만든다.

    push를 하면 위 사진처럼 된다.

     

    * clone

    source control에서 clone repository를 누르고 폴더를 정해준다.

     

     

     

    clone = init + remote add REPO_URL + pull

    할 때마다 지역 저장소가 생기는 거다.

     

    원격저장소의 헤드가 L3가 되었다. 쓸모 없는 정보이다.

     

    * pull $ sync changes

    pull로 변경 사항을 다운 받고

    push로 github에 올릴 수 있다.

    sync changes = pull + push

     

    * conflict는 내용과 연관된것이고, push pull 할 때 message가 겹친다고 문제생기지 않는다.

     

    * 서로 다른 로컬 레포지토리에서 변경사항이 있을 경우 어떻게 진행될까?

     

     

    왼쪽만 push하면 위 그림과 같다.

    이 상황에서 오른쪽 사람이 push하려고 하면 rejected 된다.

    그래서 오른쪽 사람은 L4를 로컬로 가지고 

    pull = fetch + merge

    fetch는 원격 저장소의 

     

    오른쪽 사람이 fatch를 하면 원 저장소에 있는 L5를 가져온다. -> fetch는 절대로 conflict가 날 수 없다.

     

    이후 merge를 하면 위아래와 같이 된다.

     

     

     

    * github에서 공동 레포지토리를 생성하는 방법

     

     

     

     

     

     

     

     

     

     

     

    댓글

Designed by Tistory.