Skip to content
TUWLAB.com
일반

[GIT] Commit하고 원격 저장소로 내보내기: add, reset, commit, push

Posted 2014. 10. 23 Updated 2015. 01. 11 Views 3557 Replies 0


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
번호 분류 제목 글쓴이 최근 수정일 조회 수
150 Linux [VirtualBox] Windows 7 물리 디스크 부팅 (Raw Disk Booting or Native Booting) - 배경 file TUW 2017.06.03 1647
149 일반 [GIT] Submodule (Nested Repository) 사용하기 file TUW 2017.06.03 2285
148 Linux [Linux] Screen 터미널 에뮬레이션 프로그램 사용하기 TUW 2015.08.19 1532
147 일반 정규식(Regular Expression)에 대한 소개와 입문, 튜토리얼 file TUW 2017.06.03 13425
146 Linux Intelli Backup: File system 및 Database 백업 자동화 Bash 스크립트 TUW 2017.06.15 2390
145 Linux [Linux] Sudo 명령의 Secure Path TUW 2015.04.24 2437
144 Linux [Linux] fdisk 활용 외: 파티션 생성, 배드블록 검사, 파일시스템 생성 TUW 2015.04.24 4477
143 Linux TCPDump를 활용하여 패킷 모니터링하기 TUW 2014.10.28 3204
142 일반 [C++] Template Class의 정의(Definition)와 구현(Implementation)은 한 파일 안에 있어야 한다. TUW 2015.11.27 4801
141 일반 [GIT] Patch 만들기 및 적용하기: format-patch, am TUW 2015.01.11 14223
140 일반 [GIT] 실행취소와 Commit 삭제: reflog, reset, checkout, revert TUW 2015.09.24 20728
139 일반 [GIT] 임시 저장소 사용하기: stash TUW 2015.11.28 3395
138 일반 [GIT] 병합하고 Commit 재정렬하기: cherry-pick, rebase, merge file TUW 2017.06.03 12463
137 일반 [GIT] Branch 관리하기: branch, checkout, push, pull TUW 2015.01.11 5008
» 일반 [GIT] Commit하고 원격 저장소로 내보내기: add, reset, commit, push TUW 2015.01.11 3557
135 일반 [GIT] 로컬 저장소 정보 조회하기: status, show, log, diff, blame file TUW 2017.06.03 2747
목록
Board Pagination Prev 1 2 3 4 5 6 7 ... 12 Next
/ 12

Powered by Xpress Engine / Designed by Sketchbook

sketchbook5, 스케치북5

sketchbook5, 스케치북5