Skip to content
TUWLAB.com


Commit할 파일 선택하기 - add

Stage 영역은 Commit할 파일들을 올려놓는 일종의 가상 영역입니다. 이 Stage 영역을 이용하여 작업 내용 중 특정 파일들만 선별하여 Commit에 반영할 수 있으며, 이를 활용하여 작업한 내용을 여러 개의 Commit으로 분할할 수 있습니다.

다음 명령어는 변경한 내용을 모두 Stage 영역에 올립니다.

git add --all

특정 파일만 Stage 영역에 올리고 싶다면 --all 대신 파일명 쓰도록 합니다.

git add [File Name]

reset 명령어를 사용하여 Stage 영역을 초기화할 수 있습니다.

git reset


로컬 저장소에 변경사항을 저장하기 - commit

commit 명령을 통해 로컬 저장소의 현재 Branch에 stage 영역에 올린 변경사항들을 반영한 새로운 commit을 작성합니다.

git commit

명령을 입력하면 Commit Log를 입력할 수 있는 에디터가 나타나고, 여기에 Commit 제목 및 Log를 입력할 수 있습니다. Commit을 취소하려면 아무 것도 입력하지 않고 에디터를 종료하면 됩니다.

commit 명령과 관련하여 자주 사용하는 옵션으로는 --amend가 있습니다. 이 옵션을 부여하면, 새로운 Commit을 생성하지 않고 가장 최근에 작성한 Commit을 수정합니다.

git commit --amend

이 옵션을 사용해 Commit을 수행하면, 작업한 내용을 가장 최근의 Commit에 덧붙입니다. 이는 가장 최근의 Commit을 삭제하고 새로운 Commit을 작성하는 것과 동일한 동작이기 때문에, 가장 최근 Commit의 ID가 새로 부여됩니다.


로컬 저장소의 변경 내용을 원격 저장소로 보내기 - push

다음은가장 많이 사용하는 Push 명령어의 형태입니다. 이 명령어는 '현재 branch의 HEAD Commit까지의 변경사항을 origin이라는 이름을 갖는 원격 저장소의 master branch에 전송하라'는 뜻입니다.

git push origin HEAD:master
  • origin: 원격 저장소 별칭(alias)
  • HEAD: 전송할 최종 Commit
  • master: 원격 저장소의 Branch 이름

이 때, origin(게임 런처 아닙니다-_-!)은 별도로 설정하지 않은 경우 clone 명령으로 원격 저장소를 받아올 때 입력했던 저장소 주소가 됩니다.

Push를 할 때마다 [git push git@git.tuwlab.com:batto.git HEAD:master]처럼 원격 저장소 이름을 포함한 긴 명령어를 사용해야 한다면 불편하기 때문에 원격 저장소 주소를 나타내는 별칭을 만들어 놓고 사용하는 것입니다.

이 별칭은 origin 하나만 있는 것이 아니라, 여러 개 만들어 놓고 사용할 수 있습니다. 즉, 로컬 저장소 하나로 여러 개의 원격 저장소와 연동하여 작업을 할 수 있음을 의미합니다.

※ Forced Push

Push를 수행할 때, 로컬 저장소에는 존재하지 않는 Commit이 원격 저장소에 존재하는 경우 Push 요청이 거절됩니다. 정확히 말하면, 원격 저장소에서 로컬 저장소로 변경사항을 반영한 뒤 원격 저장소의 HEAD Commit이 변경된 경우를 의미합니다.

즉, 로컬 저장소에서 작업하고 있는 도중에 다른 개발자가 원격 저장소에 Push를 한 경우 이후 본인의 Push 요청이 받아들여지지 않고 Reject됩니다.

Push 요청이 Reject된 경우, 일반적인 경우라면 Pull을 통해 원격 저장소의 변경사항을 받아와서 자신의 작업 내용과 병합(Merge)하거나 Commit을 재정렬(Rebase)한 뒤 다시 Push를 시도해야 합니다.

하지만, 이미 Push한 자신의 Commit을 수정해야 하는 경우와 같이 특수한 경우에는 Forced Push를 사용할 수 있습니다. 이 경우, 로컬 저장소와 원격 저장소의 공통 조상 Commit 이후의 원격 저장소 Commit은 모두 삭제되로, 로컬 저장소의 Commit 내용으로 덮어 씌워지게 됩니다.

Forced Push를 하려면 다음과 같이 --force 옵션을 넣거나, +를 붙이면 됩니다.

git push --force origin HEAD:master
git push origin +HEAD:master

Forced Push는 일반적인 Push와 다르기 때문에, 사용하기 전에 세심한 주의를 기울여야 합니다. 원격 저장소에 있는 하나 이상의 Commit이 삭제되므로 이로 인해 동료 개발자에게 혼란을 불러일으킬 수 있습니다.

Forced Push를 하는 경우는 이미 Push한 자신의 Commit을 수정하기 위한 경우가 대부분입니다. 대개 Push한 직후 '아 맞다!'하고 떠오르는 내용을 수정하기 위한 경우입니다.ㅎㅎ

따라서 Push를 하기 전에 대상 Commit들을 다시 한 번 살펴보는 습관을 들여야 합니다. 불가피하게 Forced Push를 사용해야 할 경우, Project Manager 및 다른 팀원들에게 알린 뒤 해야 의도치 않은 불상사를 막을 수 있습니다.


TAG •
서비스 선택
이용중인 SNS 버튼을 클릭하여 로그인 해주세요.
SNS 계정을 통해 로그인하면 회원가입 없이 댓글을 남길 수 있습니다.
댓글
?
Powered by SocialXE

List of Articles
번호 분류 제목 글쓴이 최근 수정일 조회 수
178 일반 [CMake 튜토리얼] 3. CMakeLists.txt 기본 패턴 TUW 2017.02.26 84
177 일반 [CMake 튜토리얼] 2. CMakeLists.txt 주요 명령과 변수 정리 file TUW 2017.02.26 96
176 일반 [CMake 튜토리얼] 1. CMake 소개와 예제, 내부 동작 원리 file TUW 2017.03.20 103
175 일반 [Make 튜토리얼] Makefile 예제와 작성 방법 및 기본 패턴 2 file TUW 2017.03.20 126
174 일반 [적외선 통신] IR 리모컨 신호 분석 file TUW 2016.07.25 1344
173 일반 [적외선 통신] IR 송수신 소자, IR 송수신 회로 file TUW 2016.07.25 1371
172 일반 GitLab 코드리뷰 페이지 탭 크기(Tab Size) 4칸으로 바꾸기 file TUW 2016.07.05 682
171 일반 Linux에서 Code Composer Studio (CCS) - Ti ARM 개발환경 구축하기 file TUW 2016.06.26 742
170 Nginx Nginx에서 자동 Redirection(301 Permanently moved) 설정하기 TUW 2016.06.25 481
169 Nginx Nginx에서 SSL(HTTPS) 보안 서버 설정하기 (+약간의 이론) TUW 2016.06.25 1079
168 Security SSL Handshake 과정 TUW 2016.06.21 981
167 Linux [Ubuntu] 원격 Shell에서 로그인 사용자 디스플레이에 GUI 프로그램 실행하기 TUW 2016.03.06 1114
166 Linux Root권한 없이 Wireshark 사용하기 file TUW 2016.07.05 839
165 Linux fstab과 sshfs fuse를 활용한 원격 디렉토리 자동 마운트하기 TUW 2016.01.11 3889
164 Python [Django Tutorial] 9. Production - uWSGI를 통해 Nginx 웹 서버와 연동하기 1 TUW 2017.02.26 4521
163 Python [Django Tutorial] 8. Production - setting.py설정, Static파일 모으기 TUW 2017.02.26 1061
목록
Board Pagination Prev 1 2 3 4 5 6 7 ... 12 Next
/ 12

Powered by Xpress Engine / Designed by Sketchbook

sketchbook5, 스케치북5

sketchbook5, 스케치북5