ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Git] Git 기초와 활용2 branch/conflict/log (우분투 터미널)
    하면서 이런이런것을 공부했다[연구노트]/Git, Docker, Pytorch 2020. 2. 17. 22:57

     

    아래의 내용들은 이 동영상 강의 내용을 정리한 내용입니다.

    https://www.youtube.com/playlist?list=PLRx0vPvlEmdD5FLIdwTM4mKBgyjv4no81

    따로 공부하면 좋은 사이트

    https://backlog.com/git-tutorial/kr/stepup/stepup2_1.html

     

    ps. terminal에 작성한 gedit은 우분투 기본 텍스트 편집기 입니다. (윈도우의 메모장)

    1. Branch 다루기

    Master branch : 자동적으로 생성되고, 가장 중심이 되는 Branch이다. 

    다음과 같은 구조로 프로젝트가 이어나가도록 한다.

    Merge : 합치기. 나눈 branch를 하나로 합치는 작업.  위의 사진의 2번째 노드에서 다른 branch와 만나 융합하는 작업이다.

     

    Branch 관련 명령어

    $ git branch

    다음과 같이 별다른 branch를 만들지 않았다면, master만 있다. 

    $ git branch <NewBranchName>

    새로운 branch를 만드는 방법.

    $ git checkout NewBranchName
    $ git branch

    내가 진짜 작업할 branch를 고르는 명령어

    만약 파일을 수정하고, add하고 commit까지 해줬더라면, HEAD가 새로운 branch만 가리킨다.

    만약 에러가 있어서 HEAD가 master와 origin/master까지 모두 가리키고 있다면, remote repo에 branch만들어주면 된다. 

     

    remote에도 나의 branch 추가해주기

    $ git push --set-upstream origin junhaB

    다음과 같이 한번 해주면 remote repository에 branch가 추가된것을 확인할 수 있다. 

    그리고 각각의 branch에 들아가서  add, commit을 따로따로 수행할 수 있다. 

    내가 어떤 branch에 들어가 있는지에 따라서, 파일들의 내용들이 완전히 바뀌는 것을 확인할 수 있다. 

    $ git log
    $ git status  #내가 작업하는 branch가 어디인지 확인하능.

    를 통해서 어디에서 작업하고 있고 어디에서 수정했는지 확인이 가능하다, (HEAD가 가리키는 방향)

    branch 삭제하는 방법.(local repo에서만 삭제 된다.)

    $ git branch -d <branchname>
    $ git branch -D junhaB   # junhaB에서 수정된 내용이 있더라도 commit을 안했더라도 강제 삭제

    remote repo의 branch도 삭제하기

    $ git push origin --delete <branchname>

    merge

    $ git checkout master  # master branch에 먼저가서
    $ git merge <newBranch>  # 이것과 융합한다. (합친다) 두개를 같게 만든다. 
    $ git merge <newBranchName> --no-f   # git log graph를 그렸을때 branch에 대한 정보가 추가 된다.

    2. Branch사이의 충돌 처리

    2개의 branch에서 서로 다른 파일을 수정했다면, merge할 때, conflict(충돌)이 발생하지 않는다.

    하지만 같은 파일을 수정했었더라면, merge할 때 충돌이 발생한다. 

    다음과 같이 같은 파일을 변경하고 Master로 돌아가서 merge를 시행하면, 어느 파일에 충돌이 발생한지 나온다. 

    충돌한 파일에 들어가면  <<<< 부터 >>>> 가 충돌한 부분이고, 

    master의 상태로 놔두고 싶다면, 초록색 박스를 남기고 빨간색 부분을 다 지우고

    NewBracnh의 상태로 놔두고 싶다면, 파란색 박스를 남기고 빨간색 부분을 다 지우면 된다.

     

    그리고 다음과 같이 그냥 다시 merge하면 안된다. add와 commit과정을 다시 하고 merge를 해야한다.

    그리고 변경한 내용을 전부 remote repository에 올리려면 다음의 명령어

    $ git push -f

     

     

    3. Remote Repository 관리하기

    $ git remote

    해당 local repo에서 remote와 관련된 것이 무엇인지 보여준다.

    기본적으로 origin을 보여준다. 

    origin에 대한 자세한 정보를 보고 싶다면, 

    $ git remote show origin

    을 사용한다.

     

    일반적으로 하나의 local repo와 하나의 remote repo를 연동시켜 놓는다.

    하지만 하나의 local repo와 여러개의 remote repo를 연동 시켜 놓는것도 가능하다.

    이때 사용가능한 명령어들은 다음과 같다. 

    $ git remote add test  # 새로운 remote repo와 연결
    $ git remote rename test temp # remote repo이름 바꿈
    $ git remote -v # 전체 연결된 remote repo들을 확인해본다.
    $ git log origin/master  # 특정 remote repo의 특정 branch에 대한 log를 확인하는 방법 
    $ git log temp/junhaB  # 특정 remote repo의 특정 branch에 대한 log를 확인하는 방법

    하지만 위에서 말했듯이 일반적인 경우에 local repo와 remote repo를 하나씩 연동하기 때문에

    이 명령어들은 필요할때 찾아봐서 이용하면 된다. 즉 몰라도 된다.ㅎㅎ

     

     

    4. Log 다루기

    기본 적으로 다음의 명령어로 log를 확인할 수 있다. 

    $ git log
    $ git log --stat   # 어떤 코드에 얼마나 많은 양의 수정을 했는지 그려준다 

    -p 옵션

    $ git log -p

    정확히 어떤 변경을 했는지, 코드 내부의 내용까지 보여주면서 log정보를 보여준다. 

     

    pretty옵션

    $ git log --pretty=oneline
    출력 결과
    1a19ea5a514a2525815ec23b87bb6f2cd8b4781b (HEAD -> master, origin/master) commend
    ad875c560f0f6ce50e791efe6d1c2a9b51c73b45 commend
    3793893ad7f56190be06b916ed3b1cc67443108a add line of aa
    42b8cb2c1a42b8c12bf4d4f47e67c5ba6236ac0e add junha.py. 수정 readme
    1916e39cf972406de7f89407ab35587e450342d0 first commit[readme.md]

    commit했던 것들을 깔끔하게 보여준다. 

    pretty에 대한 공부는 아래의 페이지를 이용하면 좋다.

    http://www.dreamy.pe.kr/zbxe/CodeClip/3766623

    복잡하면 이것만 사용하기 : 

    $ git log --pretty=format:"%h -> %an : %s" --graph

    그리고 아래의 명령어를 사용해서 내가 원하는 commit으로 돌아갈 수 있다.

    $ git reset --hard <commit번호>

    reset한 것을 다시 원래 대로 돌리고 싶다면 다음의 명령어를 사용한다. (by )

    $ git reflog
    # 출력값 확인하기
    $ git reset --hard HEAD@{위의 출력에서 하나 선택}

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    댓글

Designed by Tistory.