본문 바로가기
TIL

[TIL] 2025.01.03(금) - git 학습 보충

by 요호유후 2025. 1. 4.
반응형

 

금일 진행사항

1. Git 학습

    - reset 명령어의 옵션들 (hard, soft, mixed)

    - log 명령어

    - merge

    - rebase

    - cherry-pick

    - conflict (병합 충돌)

    - branch 전략들

 

 

각 진행사항별 상세내용

 1. Git 학습

   (1) reset 명령어의 옵션들

        1) soft : 커밋이력은 삭제되지만 소스 코드는 스테이징 영역에 유지한다.

        2) mixed : 디폴트 옵션이고, 커밋이력은 삭제되지만 소스 코드는 작업영역에 유지한다.

        3) hard : 커밋이력 및 소스 코드가 완전 삭제된다.

 

 

   (2) log 명령어

       1) git log --all --decorate --online --graph : 터미널에 log를 그래프형태로 나타내줌

 

 

   (3) merge : 브랜치 병합 

        - 병합 이력을 확인 할 수 있어서 주로 협엽 시 merge 방식을 사용함

 

[merge 사용법]

git switch [branch명] # 원하는 브랜치로 이동
git merge [합치고 싶은 branch명] # 이동된 브랜치에 합치고 싶은 브랜치와 병합함

ex.
git switch main # main 브랜치로 이동
git merge test_branch # main 브랜치에 test_branch 브랜치 병합
git log # 병합 이력 확인

 

 

        * 병합한 후, 병합된 브랜치는 꼭 삭제해 줘야한다!!

        * 중복되는 코드가 계속 남아있기 때문에 지저분하고

           작업 시 혼동을 줄 수 있으니 합병된 브랜치를 삭제하는것이 원칙!!

 

        - merge 방식에는 2가지가 있다.

          a) fast-forward

              · 브랜치 생성 이후 main 브랜치에서 추가 진행 사항이 없는 경우 사용

              · main 브랜치와 추가된 브랜치 head가 동일 선상에 있는 경우 사용

              · main 브랜치에 진행사항이 없기 때문에 추가 브랜치를 갖다 붙이는 방식이다.

 

          b) 3-way merge

              · 브랜치 생성 이후 main 브랜치에 추가 진행 사항이 있는 경우 사용

              · main 브랜치와 추가된 브랜치 head가 동일 선상에 있지 않을 경우 사용

 

[git merge 옵션]

1) --ff : fast-forward 방식
git merge --ff [브랜치명]

ex. 
git merge --ff test_branch


2) --no-ff : fast-forward 방식으로 merge 하지 않는 방식
git merge --no-ff [브랜치명]

ex.
git merge --no-ff test_branch


3) --squash : 가장 강력한 merge 방식, 그냥 모든걸 합쳐버림
git merge --squash [브랜치명]

ex.
git merge --squash test_branch

 

 

 

   (4) rebase : 브랜치 병합 

        - merge 명령어와 달리 이력이 남지 않는다.

 

[rebase 사용법]

1. rebase는 합치고 싶은 브랜치에서 먼저 rebase를 해주고
2. main 브랜치로 다시 스위치하여 merge를 진행 함 

git switch [합치고 싶은 브랜치] # 합치고 싶은 브랜치로 스위치함
git rebase main # main 브랜치와 base를 같게 만듦
git switch main # main 브랜치로 스위치함
git merge [합치고 싶은 브랜치] # 병합해줌

 

 

   (5) cherry-pick : 다른 브랜치에서 커밋이력 가져오기 (* 왜 하는거지? 구글링해보기)

 

[git cherry-pick 사용법]

git cherry-pick [해시값]

 

 

   (6) conflict (병합 충돌)

         1) merge 중 충돌한 경우

 

[병합 충돌 및 해결 과정]

ex.
1. git switch main
2. git merge test_branch
(이때 병합 충돌 발생)
3. 상단에 나타나는 현재변경사항수락/수신변경사항수락/두변경사항모두수락 중 선택
4. 코드 저장
5. git add .
6. git commit

 

 

         2) rebase 중 충돌한 경우

 

[병합 충돌 및 해결 과정]

1. git switch test_branch
2. git rebase main
(이때 병합 충돌 발생)
3. 상단에 나타나는 현재변경사항수락/수신변경사항수락/두변경사항모두수락 중 선택
4. 코드 저장
5. git add .
6. git rebase --continue
7. git switch main
8. git merge test_branch

 

 

 

   (7) branch 전략들 (* 구글링해보기)

        1) one of the git flow : 소규모 프로젝트에 적용될 만함)

            - fork : main 코드 뿐만아니라 환경이 그대로 복사됨

            - clone : fork 한 레파지토리를 복사한게 clone

                           이것이 내 로컬 pc에 저장되고 이걸로 작업을 하는 것

 

 

글을 정리하며...

오늘은 원래 python 1일차 강의 시작하는 날인데

오늘 점심시간 전에 깃&깃헙 쪽지 시험이 있다고 하셔서 부랴부랴 다시 git 강의를 들었다.

과제제출 때문에 중간강의 안 듣고 아마 branch에서 바로 push로 넘어갔던거 같다ㅠㅠ 

 

중간강의가 제일 중요한 것들이였는데...

사실 충돌 나면 강제로 push 하거나 pull 해서 그날그날 코드를 올리곤 했었다. 

완전 노답일때는 코드 내려받기ㅋㅋㅋ 그나마 나혼자 코드를 관리해서 가능했던것 같은데

나중에 팀원들이랑 협업하게 되면 아~~~주 중요한 부분이기 때문에 틈틈히 테스트도 해보고 해야겠다!!

 

 

 

 

참고링크 : https://blog.naver.com/rlaalswo3456/223575571812

참고링크 : https://blog.naver.com/PostView.naver?blogId=rlaalswo3456&logNo=223562890770&categoryNo=16&parentCategoryNo=0

반응형

'TIL' 카테고리의 다른 글

[TIL] 2025.01.06(월) - python 학습  (0) 2025.01.12
[TIL] 2025.01.03(금) - python 학습  (0) 2025.01.05
[TIL] 2025.01.02(목) - python  (0) 2025.01.04
[TIL] 2024.12.31(화) - git 학습  (0) 2025.01.02
[TIL] 2024.12.30(월) - Homebrew 설치 및 git  (0) 2024.12.31

댓글