Marais.lee
Welcome to Marais's IT Home
Marais.lee
전체 방문자
오늘
어제
  • 분류 전체보기 (87)
    • co-task 프로젝트 (7)
    • Study (28)
      • 자바스크립트 (5)
      • 모던 리액트 Deep Dive (7)
      • 용어 (1)
      • 컴퓨터과학 (2)
      • 코테 (12)
      • 네트워크 (0)
    • 개발 환경 (3)
    • Next.js (pages router) (9)
    • Next.js (app router + 14v) (4)
    • TypeScript (11)
    • 라이브러리 (8)
    • 후기 및 고민 (10)
    • 맥북관련 셋팅 및 오류 (4)
    • Obsidian | 옵시디언 (1)
반응형

인기 글

최근 글

블로그 메뉴

  • 홈
  • 태그
  • 방명록
250x250
hELLO · Designed By 정상우.
Marais.lee

Welcome to Marais's IT Home

Study

챗지피티와 공부한 Git에 대해..

2024. 6. 22. 23:31
728x90

[모든 답변은 chat gpt 4o에서 발췌했습니다]

Git이란?

| 분산 버전 관리 시스템으로, 소스 코드의 변경 사항을 추적하고 여러 명이 공동 작업을 할 수 있도록 도와줍니다.

Git에서 해시(Hash)란?

| 커밋을 고유하게 식별하기 위해 사용되는 40자 길이의 SHA-1 해시 값을 의미합니다. 이 해시 값은 커밋의 내용, 작성자, 작성 시간 등의 정보를 바탕으로 생성됩니다. SHA-1 해시는 Git의 버전 관리 시스템에서 매우 중요한 역할을 합니다.

해시의 특징

-- 고유성: 각 커밋은 고유한 해시 값을 가지며, 동일한 내용이라도 커밋 시간, 작성자 등이 다르면 다른 해시 값을 가집니다.
-- 불변성: 커밋의 내용이 변경되지 않는 한 해시 값도 변경되지 않습니다. 따라서 커밋의 무결성을 보장합니다.
-- 추적성: 특정 커밋의 해시를 이용해 해당 커밋의 내용을 정확히 추적할 수 있습니다.

commit e6f3c8e9d1b4f12d5a7e2e1b8b5a1e5f9d3c2a4b // 해시 값
Author: Your Name <you@example.com>
Date:   Tue Jun 22 14:35:16 2024 +0900

    Initial commit

git rebase --interactive가 뭐야?

| Git의 강력한 기능 중 하나로, 커밋 히스토리를 편집하고 정리할 수 있도록 도와줍니다. 이 명령어를 사용하면 커밋을 재정렬, 편집, 삭제 또는 합칠 수 있는 인터페이스가 제공됩니다.

# main 브랜치로 rebase를 수행
git rebase -i main

# 텍스트 에디터에서 커밋 메시지 수정
pick e5c7e2f Commit message 1
reword 8d1f3a2 Commit message 2 수정
pick 4b7c9d5 Commit message 3

# 에디터를 저장하고 종료하면 rebase가 진행됨

git rebase --interactive사용시 주의 사항

-- 충돌 발생: rebase 도중 충돌이 발생할 수 있으며, 이 경우 충돌을 해결한 후 git rebase --continue 명령을 사용해야 합니다.
-- 복구 어려움: 잘못된 rebase 작업은 복구하기 어려울 수 있으므로, 작업 전에 백업이나 안전한 상태를 만들어두는 것이 좋습니다.

git rebase --interactive의 더 자세한 예시를 들어줘

| 물론, git rebase --interactive의 구체적인 예시를 통해 더 자세히 설명드리겠습니다. 다음 예시는 하나의 Git 저장소에서 브랜치를 만들고, 커밋을 생성한 후 인터랙티브 rebase를 사용하는 과정을 포함합니다.

예시 상황 설정

1. 저장소 초기화 및 브랜치 생성:

git init my-repo
cd my-repo
git checkout -b main

2. 몇 가지 커밋 생성:

echo "Line 1" > file.txt
git add file.txt
git commit -m "Add Line 1"

echo "Line 2" >> file.txt
git add file.txt
git commit -m "Add Line 2"

echo "Line 3" >> file.txt
git add file.txt
git commit -m "Add Line 3"

이제 git log --oneline을 실행하면 다음과 같은 커밋 로그가 나옵니다:

3c4e5f7 (HEAD -> main) Add Line 3
a2b4c6d Add Line 2
e1f3a2b Add Line 1

인터랙티브 Rebase 예시

1. 커밋 메시지 수정 및 합치기:

git rebase -i HEAD~3

그러면 다음과 같은 텍스트 에디터 화면이 나타납니다:

pick e1f3a2b Add Line 1
pick a2b4c6d Add Line 2
pick 3c4e5f7 Add Line 3

여기서 두 번째 커밋 메시지를 수정하고 세 번째 커밋을 두 번째 커밋과 합치기 위해 다음과 같이 변경합니다.

pick e1f3a2b Add Line 1
reword a2b4c6d Add Line 2
squash 3c4e5f7 Add Line 3

2. 커밋 메시지 수정:
reword로 표시한 커밋에 대한 메시지를 수정하라는 프롬프트가 나타납니다. 메시지를 다음과 같이 수정합니다:

Add Line 2 - modified message

다음으로 squash로 표시한 커밋 메시지를 합치라는 프롬프트가 나타납니다. 메시지를 합친 후:

Add Line 2 - modified message

Add Line 3

3. 변경 사항 적용:
에디터를 저장하고 닫으면 rebase가 진행되고, git log --oneline을 실행하면 다음과 같은 로그가 나타납니다:

7b8c9d0 (HEAD -> main) Add Line 2 - modified message
e1f3a2b Add Line 1

이로써 Add Line 3 커밋은 Add Line 2 커밋과 합쳐졌습니다.


git rebase에서 ours vs theirs?

main, feature-1 브랜치가 각각 존재한다고 생각하자.
main은 ours, feature-1은 theirs.


마지막 질문은 지피티에게 여러번 질문했지만, 답변이 다르게 나와서 구글링으로 찾은 답변이다.

728x90
반응형
저작자표시 비영리 변경금지 (새창열림)
    Marais.lee
    Marais.lee
    구글링으로 한국어로 된 글을 찾지 못했거나 이해하는데 어려움이 있었던 이슈를 공유합니다.

    티스토리툴바