Github

[Git] Git 명령어 모음

owls 2022. 12. 3. 17:07
728x90

1. Git 영역

- Working Directory ( Local )

  : 개인 코드 작성

- Staging area

  : git add를 통해 수정된 코드를 올리는 영역

- Repository

  : git commit 을 통해서 최종 수정본을 제출


 

2. github업로드 절차(프로세스)

1. github 원격 저장소 생성

2. github 원격 저장소 clone(복제하기)

3. 내 로컬(컴퓨터)에 프로젝트 생성 후, 복제한 원격 저장소 다운받기

4. 내 로컬의 원격 저장소 폴더에서 작업(코딩)하기

5. add : 작업한 파일 중에서 원격 저장소에 반영할 부분 추가하기

6. commit : 먼저 로컬(내 컴퓨터)에서 수정된 소스 파일 반영하기

7. push : 로컬(내 컴퓨터)에서 수정한 소스 파일을 github원격 저장소에 저장하기

8. github.com/[id]/[repository] 링크를 통해 정상적으로 업로드 되었는지 확인


 

3. Git 명령어 모음

Git 최초 설정 ( 사용자 이름과 이메일 설정 )

  global 옵션 : 현재 시스템의 모든 Git작업에 사용할 user.name, user.email 을 설정합니다.

$ git config --global user.name [이름]
$ git config --global user.email [이메일]

 

로컬 저장소의 git 히스토리 삭제

$ rm -rf .git

 

초기화

$ git init

 

설정 확인

$ git config --list

 

GitHub 프로젝트 로컬에 가져오기

  clone으로 repository 데이터 가져오기

 

가져오고자 하는 repository의 code > https 주소를 복사한다.

 

$ git clone [주소]

 

로컬 Git 저장소에 원격 저장소를 추가

$ git remote add [원격저장소 이름 지정] [주소]

 

 

원격 저장소 목록 조회

$ git remote -v

 

원격 저장소 branch 새로 생성 후 해당 branch로 전환

$ git checkout -b [branch이름]
$ git checkout [commit id]

버전 전환.

 

" git commit [v6의 commit id] " 를 입력하면 아래와 같이 HEAD가 v6를 바라보는 상태가 됩니다.

 

작업도 v6까지의 작업 상태로 돌아가게 됩니다.

 

branch 생성

$ git branch [branch이름]

 

원격 저장소의 branch 확인

$ git branch -r
$ git branch 	// 모든 branch 출력, *붙어있는게 현재 선택된 branch

 

branch 삭제

$ git branch -d [branch]

branch 변경(전환)

$ git switch [branch이름]

 

현재 위치 출력

$ pwd

 

원격 저장소에서 로컬 저장소로 소스 가져오기

- pull   : merge O, 원격 저장소의 소스를 가져오고 해당 소스가  현재 내 소스보다 더 최신 버전이라고 하면 지금의 버전을 해당 소스에 맞춰 올린다. 

- fetch : merge X, 소스만 가져온다.

$ git fetch [remote]
$ git pull [remote명] [branch명]

 

Merge (병합)

exp 브런치를 main 브런치와 병합

$ git checkout [branch]  //git checkout main
$ git merge [branch]	//git merge exp

 

충돌

exp, main 브런치로 따로 작업하다가 Merge하는 경우 수정된 파일이 우선이 됩니다. 하지만 둘다 수정이 된 경우에는 conflict가 발생합니다. merge 충돌입니다.

이 때 사용되는 해결 방법인 "3 way merge" 가 있습니다.

3 way merge는 충돌이 발생한 branch의 부모 branch(base branch)를 기준으로 개발자가 직접 내용은 변경합니다.

base branch를 기준으로 수정 작업이 이루어졌으니 이 시점이 기준이 되는 것입니다.

 

Working Directory상의 변경 내용을 Staging area에 추가

$ git add .           //현재 디렉토리의 모든 변경 내용을 staging area로 넘긴다.
$ git add -A           //작업 디렉토리내의 모든 변경 내용을 모두 staging area로 넘긴다
$ git add -p           //각 변경 사항을 터미널에서 직접 눈으로 하니씩 확인하면서 staging area로 넘기거나 제외시킬 수 있다.
$ git add [file name]  // 작업 디렉토리내의 특정 파일만 staging area로 넘긴다.

add( stage에 올리기) 

> commit하기 전에 저장을 원하는 파일들을 묶는 일

> untracked -> tracked

-a : tracked만 adding

 

 

git add + "tab"

tab을 누르면 자동완성됩니다.

 

add 내역 확인

$ git status

 

Repository에 commit

특정 시점에 파일의 변화를 저장하기 ( = save)

$ git commit -m [메시지]
$ git commit -am [메시지]  // add와 commit 동시에 실행

언제든지 commit한 시점으로 되돌아 갈 수 있음.

현재 작업 내용이 내 컴퓨터에 저장됨.

 

-a 옵션은 tracked 상태의 파일만 auto adding 해준다. ( untracked 상태 제외)

 

commit 메시지 변경

$ git commit --amend -m [commit 메시지]

 

commit 이력 확인

$ git log
$ git log --oneline   //한 줄로 요약

log화면에서 나가려면 "q" 를 입력하면 됩니다.

 

여태까지 모든 작업 내역이 기록되어 복원할 수 있습니다.

$ git reglog

 

변경 내용 확인

$ git diff

 

push

commit한 이력이 repository로 저장

현재 폴더를 그대로 업로드 하는 것이 아니라, 지금까지의 이력/버전(commit)을 push하는 것이다.

$ git push [remote명] [branch명]

내 컴퓨터에 commit한 파일을 github 사이트에 업로드하는 것

내 컴퓨터에 프로젝트 파일이 없더라고 어디서든지 github 사이트에서 프로젝트 폴더를 다운받아 작업(수정) 가능

 

$ git push --set-upstream origin [branch name]

한 번만 명령어를 사용하고, 앞으로 설정한 branch name으로 원격 저장소에 push합니다.

 

pull

원격저장소 변경 사항(이력)을 받아옵니다.

$ git pull [remote명] [branch명]

다른 작업 환경이나 위치에서 작업할 때, 혹은 공동 작업에서 타인이 commit해서 이력 변경 등 경우가 있기 때문에 pull을 통해서 가져온 후 작업을 진행하는 것이 좋다.

 

git graph 단축기 설정

git config --global alias.l "log --oneline --all --graph"

alias라는 명령어를 이용해서 별명을 설정합니다.

git l

이제 "l"을 입력하면 graph 명령어가 실행됩니다.

 

 

파일 상태

M : modify (수정된 파일)

U : Untracked files (git 에 안올려서, git에서 관리하고 있지 않은 파일)

.gitignore

.gitignore 파일을에 무시하고자 하는 파일을 추가합니다.

파일이 status에 더 이상 나타지 않습니다.

.gitignore파일이 없다면 새로 생성하면 됩니다.

 

데이터 베이스 id, pw와 같은 민감한 정보는 git에 올리면 안됩니다.

그렇기 때문에 .gitignore 파일을 통해 실수라도 commit되지 않도록 관리할 수 있습니다.

만약 id, pw가 저장된 포맷이 필요하다면 필요하다면

config.txt.template 파일을 만들어서 아래와 같이 USER_ID, USER_PASSWORD로 적어 놓습니다.

(파일 이름은 마음대로)

 

 

Reset

$ git reset --hard [commit id]

RESET = HEAD의 Branch를 바꾼다. 

CHECKOUT = HEAD를 바꾼다. (이전 버전으로 돌아감), HEAD를 옮긴다.

 

 ex) 아래와 같은 상태에서 reset 명령어를 사용하여 v7 에서 v6상태로 옮기고 싶습니다.

만약 이 상태에서 reset 명령어를 입력한다면 어떻게 될까요?

$ git reset --hard [v6 commit id]

v7이 사라지고 v6까지의 작업만 남게 됩니다. 

실제로는 v7이 사라진 것은 아닙니다. main이 v6를 바라보게 되면서 v7은 삭제한 것과 같은 효과를 얻을 수 있게 됩니다.

728x90