본문 바로가기

Etc.

Git

* 깃 초기 설정 및 원격 레포지토리에 파일 추가하기.

git config --global user.name junseong hong

git config --global user.email ebseud6135@naver.com

 

git config --list

설정한 설정들 확인

 

깃에서 앞으로 사용할 설정 global

 

프로젝트를 저장할 폴더를 생성하고

명령프롬포트에서 그 폴더로 이동한 후

git clone https://github.com/DunDung/Git-Study.git

 

클론 즉 다운을 받는다.

내 컴퓨터에 있는 저장소는 local repository

깃허브에 있는 저장소는 remote repositroy

 

깃허브에 올릴 파일을 만들고

 

cd Git-Study

cmd에서 로컬 리포지토리로 이동

 

git add 파일명 -> git add hello.txt

git commit -m "Add Text File Hello.txt"

git push 

 

add -> commit ->push를 통해 github에 반영하고

git fetch -> git merge를 통해 github의 작업물을 내 pc에 반영한다  git pull로 한번에도 가능

 

git pull을 통해 github에 있는 작업 내용을 내 pc로 불러온다.

 

git add . 으로 변경된 작업내용 올리기 가능?

git commit -m "~~~"

 

* 깃 커밋 되돌리기

git log 명령으로 커밋내역 확인 가능  q를 입력해서 해당 창에서 나올 수 있다.

log명령으로 입력하면 커밋 내용에 8f01e6cb5cba5b7b12e2236189860d708c629510 처럼 해당 커밋의

해쉬값이 들어있다.

 

git reset명령으로 이전 작업 내용으로 돌아갈 수 있는데

git reset --hard 해쉬값에서

--hard옵션은 특정 커밋의 해시값이후(해당 커밋 미포함)로는 다 지우는 옵션이다.

--soft옵션은 돌아간 이후에도 이후의 내역들을 다 보관하는 옵션

다른 옵션들도 존재한다. 궁금하면 검색

 

이렇게 지운 상태에서 git push를 한다면 오류가 뜬다.

로컬과 github의 저장소의 내역이 다르기 때문에

-f 옵션으로 강제로 push할 수 있다.

git push -f

 

* 깃 커밋 메세지 수정

커밋메세지 수정 --amend

 

git commit --amend

특정 unix창 실행 

수정 모드로 가기위해 a를 입력

커밋메세지가 맨 윗줄에 뜨는데 그걸 수정

esc를 누르고 맨밑에 :wq!를 입력하면

자동으로 수정 된다.

git push -f

 

* 깃 브랜치 사용하기

 

master 브랜치는 대부분 배포가 가능한  안정적인 버전을 둔다. 통합 브랜치라고 한다.

develop , bug fix 브랜치 등을 대부분 사용한다. 토픽 브랜치라고 한다.

 

git branch 현재 브랜치가 몇개인지 확인하는 명령

git branch develop   develop이라는 브랜치를 만든다.

git checkout develop  브랜치의 헤드를 마스터에서 develop으로 옮긴다.

 

develop에서 add와 commit 하고

git checkout master를 통해 다시 헤드를 마스터로 옮긴다.

git merge develop 명령을 통해 develop브랜치의 변경내용을 master와 통합한다.

git branch -d develop

-d옵션으로 브랜치 삭제를 할 수 있다.

 

merge, 병합을 수행할 때는 master 브랜치에서 수행한다.

브랜치와 마스터의 수정 내용이 겹칠 땐

CONFLICT에러가 발생하며 git commit이 되지 않는다.

<<<<<<< HEAD
충돌 테스트
=======
내용 있음 추가!
>>>>>>> develop

이처럼 서로 내용이 다른 부분을 명시해준다.

 

겹치는 부분을 수정해준뒤

다시 add 후 commit 후 push해주면 된다.

 

* 원격 저장소 관리하기

 

git remote 원격저장소 목록 확인

git remote show origin 원격 저장소에대해 확인하고 싶을 때

git remote -v 전체목록 확인 가능

 

'git remote add 새로운 원격저장소이름 원격저장소경로'

ex) git remote add test https://github.com/DunDung/BabyFoodChef 

특정한 원격 저장소 등록

git remote rename test temp

test원격저장소를 temp라는 이름의 원격저장소로 rename함

git log temp/origin

git merge temp/origin 등 다양한 명령 수행 가능 

git remote rm temp 

특정 원격저장소 제거

 

* git log 수정

깃 처리내역 history 수정

git log --stat  

로그의 통계정보 확인

git log --graph 

브랜치와 병합정보를 그래프 형식으로 표현

git log -p 

커밋에 적용된 구체적인 항목을 출력

git log -p -3

위에서부터 3개까지만 확인

git log --pretty

커밋정보를 우리가 지정한 형식으로 출력 

git log --pretty=online

각각의 커밋내역들이 한줄로 표현된다.

git log --pretty=fromat:"%h -> %an, %ar : %s" --graph

포맷을 정해주는 건데 그래프형태로 출력

%h = 해쉬값

%an = 작성자이름

%ar = 작성날짜

%s = 커밋 메세지

 

* 깃 프로젝트에서 소스코드만 추출하기

일반적으로 프로젝트 소스코드를 간단히 다운로드 받아서 사용하는 입장에서 사용하는 명령

.git 폴더 제외하고 다른 소스코드 내용들만 포함해서 압축파일 형태로 제공하고자 할때 사용

 

git archive

 

git archive --format=zip master -o Master.zip

zip형태로 

-o  out 바깥으로

Master.zip이라는 이름으로 아카이브

git archive --format=zip master -o ../Master.zip

../Master.zip처럼 상대경로로도 설정 가능

 

* 특정한 커밋을 수정, 삭제하기

git rebase

 

git rebase -i

인터렉티브 모드로 에디터가 열린다.

 

git rebase -i HEAD~3

헤드에서부터 최근 3개까지만 에디터로 연다.

 

에디터에서 reword는 커밋은 그대로 사용하되 커밋메시지만 바꾼다

a를 입력하면 INSERT모드로 바뀌어 글자를 입력할 수 있다

바꾸고자하는 커밋메세지쪽에 가서 pick을 reword로 바꾼 후

ESC 후 :wq!를 입력 (:를 안치면 입력이 안된다..)

 

맨 위에 바꾸고자 하는 커밋 메세지가 뜨면

다시 a를 눌러서 메세지를 바꾼 후 

똑같이 esc를 누르고 :wq! 로 나온다.

 

git rebase -i 해시값 을 넣어주면

특정 해시값을 포함 안한 그 위의 로그만 보여준다.

 

커밋 자체를 삭제하려면 

git rebase -i HEAD~3

똑같은 방식으로 DROP키워드를 넣어서 삭제한다.

 

* 깃 커밋 날짜 및 시간 변경하기

git rebase -i 해시값

수정하고 싶은 커밋의 전 커밋의 해시값을 넣어서 불러온다.

(git rebase -i 해시값 을 넣어주면

특정 해시값을 포함 안한 그 위의 로그만 보여준다.)

 

a누르고 pick을 edit으로 바꾼다

esc누른 후 :wq!을 입력하고 나와서

 

git_commiter_date="Nov 10 12:39:43 2019 +0900" git commit --amend --no-edit --date "Nov 10 12:39:43 2019 +0900"

 

를입력한다. 시간은 로그에서 참고해서 복사할 수 있고 바꿀 날자를 넣어주면된다.

요일은 안 넣어줘도 상관없다.

 

마지막으로

git rebase --continue

을 입력하여 변경된 내용을 반영한다.

 

커밋 시간을 바꾸는 방법이 하나 더 있고

커밋 사용자를 바꾸는 방법도 존재한다.

필요한 때가 오면 동빈나 git 15강을 보자.

* 깃 오류들

 ! [rejected]        master -> master (non-fast forward)

 

1. 원인 현재 작업하고 있는 Repository가 서버에 있는 Repository보다 오래된 내용이다. Push 를 하게 되면 서버에 있는 최신 내용은 날라가고 현재 작업한 내용만 적용이 되는 문제가 발생할 수 있기 때문에 에러가 발생하게 된 것이다.

 

2. 해결방법

1) 최신내용을 Local에 적용한 후 올리기 
git pull 명령을 이용하면 기존 작업한 내용에 최신 내용을 덧붙이게 된다.(Local에 자동으로 최신 소스가 Merge.)

      만약 덧붙이는 과정에서 conflict가 발생한 경우그 안에 어느 부분이 conflict가 발생했는지가 나오기 때문에 잘 확인해서 소스를 수정한 후 다시 올리면 된다.

 

2) 강제 삽입하기 (추천하지 않음다른 사람이 작업한 소스가 삭제 됨.)
git push -f

 

'Etc.' 카테고리의 다른 글

Github API issue + JS로 댓글 기능 만들기  (0) 2021.06.01
API vs Library vs Framework  (0) 2021.01.12
HTTP  (0) 2020.09.24
HTTP Cache  (0) 2020.09.11
TDD 정리  (0) 2020.02.17