일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- mac hadoop 3
- 카카오 2020 코딩테스트
- 자소서 시간 줄이기
- Failed to connect to localhost:10000
- Resources are low on NN
- hive beeline 에러
- 자소서 너무 오래 걸림
- 도커 교과서
- Could not open client transport with JDBC Uri: jdbc:hive2://localhost:10000
- Safe mode is ON
- mac hive
- hadoop safe mode
- 백준 18428
- 카카오 2020 코테
- mac hadoop 설정
- 자소서 빨리
- 카카오 자물쇠와 열쇠
- mac hadoop
- 기업 조사 빨리 하는 법
- 이더리움 #ethereum
- hive beeline 설정
- 자소서 빨리 쓰는 법
- mac hadoop 설치
- hive beeline 실행
- hadoop safe mode leave
- is not allowed to impersonate hive (state=08S01
- mac hive 3
- hive beeline
- 이더리움
- code=0)
- Today
- Total
A seeker after truth
Git 기본 - add,commit,push,branch,pull-request,merge 등 본문
* 본 글은 리얼 리눅스에서 진행한 <Git, 어디까지 써봤니?>(유료 강좌)에서 실습 위주 강의를 수강한 후 한 사이트(https://rogerdudler.github.io/git-guide/index.ko.html)를 참고하여 배운 내용을 정리, 기록한 것이다.
add : 커밋할 목록에 추가
commit : 커밋 ( 히스토리의 한단위 ) 만들기
push: 현재까지 역사 (commits) Github 에 밀어넣기
commit: 깃 저장소에 내 폴더에 있는 모든 파일에 대한 스냅샷을 기록하는 것. 변경 사항의 모음이 아닌 하나의 최종 코드 모음. 디렉토리 전체를 복사하여 붙여넣는것과 유사하지만, 훨씬 유용한 방법이다.
Git은 가능한 한 커밋을 가볍게 유지하고자 하기 때문에, 커밋할 때마다 디렉토리 전체를 복사하진 않는다. 각 커밋은 저장소의 이전 버전과 다음 버전의 변경내역("delta"라고도 함)을 저장한다. 그래서 대부분의 커밋이 그 커밋 위의 부모 커밋을 가리킨다.
저장소를 복제(clone)하려면 모든 변경분(delta)을 풀어내야 한다. "resolving deltas" 명령을 통해 결과를 볼 수 있다.
branch: 안전하게 격리된 상태에서 무언가를 만들 때 사용한다. 저장소를 만들면 master 가지는 기본으로 만들어진다. 따라서 다른 가지를 이용해 개발을 진행하고, 개발이 완료되면 master 가지로 돌아와 병합한다.
git checkout -b (가지 이름): (가지 이름)이란 가지를 만들고 그 가지로 갈아탄다. 브랜치 작성과 체크아웃을 한꺼번에 실행
git checkout master: 당연 master 가지로 돌아오는 명령
git branch -d (가지 이름): delete 준말인가보다. 가지를 삭제하는 명령이다.
내가 새로 만든 가지를 원격 저장소로 전송하기 전까진 다른 사람들이 접근할 수 없다.
commit한 내용을 원격 서버 즉 깃허브 저장소로 올리는 명령: git push origin (branch명)
다만 기존에 있던 원격 저장소를 복제한 것이 아니라면 원격 서버의 주소를 git에게 알려줘야 한다. : git remote add origin <원격 서버 주소>(혹시 fork 해온 게 아닌 경우? 그리고 자기 계정에 자기가 쓸 폴더 만들어둔 경우? 그리고 거기서 fork해온 적이 한번도 없는 경우?)
나의 로컬 저장소를 원격 저장소에 맞춰 갱신하는 것이 바로 pull이다: "git pull". 이렇게 하면 원격 저장소의 변경 내용이 로컬 작업 디렉토리에 받아지고(fetch), 병합(merge) 된다. 다른 가지에 있는 변경 내용을 현재 가지(예를 들어, master 가지)에 병합하려면 "git merge <가지 이름>을 실행하면 된다.
그런데 위 두 가지 명령 모두 git은 자동으로 변경 내용을 병합하려고 시도한다. 그러나 항상 성공하는 게 아니라 충돌이 일어나기도 한다.
이런 경우 git이 알려주는 파일의 충돌 부분을 직접 수정해서 병합이 가능하도록 해야 한다. 수정을 한 후 "git add <파일 이름>"으로 아까의 파일을 병합하라고 알려줘야 한다. 병합하기 전, "git diff (원래 가지) (비교 대상 가지)"를 이용해 바뀐 부분을 비교해볼 수 있다.
로컬 변경 내용 되돌리기: "git checkout -- (파일 이름)". 실수로 뭔가 잘못했을 때 쓰면 된다. 이 내용은 로컬의 변경 내용을 변경 전 상태(head)로 되돌려준다. 단, 인덱스에 추가된 변경 내용과 새로 생성한 파일은 그대로 남는다.
단, 로컬에 있는 모든 변경 내용과 확정본을 포기하려면 "git fetch origin" 명령으로 최신 이력을 가져오고, "git reset --hard origin/master" 명령으로 로컬의 master 가지가 그 이력을 가리키게 할 수도 있다.
[1주차 실습 내용]
미리 캐치저장되어 있을지 모를 계정정보 삭제 ( 처음 설치 시 생략가능 )
# git config --global --unset credential.helper
# git config --system --unset credential.helper
git 명령을 다룰 폴더로 이동한 뒤 해당 폴더를 git 초기화
# git init
소스 코드 파일추가 (커밋할목록에추가add)
# git add report_card.c
첫 commit 하기
# git commit -m "report card"
**one line message 를 남길때는 -m 옵션을 주고 메시지를 쓰면 된다. 원라인으로 하고 싶지 않은 경우 -m 옵션을 빼고 "git commit" 만 치면 vi 입력창이 뜬다.
상태를 확인한다
# git status
commit3 폴더에 있는 report_card.c 소스 파일로 수정 , 덮어쓰기 후 확인
# git diff
지금까지 한 commit 들을 확인하자
# git log
서명과 함께 commit 한다. (-s 옵션으로 서명을 포함한다.)
# git commit -sm "report card: Show the sum of each grade"
* 서명의 의미는 본 오픈소스의 라이센스를 제대로 이해하고 작성한 commit 이라는 확인 서명( 주로 리눅스 커널에서 commit 을 공식적으로 만들때 많이 이용된다)
지금까지 한 commit 들을 확인하자
# git shortlog
github repository 즉 원격 저장소를 생성한 뒤, 지금까지의 commit을 push하자
복사한 URL 로 Github 원격저장소 등록
# git remote add origin < 복사한 URL>
Github 원격 저장소 (origin) 에다가 밀어 넣자 .
# git push origin master
이제 깃허브 commit 항목으로 들어가면 지금까지 추가한 commit들이 나오는 것을 확인할 수 있다.
여기서, 가장 최근에 추가한 커밋을 수정하려고 한다면,
# git commit --amend
*vi 에디터또는지정된에디터(메모장등) 이열릴수있다. Commit 메시지를 수정하거나 수정없이 에디터를 닫으면 완료
바로 push 해보자 (충돌 오류 발생)
# git push origin master
* Local(본인 노트북, PC) 에 기록된 commit 들과 Github 에 먼저 push 하여 저장된 commit 들의 commit ID 가 일치하지 않는 부분이 있기 때문에 충돌이 발생한다. 이미 한번 push를 했으니...
* 물론 모든 commit ID 가 일치한상태에서 Local 에만 새로운 추가 commit 있을때는 push 가능
강제로 push 해서 수정하자 (--force 또는 -f 옵션 사용 가능)
# git push origin master --force
이번엔 add한 것을 취소해보려고 한다.
touch로 빈 파일 생성하고 add하자 (;로 명령어들을 연속적으로 실행할 수 있다)
# touch test; git add test
현재상태 확인해보고 # git status
reset 으로 add 한거 취소해보자 # git reset
현재 상태 다시한번 확인해본다 . # git status
이번엔 commit 기록을 없애보자.
아까 test 파일 여전히 존재하는지 확인 ( 지웠으면 다시만들기 )
# git status
임의로 실수의 commit을 만들어낸다.
# git add test; git commit -sm “test”
그리고 push 까지 해서 Github에 있는 tree까지 실수 commit을 넣어버린다. //여기 이해가 안되는데...?
# git push origin master
그리고 가장 최근 commit을 지운다.
# git reset HEAD~1 //여기서 reset이란 용어가 조금 부적합한 용어라는 부연 설명 해주심. 그럼에도 불구하고 명령어를 reset이라 명명했다고.
강제로 Github 에 있는 tree 도 밀어넣어서 수정한다.
# git push origin master --force
* Github 에 있는 commit 을 수정할 길은 Local 에서 수정후 -f 옵션으로 push 하는 방법 뿐이다 .
<Advanced 실습>
풀리퀘 하는 법!
Pull-request 한다는 의미: 다른 프로젝트에 내가 만든 commit을 제출한다는 의미 (실제 전송 단위는 branch).
상대방 프로젝트를 fork( 복사 ) 해서 내 계정에서 관리되는 프로젝트로 새롭게 만들어 두고 그 fork 한 github 프로젝트를 토대로 새로운 commit 내용들을 pull-reqeust 제출 할 수 있다.
자기가 fork해오길 원하는 그 프로젝트에 들어간 뒤, fork 버튼을 누른다. 그러면 나의 원격저장소가 추가된다. 이 복사된 프로젝트 페이지에서 Clone or download 초록색 버튼 클릭 -> fork 해서 만들어진 본인 repo 의 URL 복사
clone으로 fork한 repo 받아오기
# git clone < 아까 fork 한 repo 에서 복사한 URL>
clone한 프로젝트 폴더로 이동한 뒤, pull-request 작업할 브랜치(develop) 따로 만들기
# git checkout -b develop
*브랜치 생성이란 간단한 비유로 “같은 폴더에 또다른 세상 열기”라 부연 설명해주심
프로젝트 폴더 속 한 폴더 '폴더1'이 있다 하면, 이 폴더로 이동.
이 폴더 안에 작업을 위해 또 한 폴더를 만들어, 이 폴더로 이동한 뒤, # mkdir 폴더명; cd 폴더명
추가한 폴더(내가 작업한 소스 내용) 통째로 add
# git add (나의 소스작업폴더)
준비된 파일들 commit
# git commit -sm “test pull request”
내가 fork한 repo의 develop 브랜치로 push (주의: master 아님)
# git push origin develop
나의 프로필에서 fork해서 만들어진 프로젝트 페이지로 이동
-> 방금 Push 했던 브랜치를 확인하기 위해서 Branch 탭 클릭
-> Pull-request 하려는 브랜치에서 New pull-request 버튼을 클릭
-> fork한 저장소에서 pull-reqeust 버튼 누르기 (아니면 pull-requests 탭에서 Create pull-request 누르기)
-> 본래 프로젝트 페이지에서 만들어진 pull-request 확인하기
<merge로 두 브랜치 합치기>
방금 작업한 develop 브랜치가 현재 브랜치인지 확인하자 (status로도 확인 가능)
# git branch
추가 브랜치 만들어보자
# git checkout -b test
touch로 빈 파일 하나 만들어서 commit 만들어보자
# touch test; git add test; git commit -sm “test”
현재 브랜치 (develop) 을 기준으로 추가 브랜치 (test) 을 합치자
# git checkout develop; git status; git merge test
'Git' 카테고리의 다른 글
[gitlab(vcs)] 2개 이상의 local branch가 synchronized 되는 문제 해결 (0) | 2023.07.05 |
---|---|
오픈소스 기여하기 (0) | 2019.10.23 |
Rebase 집중 공략 (0) | 2019.10.21 |