본문 바로가기
복수전공(소프트웨어공학)/Python, Linux, Git 등

[인프런] 핵심만 골라 배우는 Git/Github

by 차엔진 2021. 1. 31.

#

Git은 버전 관리 시스템 중 하나

버전=유의미한 변화가 결과물로 나온 것

 

게임도 여러 개발자가 여러 버전을 프로그래밍함

하나의 버전을 관리하는 과정에서 협업, 되돌리는 과정, 효율적인 백업이 필요함 -> Git

 

 

#

working directory 코드작업 공간 =변경이 생기는 공간. 모든 변경사항이 담김, 변경사항 중 일부 파일을 선별해 버전으로 만듦

stage area 버전이 될 후보가 서있는 공간

repository 저장소 =새로 만든 버전과 지금까지의 버전이 저장되는 공간

 

git<명령어>

$ git add <파일명> 작업공간에서 stage area로 넘어감(=1단계)

$ git commit -m "commit message" 버전으로 만드는 명령어=하나의 버전이 만들어짐(=2단계)

 

commit message는 사용자정의 메시지 같음. 뭘 수정, 뭘 생성했는지 등을 간략하게 작성함. 다음 버전에서 헷갈리지 않기 위함임.

 

 

#

우클릭 후 Git Bash Here 클릭하면 명령어 입력창 뜸

$ git init 버전관리 시작함

실행과 동시에 숨김폴더가 생기는데 안 보일 수도 있음, $ ls -al로 .로 시작하는 숨김파일이 확인됨.

 

$ git status 상태 알려줌

Untracked files=새로 생겨서 add나 commit 된 적 없는 파일, $ git add 하면 아무 변화 없어 보이지만 status 치면 Changes 확인할 수 있음.

 

$ git rm --cached <파일명> 이전 단계로 내려감

$ git add . 폴더 안에 있는 모든 변경사항을 stage area로 옮김

 

첫 commit 할 때 *** Plase tell me who you are. Run 뜨면 "" 안에 띄어쓰기 없이

git config --global user.email "이메일"

git config --global user.name "이름" 입력하면 됨.

 

$ git log 커밋 내역 확인할 수 있음, commit 이하의 노란색 문자열이 버전을 식별함, 권한과 날짜도 보임.

$ git commit 작성창 나오면서 더 길고 자세한 message 남길 수 있음.

 

 

#

원격저장소에 코드 업로드 = push

 

github에 push하는 과정

- 원격 저장소 생성

- local 저장소에 새 버전 생성

- 새 버전이 만들어진 곳에 $ get remote add origin <url>, $ git push -u origin main 명령어 복붙(=우클릭 후 Paste or Ctrl+Ins)

 

$ git commit -am "commit message" 동시에 add, commit 함. 단, 한번이라도 commit 했던 대상만 가능함.

 

 

중간에 깃허브 로그인 하라는데 비번 잃어버려서 push 시도 여러번 했더니 오류나서 이걸로 해결함.

 

$ git remote remove origin 기존에 연결돼있는 원격 저장소와의 연결 끊음

$ git remote add origin <새로 연결할 레파지토리 url> 로컬 저장소를 원격 저장솟에 연결함

$ git remote -v 

$ git push origin main 소스코드 올림

 

디폴트화 없이 $ git push 하니 fatal: The current branch main has no upstream branch. 오류남.

 

 

#

$ git reset <옵션> working dir, staging area, repository에 올린 거 취소할 수 있음.

--hard HEAD^ 통채로 되돌림 (=커밋 취소후 unstaged 상태로 working directory에서 삭제)

--mixed HEAD^ 커밋 취소 후 unstaged 상태로 working directory에 보존, --mixed 생략 가능

--soft HEAD^ staged 상태로 working directory에 보존

HEAD 가장 최근 버전을 가르킴, HEAD~2 마지막 두 개 커밋, ^ 하나 전으로 되돌림, ^^ 두 개 전으로 되돌림

 

갓 만든 파일에서 $ git reset --hard HEAD^^하니까 새 파일 삭제되고 이전 파일은 수정 전으로 바뀜.

 

#

Branch의 필요성

- 직접 코드를 주고 받는 협업의 경우 불필요한 부분까지 코드 병합을 위해 이해해야 함. 비효율적

- 버전 수정/삭제하는 경우 자칫 엄한 코드까지 날릴 수 있음.

 

과정: 작업 단위로 나눔 > 각자 작업 > 합침

 

$ git init 으로 버전관리를 시작하면 자동적으로 main branch(=다른 branch들이 뻗어나가는 태초의 branch)가 생성됨. 프롬포트의 (main)이 그 흔적.

단, 한 번이라도 commit 을 해야 branch 생성 가능함.

 

$ git branch 현재 branch 목록 보기, * master 는 현재 내가 master branch에 속해 있음을 뜻함.

$ git branch <브랜치 이름> 브랜치 생성함

$ git checkout <브랜치 이름> 다른 브랜치로 들어감

 

와... 폴터에 만든 txt파일을 branch에서만 commit하고 main으로 돌아오니 파일 사라짐 개 신기하다

 

$ git merge <합치려는 브랜치 이름> 현재 브랜치에 <> 브랜치를 합침, 반영함.

 

 

#

$ git diff 변경내역들끼리의 비교 결과를 보여줌

$ git log 하면 보이는 commit 이하 마구잡이 문자열(=commit을 가르키는 commit bash)

 

$ git diff <비교대상 commit bash> <기준 commit bash> "비교대상에 비해" 기준이 무엇이 달라졌는지 보여줌

 

$ git diff <비교대상 branch 이름> origin/<기준 branch 이름> 원격 저장소와 로컬 저장소

$ git diff <비교대상 branch 이름> <기준 branch 이름> 브랜치간 비교

 

$ git diff HEAD HEAD^ 현재 branch의 가장 최근 commit과 이전 commit 비교

$ git diff HEAD 아직 commit하지 않은 현재 작업 중인 내용과 가장 최근 commit 비교

 

$ git revert <되돌아가고 싶은 commit>

reset = commit을 되돌림 = 이후의 버전들은 삭제됨 = 과거 자체를 바꿈

revert = commit을 되돌림 = 되돌린 버전 이후의 버전들이 모두 유지됨 = 과거를 바꿨다는 새 commit을 만듦

 

 

#

원격 저장소 = 외부의 레파지토리

협업은 repository들끼리의 상호작용(조회, 밀어넣기, 갖고 와서 합치기, 일단 갖고만 오기, 복사)임.

 

Local repository <--------------> Remote repository

 

$ git remote add origin <url> =내 local repo와 상호작용할 원격저장소를 더할 건데, 원격저장소 주소는 url 이고 단축이름은 origin 으로 해라

$ git remote 내 local repo와 상호작용하는 원격저장소 목록을 조회함

$ git remote -v 단축이름에 URL도 같이 보임

 

$ git push origin main =내 repo의 main branch를 origin의 main branch로 푸시해라

$ git push -u origin main 두 branch의 상호작용을 디폴트로 설정함, 앞으로 인자 안 써도 됨.

 

$ git pull origin main =origin을 내 repo의 main branch로 머지해라(=동기화해라)

$ git fetch origin main =origin을 내 repo의 main branch로 가져만 와라

$ git clone <url> url에 있는 원격저장소 내용을 cd에 복사해오기

 

 

#

github 협업하기

- 나는 안 변하고 원격이 변한 경우: pull

- 나도 변하고 원격도 변한 경우: pull request, push 권한주기(=collaborator 추가하기)

 

로컬과 원격이 모두 수정된 상태에서 $ git push 하면 ! [rejected] 뜸. 충돌은 파일에서 수동으로 확인/수정한 후 push 하면 됨. $ git push -f origin master 강제푸시 됨.

 

<<<< ===== >>>> 가 경계선이고, 윗부분이 내가 작성한 것, 아래부분이 원격에서 수정된 것. 

 

#

큰 플젝에 충돌이 자주 발생하거나 얼굴 맞대는 작업이 불가능한 경우 invite collaborator는 적합하지 않음.

-> full request

 

협업대상 repository fork하기

fork 해온 곳에서 clone하기(=$ git clone <url>)

branch 만들고 코드 작성하고 push하기

pull request 날리기(=Open a pull request에서 create) 협업대상자는 Merge pull request로 수락함.

pull request 날린 branch 지우기

 

$ git checkout -b <branch 이름> 브랜치 생성과 이동이 동시에 됨

$ git branch -d <branch 이름> 브랜치 삭제

 

 

#

$ git log --all --decorate --graph --oneline 그래프 형식으로 커밋내역 볼 수 있음

--all: all 옵션이 없는 경우 HEAD와 관련 없는 옵션은 표시X

--decorate : 브랜치와 태그 등의 참조를 간결히 표시

--graph : 커밋 옆에 브랜치의 흐름을 그래프로 표시 

--oneline : 커밋 메시지를 한줄로 요약해서 표시

 

* (HEAD -> master) master commit2

* master commit1

| * (branch1) branch commit2

| * branch commit1

|/

* B2

* B1

* B0

 

* (HEAD -> master) 지금 내가 master branch에 서있다는 뜻임.

branch1과 master의 공통조상는 B2, rebase하려면 master commit2가 base가 돼야 함

$ git checkout branch1

$ git rebase master

 

 

 

참고

 

빠르게 git - 핵심만 골라 배우는 Git/Github - 인프런

개발자에게 버전관리는 이제 필수 지식이라고 할 수 있습니다. 기초적인 git 명령어와 Github 회원가입부터 차근차근 Git과 Github를 배워보도록 합시다 :) 초급 개발 도구 Github Git 버전관리시스템 온

www.inflearn.com

 

[Git] Git Remote origin already exists 에러해결 remote origin 삭제

깃의 Remote origin already exists 에러는 기존에 연결되어 있는 레파지토리가 다시 새로운 레파지토리에 소스코드를 올리려고 하면 발생되는 에러입니다. 해결방법은 간단합니다. 위와 같이 원격 저

coding-factory.tistory.com

 

Git Bash #명령어 정리

리액트를 공부함에 있어 사용 중인 커맨드 라인 git bash의 명령어를 정리하였습니다. [파란글씨]는 명령어가 아닌 사용자가 기입하여야할 부분입니다. 공백에 유의하여 작성합니다. - 커맨드창

simuing.tistory.com

 

git

working tree : 작업 디렉토리git 으로 관리하는 파일과 디렉토리 모음커밋을 체크아웃하면 생성되는 파일...

blog.naver.com