Skip to content
TUWLAB.com
모든 게시물에 대하여 '링크'
방식의 퍼가기만 허용합니다.
한양대학교 전자통신컴퓨터공학부
바라미
  • 323
  • 2681747
DNS Powered by DNSEver.com
일반

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

Posted 2014. 10. 23 Updated 2018. 01. 18 Views 28089 Replies 0

 

Commit할 파일 선택하기 - add

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

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

git add --all

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

git add [File Name]

Untracted File을 제외한 수정/삭제된 파일만 Stage 영역에 올리고 싶다면 -u 옵션을 쓰도록 합니다.

git add -u

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
번호 분류 제목 글쓴이 최근 수정일 조회 수
» 일반 [GIT] Commit하고 원격 저장소로 내보내기: add, reset, commit, push TUW 2018.01.18 28089
96 일반 [GIT] Branch 관리하기: branch, checkout, push, pull 2 TUW 2018.02.03 48805
95 Linux [Emacs] 주요 단축키 모음 file TUW 2017.06.02 11755
94 Python [Django Tutorial] 9. Production - uWSGI를 통해 Nginx 웹 서버와 연동하기 1 TUW 2018.06.17 11161
93 Python [Django Tutorial] 8. Production - setting.py설정, Static파일 모으기 TUW 2017.06.16 5318
92 Python [Django Tutorial] 7. 백엔드 콘솔에 Custom Command 추가하기 file TUW 2017.06.16 3999
91 Python [Django Tutorial] 6. Database 연동하기 - Model설계, Migration file TUW 2017.06.16 29907
90 Python [Django Tutorial] 5. Static 파일 사용하고 관리하기 file TUW 2017.06.16 9084
89 Python [Django Tutorial] 4. URL Config, Template 및 View의 동작에 대한 이해 file TUW 2017.06.16 9002
88 Python [Django Tutorial] 3. 프로젝트 및 App 생성, settings.py수정(DB연동, Migration), Runserver file TUW 2017.06.14 12116
87 Python [Django Tutorial] 2. 개발 환경 세팅하기 - pyenv 및 virtualenv 활용 TUW 2017.02.26 6431
86 Python [Django Tutorial] 1. 파이썬 기반 웹 프레임워크 Django에 대한 소개 2 TUW 2017.02.26 10786
85 Linux [ColorGCC] 컴파일 경고 및 오류메시지 컬러로 출력하기 file TUW 2017.06.02 9874
84 일반 [CMake 튜토리얼] 3. CMakeLists.txt 기본 패턴 5 TUW 2019.08.19 50263
83 일반 [CMake 튜토리얼] 2. CMakeLists.txt 주요 명령과 변수 정리 1 file TUW 2019.10.02 186438
82 일반 [CMake 튜토리얼] 1. CMake 소개와 예제, 내부 동작 원리 file TUW 2018.06.13 173072
목록
Board Pagination Prev 1 ... 4 5 6 7 8 9 10 ... 13 Next
/ 13

Powered by Xpress Engine / Designed by Sketchbook

sketchbook5, 스케치북5

sketchbook5, 스케치북5