Skip to content

TIL - 2025-01-23 #6

@Sewoni

Description

@Sewoni

Name: TIL
About: Today I Learned
Title: "TIL - 2025-01-23(Thursday)"
Labels: [TIL]
Assignees: ''

TIL - 2025-01-23

오늘의 학습

Git 실습

1. Git 초기화 및 브랜치 생성

Git 저장소를 초기화하고 브랜치를 생성하는 기본 작업을 수행.

  • Git 저장소 초기화:
    기존 .git 디렉토리를 삭제한 후 새로운 저장소를 생성.
    rm -rf .git
    git init
    git branch -M main
    git add .
    git status
    

2. Merge와 Fast-Forward

  • Fast-Forward 병합:
  • Fast-Forward는 브랜치에 별다른 추가 작업이 없을 때 단순 병합을 수행하는 방식.
    git merge 실행 후 이력이 한 줄로 유지된다.
git switch -c dev       # 새로운 dev 브랜치 생성 및 이동
git add . && git commit -m "change"
git switch main         # main 브랜치로 이동
git merge dev           # Fast-Forward 병합
git branch -d dev       # dev 브랜치 삭제

3. 3-Way Merge

  • 3-Way Merge는 브랜치 간에 공통 조상(commit)을 기준으로 서로 다른 변경 사항을 병합.
    이 방식은 Fast-Forward와 달리 병합 커밋이 생성된다.
git branch dev1
git branch dev2
git switch dev1
git add . && git commit -m "위를 수정"
git switch dev2
git add . && git commit -m "아래를 수정"
git merge dev1          # dev1과 dev2를 병합

4. Merge Conflict

  • 충돌 상황: 두 브랜치에서 동일한 파일의 동일한 부분을 다르게 수정했을 때 발생합니다.
  • 충돌 해결:
    1. 충돌 파일을 열고 수정 후 저장.
    2. 변경 사항을 Staging 영역에 추가한 뒤 커밋을 생성.
git branch feature1
git branch feature2
git switch feature1
git add . && git commit -m "공통부분 수정(f1)"
git switch feature2
git add . && git commit -m "공통부분 수정(f2)"
git merge feature1      # 충돌 발생
git add .               # 수정된 충돌 파일 Staging
git commit              # 충돌 해결 후 커밋

5. Git Reset과 Revert

  • Reset
    • Mixed: Staging 영역 초기화.
    • Soft: Staging 유지, 커밋 내용만 초기화.
    • Hard: 커밋과 파일 변경 사항 모두 제거.
git reset --soft HEAD~1   # 마지막 커밋을 취소하지만, 파일은 유지
git reset --mixed HEAD~1  # 마지막 커밋과 Staging 영역 취소
git reset --hard HEAD~1   # 마지막 커밋과 파일 변경 사항 모두 삭제
  • Revert:
    • 기존 커밋을 되돌리되, 새 커밋으로 기록.
git revert HEAD~1
git revert HEAD

6. Commit Amend

  • 커밋 수정: 기존 커밋 메시지를 변경하거나, 새 파일을 추가하여 기존 커밋을 수정.
git commit --amend -m "수정된 메시지"
git commit --amend --no-edit --date "1 day ago"

7. Rebase

  • Git에서 Rebase는 하나의 브랜치에 있는 커밋을 다른 브랜치 위로 재배치하는 작업을 의미한다. 이를 통해 브랜치의 커밋 이력을 깔끔하게 정리할 수 있다.
Rebase의 기본원리
Before Rebase:

main:    A --- B --- C
feature:         D --- E

After `git rebase main` on `feature`:

main:    A --- B --- C
feature:               D' --- E'
  • D와 E는 재적용되어 D', E'라는 새 커밋이 생성.
  • main과 feature의 커밋 이력이 한 줄로 깔끔히 연결된다.

느낀 점

참고 자료

  • 수업자료: Git 실습

Metadata

Metadata

Assignees

No one assigned

    Labels

    documentationImprovements or additions to documentation

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions