[깃&깃허브 입문] - 01-03장

cse 23·2023년 3월 21일
0

01. 깃 시작하기

1) 깃으로 무엇을 할 수 있을까?

  • 관리: 파일의 변경 이력을 관리할 수 있는 버전 관리 시스템
  • 백업: 백업용 원격 저장소 또는 온라인 저장소로 활용 가능
  • 협업: 여러 사람이 함께 파일을 주고받으며 작업 가능
    → 수정 기록이 남기 때문에 오류가 생겼을 때 원인 파악이 쉬움

3) 터미널 기본 명령어

명령어설명
~현재 접속 중인 사용자 디렉토리
.현재 작업 중인 디렉토리
..상위 디렉토리
pwd현재 경로 확인
ls현재 디렉토리의 파일/디렉토리 목록 출력 (디렉토리는 /가 붙음)
ls -l상세 정보 표시
ls -a숨김 파일 포함 모든 파일 표시
ls -r파일 정렬을 역순으로 표시
ls -t최근 수정된 파일부터 표시
clear터미널 화면 초기화
cd ..상위 디렉토리로 이동
mkdir 폴더명디렉토리 생성
rm -r test디렉토리 및 내부 파일 삭제 (-r 옵션 필요)
exit터미널 종료

4) Vim 편집기 기초

  • vim이란? 텍스트 편집기 (Visual + IMproved)
    (시소실에서 했던 내용 생각하기)

  • 사용 방법:

    • vim test.txt → 편집 시작
    • i 또는 a → 입력 모드 전환
    • esc → 명령 모드로 전환
    • :w → 저장
    • :q → 종료
    • :wq → 저장하고 종료
    • :q! → 저장하지 않고 종료
    • :wq 파일명 → 다른 이름으로 저장
  • cat test.txt: 터미널에서 텍스트 파일 내용 간단히 보기


02. 깃 저장소 만들기

버전(깃에서) : 문서를 수정하고 저장할때마다 생기는 것

1) 저장소 초기화

mkdir 폴더명      # 디렉토리 생성
cd 폴더명         # 디렉토리 이동
ls -la            # 숨김 파일 포함 목록 보기
git init          # 깃 저장소 초기화 (.git 폴더 생성됨)

2) 깃의 구조

  • 작업 트리: 실제 파일을 수정하거나 작업하는 공간
  • 스테이지(Stage): 버전으로 만들기 위해 준비 중인 파일을 올려놓는 공간
  • 저장소(Repository): 커밋된 파일이 실제로 저장되는 공간
  • 스테이징(스테이지에 올린다): 깃에게 버전 만들 준비를 하라고 알려주는것

3) 기본 깃 명령어

git status            # 현재 상태 확인
git add 파일명        # 스테이지에 올림
git commit -m "메시지"  # 커밋 (스냅샷 저장)
git log               # 커밋 이력 확인
git diff              # 변경사항 확인
git log --stat        # 변경된 파일까지 함께 확인


-2 : 2가 삭제되었다.
+two: hello.txt파일에 two라는 내용이 추가되었다.


(hello2.txt위에 untracked files: 한번도 커밋하지 않았으므로 수정내용 추적 안함)


가장 최근 커밋부터 순서대로 커밋 메시지와 관련 파일이 나열


Changes to be committed : 커밋 직전 단계 (staged상태)

<파일의 상태변화>

4) 되돌리기 관련 명령어

git restore 파일명                      # 작업 트리 수정 내용 되돌리기
git restore --staged 파일명            # 스테이지에 올린 파일 되돌리기
HEAD^                                  # 이전 커밋을 가리킴
git reset HEAD : --mixed 옵션을 사용할 때와 같이, 커밋을 취소하고 unstaged상태로 작업 디렉터리에 보관
git revert 커밋ID                      # 해당 커밋의 변경 이력을 취소 (기록은 남음)



3장 Git과 브랜치 정리 (with 실습 흐름 & 오류 해결)

1. 브랜치란?

  • 브랜치(branch): 버전 관리 시스템에서 나뭇가지처럼 갈라져 나가는 흐름
  • 필요한 이유: 기존 코드에 영향을 주지 않고 기능을 개발하거나 수정하기 위함
  • main(master) 브랜치: 기본이 되는 브랜치. 이름만 다르고 기능은 동일
  • 분기(branch): 기존 브랜치에서 새 브랜치를 만들면 독립적으로 개발 가능
  • 병합(merge): 작업 완료된 브랜치를 다시 main 브랜치에 합치는 과정

2. 브랜치 관련 명령어 정리

명령어설명
git branch브랜치 생성 및 확인
git switch <브랜치명>브랜치 전환
git switch -c <새브랜치명>새 브랜치 생성 및 전환
git log --branches브랜치별 최신 커밋 확인
git log --graph브랜치와 커밋 관계를 그래프로 확인
git diff 브랜치1..브랜치2브랜치 간 차이 비교
git merge <브랜치명>브랜치 병합
git branch -d <브랜치명>브랜치 삭제

: 빔에서 work.txt파일을 만들고 '1'을 입력한후 저장하고 work1이라는 메세지와 함께 커밋한 상태
: o2라는 브랜치를 만듦
: main.txt파일을 하나더 만듦, 빔에서 main2라고 입력한후 종료
: o2브랜치에서 o2.txt 파일을 만들고 2를 입력 후 저장
: main브랜치를 기준으로 o2브랜치를 가져와 병합

3. 브랜치 병합 실습 예시

작업 흐름

  1. work.txt 파일 생성 → 1 입력 → work1 메시지와 함께 커밋
  2. o2 브랜치 생성 → main.txt 파일 생성 후 내용 입력
  3. o2.txt 파일도 추가 → 커밋
  4. main 브랜치로 전환 후 o2 브랜치 병합

병합 시 상황

서로 다른 부분 수정

서로 다른 브랜치에서 한 문서의 다른 부분을 수정했을때 병합
main 브랜치와 o2브랜치 양쪽에서 work.txt파일을 수정 -> 문서안의 수정위치는 다름

  • 병합 시 자동으로 해결됨
  • 메시지: Auto-merging work.txt

같은 부분 수정 (충돌 발생)

  • 수동으로 충돌 해결 후 커밋 필요

4. 병합 후 브랜치 삭제

  • 병합이 끝난 브랜치는 main 브랜치에서 삭제 가능
git branch -d o2
  • 메시지: Deleted branch o2 → 삭제 완료

※ 같은 이름으로 다시 만들면 예전 커밋 내용 확인 가능


5. cherry-pick: 특정 커밋만 병합

  • git merge: 전체 브랜치 병합 → 새로운 커밋 생성

  • git cherry-pick <커밋ID>: 특정 커밋만 골라 현재 브랜치에 적용

    main 브랜치에 topic 브랜치의 특정 커밋만 가져오고 싶을 때 사용


cherry pick으로 병합하기

이와같은 브랜치 구조를 가진 저장소가 있다고 가정

main브랜치와 topic브랜치를 병합한다면 두개의 브랜치를 병합하는 새로운 버전 mt3가 생김(병합하며 새로운 버저닝 추가됌) -merge

이에 비해 cherry-pick은 main브랜치와 topic브랜치를 합치긴 하는데 브랜치 전체를 합치는 게 아니라 topic브랜치중 특정 버전의 변경 내용만 합치려할때 사용하는 기능(topic브랜치의 다른버전들은 합쳐지지 않음)

6. 오류 발생 및 해결

오류 메시지

*** Please tell me who you are.

원인

  • 사용자 계정 정보가 Git에 등록되지 않았기 때문

해결 방법

git config --global user.name "seoyeon"
git config --global user.email "가나다라@naver.com"

오류 잡았거나 스터디를 통해 알아낸부분

<오류>
*** Please tell me who you are.

Run
git config --global user.email "you@example.com"
git config --global user.name "Your Name"

to set your account's default identity.
Omit --global to set the identity only in this repository.

<원인분석>
사용자 계정 정보를 입력하지 않아서 발생하는 문제
Git -> 설정 -> 사용자 계정 -> 이름 & 이메일 입력

<해결한 코드>
git init
git config user.name "someone"
git config user.email "someone@someplace.com"
git add *
git commit -m "some init msg"

0개의 댓글