-
2022-07-21 : GitTIL ( Today I Learned ) 2022. 7. 21. 10:53
git 공부
1. Merge의 상황
- 내가 pull을 실행한 후 작업 중 다른 사람이 push를 하여 원격저장소를 업데이트 한 경우 내 push 요청은 거부된다
→ 이런 경우 merge라는 작업 진행하여 다른 사람의 업데이터 이력을 내 저장소에도 갱신
( 만약 merge하지 않은 채로 이력을 덮어쓰면 다른 사람이 push한 업데이터 내역 사라짐 )
참고 자료 : https://yoonsidae.tistory.com/46
Git 명령어 기본
// git에서 사용중인 (출력되는)이름을 바꾼다 git config user.name 'name' // git에서 사용중인 (출력되는)이메일을 바꾼다 git config user.email 'email@naver.com'
- config 뒤에 --global를 붙이면 전역 설정을 할 수 있다
// 브랜치를 새로 만듦과 동시에 이름을 정한다. git checkout -b "브랜치이름"
// 코드 변경사항을 모두 스테이지에 올린다. git add . // 스테이지에 올린 내용을 commit함과 동시에 메시지를 입력 git commit -m "" // commit을 서버에 push한다 (업로드 개념) git push origin "브랜치이름"
// 원격저장소의 커밋 변경내역을 가져온다. git fetch // 원격저장소의 커밋 변경내역을 가져옴과 동시에 로컬 브랜치에 병합 git pull
// 현재 체크아웃중인 브랜치에서 다른 브랜치의 내용을 가져온다. git merge --no-ff "브랜치 이름"
- 내가 B 브랜치 기준으로 만들었던 C 브랜치의 작업이 끝나서 B브랜치에 다시 병합을 해야한다면?
답 : B브랜치로 이동(체크아웃)한 뒤에 git merge --no-ff "B" 명령어 사용
// git merge 명령하기 전으로 되돌린다. git merge --abort
참고 자료 : https://jae04099.tistory.com/223
Git 작업 시
1. 자신이 수정한 사항은 master 브랜치가 아닌 다른 브랜치를 따서 작업
ㆍmaster 브랜치는 언제나 배포 가능한 상태, 안정적인 상태이어야 한다
ㆍ기본적으로 작업 할 브랜치의 이름은 기능에 따라 feature, bugfix 등으로 정한다.
// 브랜치 생성 git branch <branch-name> // 브랜치 이동 git checkout <branch-name> // 브랜치 생성 후 바로 이동 git checkout -b <branch-name> // 브랜치 목록 보기 git branch // 브랜치 삭제 git branch -d <branch-name>
2. 작업 후 master 브랜치에 병합하는 방법은 merge와 rebase가 있다
ㆍ커밋을 한 후 바로 push하는 경우는 잘못된 방법으로 원하는 만큼 커밋을 한 후 마지막에 push를 하면
커밋 이력이 나타난다
ㆍmerge는 그냥 git push origin master처럼 현재까지의 커밋 이력을 하나하나 살려 자세하게 병합
ㆍrebase의 squash는 말 그대로 커밋 이력들을 하나로 압축하여 병합
- 커밋의 기록을 소중히 하는 사람이면 merge
협업중이라면 필요한 기록만 남기는 rebase가 적절하지 않을까?
// 기록 확인, q : 탈출 git log
// 가장 최근에 진행한 커밋을 포함 3개의 커밋을 rebase git rebase -i HEAD~3
1. i를 누르면 수정 가능 상태가 된다. 맨 아래 INSERT라고 뜸
2. 맨 위 커밋을 제외한 나머지 커밋을 pick 대신 s로 변경
3. esc를 누르면 저장 가능 상태가 된다. INSERT가 사라짐
4. :wq를 눌러 창을 빠져나온다.
5. 엔터를 누르면 아래와 같이 squash한 커밋들 중 삭제하고 남기고 수정할 수 있는 창이 뜸
6. 이도 똑같이 i를 누르고 수정
7. 삭제하고 싶은 커밋은 맨 앞에 #을 붙이고 수정하고싶은 커밋은 수정하거나 남겨두면 된다.
8. 그리고 엔터를 누르면 성공적으로 리베이스 됐다는 말과 함께 수정했던 커밋만 남는다.
9. push
3. pull request ( PR ) - Github
- 이후 최종적으로 push를 하면 ( 작업 브랜치에 push시 ), pull request를 만들 수 있다
- push를 하면 push 한 원격 저장소에 Compare & pull request 알림을 뜬다
- PR 작성 후 Create pull request 클릭
- master 브랜치에 적용시키기 적합하다면 merge pull request 클릭
- 새 작업을 진행할 때는 다시 브랜치를 따서 작업하는 식을 반복!
Git 명령어
1. amend
git add new_file.txt git commit --amend
- 커밋에 반영되었어야 할 내용이 누락된 경우 새로운 커밋을 생성할 필요없이, amend 명령어를 통해서 기존 커밋에 추가
- amend 명령어로 커밋 메시지도 수정 가능
- 원격저장소에 이미 push된 커밋을 amend로 수정한 경우 원격저장소에 force push하여 변경된 커밋으로 덮어 씌어야 함
2. cherry-pick
git cherry-pick [selected commit id]
- 다른 branch에 속한 커밋 중 원하는 하나만 현재 branch로 반영하는 기능
- 선택된 커밋 이전의 커밋이나 이후의 커밋은 현재 branch로 반영되지 않음
3. reset
git reset --mixed [commit] git reset --soft [commit] git reset --hard [commit]
- branch를 옛날 커밋으로 되돌리는 기능
- --mixed : reset의 기본 옵션으로, 선택한 커밋 이후의 변경사항들은 없애지 않고
unstaged 상태 ( untracked 혹은 modified ) 로 남겨두는 옵션
- --soft : --mixed와 유사하지만 변경사항들을 staged 상태로 남겨두는 옵션
- --hard : 변경사항들을 모두 없애고 완전히 깔끔한 상태로 변경하는 옵션
4. revert
git revert [commit]
- 잘못된 커밋을 생성한 경우 해당 커밋 이전으로 reset할 수도 있지만, 변경사항 되돌리는 커밋을 새로 생성하는 것이 더 좋음
- revert : 선택한 커밋 이전의 커밋 상태를 가지고 와서 새로운 커밋을 생성하는 명령어
- 즉, 잘못된 커밋을 제거하는 것이 아닌, 그 이전의 상태로 다시 덮어 씌우는 작업
5. stash
git stash git stash apply
- stash : 커밋하지 않은 변경 사항을 서럽에 넣어두기
- stash apply 서랍에 넣어둔 작업들을 다시 가져오기
- tracked 상태인 파일들만 서랍에 넣을 수 있음
'TIL ( Today I Learned )' 카테고리의 다른 글
2022-07-27 : 파일업로드 & buffer, 기타 등등 (0) 2022.07.27 2022-07-26 : Git (0) 2022.07.26 2022-07-25 : JAVA (0) 2022.07.25 2022-07-18 : JS (0) 2022.07.18 2022-7-15 : react / JS / TS (0) 2022.07.15