엘리스 5일차 금요일 온라인 강의 git

치즈말랑이·2022년 4월 10일
0

엘리스

목록 보기
6/47
post-thumbnail

참고하면 좋은 자료:
https://eunhee-programming.tistory.com/256
https://yuja-kong.tistory.com/48
https://yuja-kong.tistory.com/47?category=831588

00

깃 특징
1. 오픈소스
2. 여러사람이 서로 다른 컴퓨터로 협업할 수 있다
3. 작업한 내용을 커밋으로 만들어 저장한다

커밋 순서
git add -> git commit -> 커밋 메시지 입력

새로운 브랜치 만들기: git branch <브랜치명>
특정 커밋으로 되돌리기: git reset -- hard <커밋 버전id>

01

  • 버전 확인
git --version
  • 사용자 정보 설정
git config --global user.anem "ID"
git config --global user.email email@email.com

프로젝트마다 다른 사용자 정보를 지정하고싶으면 저장소 생성 후 --global 옵션을 빼고 실행한다.

  • 설정 정보 확인
git config --list
  • 현재디렉토리를 git local repository 로 사용
git init
  • 터미널에서 전체 파일 목록 보기
ls
ls -a
ls -al

ls: 파일이름만보기
ls -a: 파일 확장자까지 보기
ls -al: 읽기쓰기권한까지 보기

02

  • main.py 파일을 staging area로 보내기
git add main.py
  • 현재 폴더의 모든 파일을 staging area로 보내기
git add .
  • 파일의 상태 확인하기 (modified, unmodified, staging area..)
git status

untracked: add로 staging되지 않은 파일들
modified: 커밋된 파일중에 수정된 파일

  • staging area에 있는 파일들을 git repository에 반영
git commit -m "커밋 메세지"
  • 커밋메세지를 수정하거나 누락된 파일이 있을 경우
git commit --amend

텍스트 편집기가 실행되어 수정하면 된다.

  • 저장소 반영 내역 확인
git log
git log --graph
git log -p -2
git log --stat
git log --pretty=oneline
git log -S 특정텍스트

--graph를 덧붙이면 그래프형태로 보여준다.
-p, --patch: 각 커밋의 수정결과를 보여주는 diff와 같은 역할 수행
-n: 상위 n개의 커밋만 보여준다.
--stat: 어떤 파일이 커밋에서 수정되고 변경되었는지, 파일 내 라인이 추가되었거나 삭제되었는지 확인
--pretty=oneline: 각 커밋을 한줄로출력
-S: 코드에서 수정된 내용중 특정텍스트가 포함되어있는지 검사

  • add 명령 취소
git reset 파일이름

add 했던 파일을 뺀다.

  • 커밋된 파일중 변경된 사항을 비교할때
git diff

03

  • Branch
    독립적으로 다른 작업을 진행하기 위해 사용하는 개념
    각각의 branch는 다른 branch의 영향을 받지 않는다.

메인 Branch vs 토픽 Branch
메인 branch: 배포할 수 잇는 수준의 안정적인 branch
토픽 branch: 기능 추가나 버그 수정과 같은 단위 작업을 위한 branch

  • branch 생성
git branch 브랜치명
  • 현재 HEAD branch 확인
git branch

*있는게 현재 브랜치

  • 브랜치 전환
git checkout 다른브랜치명
git checkout 깃로그특정커밋id

git log로 확인한 snapshot을 넘나들때도 사용가능 -> 과거의 파일 내용 확인

  • merge(병합)
    main branch에서 작업을 하다가 a 브랜치를 새로 만들어 작업을 마친 후 병합을 하려면
    main branch로 checkout해서 다음 명령어를 친다. (이때 main branch는 더이상 아무것도 안한다.)

    ```
    git merge a
    ```

    a branch의 내용이 main branch에서 업데이트된 내용이기 때문에 곧바로 merge가 된다.
    이런방식의 merge를 fast-forward라고 한다.

    ->이번에는 하나의 파일을 각각의 branch에서 수정하는 경우이다.
    다음의 명령어를 사용하여 커밋 그래프를 확인한다.

    git log --graph --all

병합을하기위해 main branch로 이동하여 git merge a를 한다.

  • merge된 branch 확인
git branch --merged
  • 병합된 branch 삭제
git branch -d a
  • Merge conflict

Merge한 두 branch에서 같은 파일을 변경했을때 충돌이 발생한다.

CONFLICT (content): Merge conflict in main.py
Automatic merge failed; fix conflicts and then commit the result.

git status로 어느 파일에서 충돌이 발생했는지 확인한다.

$git status
On branch master
You have unmerged paths.
	(fix conflicts and run "git commit")
Unmerged paths:
	(use "git add <file>..." to mark resolution)
    
    	both modified:      main.py
no changes added to commit (use "git add" and/or "git commit -a")

충돌이 일어난 main.py를 열어보면 아래와 같이 되어있다.

<<<<<<< HEAD
내용1
=======
내용2
>>>>>>> a

내용1과 2를 직접 수정한후 <, =, >가 포함된 행을 삭제한다.
다시 add와 commit 을 한 후 merge 한다.

git merge a

04

  • 기존의 repository 복사해와서 내 로컬에 저장한다.
git clone git의repository주소
  • push할 깃 저장소 주소 등록
git remote add origin git의repository주소
  • 연결된 원격 저장소 확인
git remote
  • 원격 저장소 정보 자세히 확인
git remote show origin
  • 원격저장소 단축 이름을 origin 에서 b로 변경
git remote rename origin b
  • 연결된 원격저장소 해제하기
git remote rm a

원격저장소 동기화
pull: 원격 저장소에서 데이터 가져오기 + 병합(merge)
fetch: 원격 저장소에서 데이터 가져오기 -> git merge origin/master로 병합 완료

  • 로컬 저장소에서 작업한 내용을 원격저장소에 반영
git push origin master
  • 원격 저장소의 이름과 주소 확인
git remote -v

05

Head: 마지막 커밋을 가리키는 snapshot
snapshot: staging 되어진 데이터들을 커밋 명령으로 영구히 저장한 것을 snapshot이라고 한다.
head 역시 snapshot이며 현재 위치한 branch를 가리키는 포인터 역할을 한다.

rebase: 브랜치가 너무 많아져서 history정리가 필요할때 사용한다.
그래프를선형으로 만든다.
rebase를 공통된 부모까지의 commit 을 가져와 원하는 브랜치 옆에이어붙인다.

git checkout b
git rebase main

main 브랜치 옆에 b가 붙는다.

에러나면 파일 수정 후 add 하고 git rebase --continue로 rebase를 마무리한다.
merge에서처럼 fast-forward될수도있다.

profile
공부일기

0개의 댓글