Everyrthing about git

김명재·2023년 2월 20일
0

commit이란

staging area의 현 상태를 그대로 하나의 버전으로 남기는 작업, 또는 그 결과물을 가리키는 말

1.working directory
2.staging area
3.repository

1.working drirectory(working tree):작업을 하는 프로젝트 디렉토리를 말한다.

2.staging area:gid add를 한 파일들이 존재하는 영역
커밋을 하게 되면 staging area에 있는 파일들만 커밋에 반영된다.
(왜 굳이 staging area가 필요할까? 수정한 파일중에 특정 파일만 선발하여 git commit을 하고 싶을 수 있기 때문에)

3.repository:working directory의 변경 이력들이 저정되어 있는영역
그러니깐 커밋들이 저장되는 영역

git status:깃이 인식하고 있는 디렉토리의 현재 상태를 보여준다

cd:파일에 접속한다
touch:파일을 생성한다

git add .:한번에 수정된 파일을 staging area에 추가할 수 있음

Git파일들의 상태
크게 Untracked와 Tracked로 나뉜다

먼저 Untracked는 추적되지 않고 있는 상태를 말한다
예를 들어 파일을 새로 생성하고 git add를 해주지 않으면 이상태를 유지한다

Tracked는 Staged, Unmodified, Modified로 나뉠 수 있다.

1.Staged상태
파일의 내용이 수정되고 나서 staged area에 올라와있는 상태를 Staged상태라고 한다.

2.Unmodified상태
현재 파일의 내용이 최신 커밋된 모습의 파일을 비교했을때 전혀 바뀐게 없는 상태 (어떤 파일을 git add했지만 이미 commit을 한 파일과 차이가 없을때)커밋을 하고 난 직후에는 working directory에 Unmodified상태로 파일들이 남아있게 된다.

3.Modified상태
최신 커밋의 모습과 비교했을 때 조금이라도 바뀐 내용이 있는 상태면 그 파일은 Modified상태이다

git init

현재 디렉토리를 Git이 관리하는 프로젝트 디렉토리로 설정하고 그 안에 레포지토리(.git 디렉토리)생성

git reset

staging area에서 파일을 삭제

git help [알고 싶은 커맨드]

man git-[알고 싶은 커맨드]

git commit -m"커밋 메세지"

현재 staging area에 있는 것들 커밋으로 남기기

나가고 싶을 때는 q(quit)

프로젝트 디렉토리에서 작업 하던 내용을 외부 컴퓨터에 전송한다

즉 레포지토리를 전송한다는 얘기

github에서 만든 레퍼지토리

를 원격레포지토리 또는 리모트 레포지토리라고 한다.
1.안전성 확보
2.협업개발 가능

내 컴퓨터의 레포지토리를

로컬레포지토리라고 한다.

git push -u origin master

로컬레포지토리의 내용을 처음으로 리모트 레포지토리에 올릴 때 사용한다

git push

로컬 레포지토리 내용을 -> 리모트 레포지토리에 반영한다는 얘기

로컬 레포지토리에서 새로운 커밋을 할 때마다 그것들도 매번 리모트 레포지토리에 반영을 해줘야 한다.

git pull

반대로 리모트 레포지토리에 새롭게 커밋을 하면 새로운 커밋이 로컬 레포지토리에는 생기지 않는다. 그렇기 때문에 로컬 레포지토리에도 새로운 내용을 커밋을 해야하는데 그때 바로 git pull을 사용하면 된다

git clone

다른 사람의 리모트 레파지토리(깃허브 프로젝트의 레포지토리)를 내컴퓨터 복제하기 위해 사용함

cat [파일명]

파일 안에 내용을 '보고 싶을때

마크다운

간단한 텍스트만으로 어떤 표시를 해두면, 자동으로 html태그로 전환되도록 약속된 문법

ㅇㅈㅇㅇ

  • dkssud

커밋 히스토리

git log

커밋의 기록들을(커밋 히스토리) 다 보여준다.(git log -pretty=oneline)

git show 깃아이디

어떤 점이 수정 되었는지 보여줌

m옵션 없이 git commit만으로 텍스트 에디터에 커밋 메세지 남기기

복잡하고 킨 커밋 메세지를 쉽게 남길 수 있다.

git commit -> 텍스트 에디터 열림 -> 커밋 메세지 제목 작성 후 한줄 띄우고 그 다음 상세메세지를 적어준다

커밋의 상세 내용

  • 왜 커밋을 했는지

  • 어떤 문제가 있었고
    -적용한 해결책이 어떤 효과를 가지는지

    은 자신이 했던 커밋중에 최신 커밋을 다시 수정할 수 있다.

    git add. -> git commit --amend(수정하다)->텍스트 에디터가 열림->여기서 커밋 메세지를 수정해도 됨(i를 눌러서)->wq->완료

    git에는 길이가 긴 command에 별명을 붙여 사용할 수 있다.

    이렇게 별명을 alias라고 하고 별명을 붙이는 행위를 aliasing이라고 한다

    ex) git log --pretty=oneline에서 --pretty=oneline을 aliasing 할때

git config alias.history 'log --pretty=oneline'

이렇게 설정하고

git history

입력했을때 git history를 한줄에 볼 수 있다.

두 커밋의 차이점을 알고 싶을때

git diff ( 더 과거의 커밋 아이디) (과거의 커밋 아이디)

보통 가장 최근에 한 커밋을 가리킴
매번 더 새로운 커밋을 가리킴
HEAD가 가리키는 커밋에따라 워킹디렉토리가 구성된다.

git reset

을 사용하면 HEAD가 과거의 커밋을 가리키게 할 수 있다! working directory의 내용도 과거 커밋의 모습으로 돌아가게 한다!

git reset --hard [가고 싶은 아이디]

git reset을 써야하는 이유

과거 어떤 특정 시점 이후로 작업한 내용 커밋들 전부가 마음에 들지 않으면 과거의 마음에 들었던 커밋으로 돌아갈 수 있다!

git reset 옵션

  • mixed
    HEAD와 staging area가 과거의 특정 커밋을 가리키게 한다

  • soft
    Head가 과거의 특정 커밋을 가리키게 한->삭제된 커밋은 staging area에 디렉토리로 남아있다.
    =만약 staging area에 있는 파일이 커밋과 똑같다면 git status를 했을때 staing area에는 표시되지 않는다 즉 내용이 다르면 git status를 했을때 staging area에 다시 표시된다.

  • hard
    Head,Staging area, Working directory를 과거의 특정커밋을 가리키게 한다

(hard의 사용인 지양됨)

git reset --hard HEAD^(바로 아래꺼)

git reset --hard HEAD~2(2단계 밑에꺼)

Git tag

보통 프로젝트에서 주요 버전의 시적점이 되는 커밋에 태그를 단다

git tag [태그이름][커밋 아이디]

git tag라고 입려하면 태그들이 보인다

git show [태그 이름]

태그가 가리키는 커밋을 보여준다

branch

하나의 커밋 흐름

git branch

현재 존재하는 브랜치들을 보여줌

git branch [브랜치 이름]

git checkout [브랜치 이름]

새로 만든 브랜치에 접속

git branch -d [브랜치 이름]

git checkout -b [브랜치 이름]

브랜치를 생성하면서 접속

branch merge

현재 branch:premium

git merge master

후 텍스트 에디터에서 저장(:wq)후 실행

Conflict

서로의 커밋이 충돌하는 현상

  • 컨플릭트가 발생한 파일을 연다
  • 머지의 결과가 되었으면 하는 모습대로 코드를 수정
  • 커밋

git marge --abort

  • onflict가 발생한 파일들이 너무 많아서 Conflict를 최소화 할 수 있는 방식으로 파일들을 다시 수정하고 커밋한 다음에 머지를 하고 싶을때

Tracking connection

로컬 레포지토리의 한 브랜치가 리모트 레포지토리의 한 브랜치와 연결되어 그것을 계속 바라보는 상태가 되는 것

profile
steadyness is all time way

0개의 댓글