이전 작업으로 돌아가는 실행취소가 아니라,
commit을 했는데, 미처 추가하지 못한 작업이 있어서 나중에 추가를 하고 싶은 경우에 대해서 설명하고자 한다.


1. Ready


오늘 설명할 기능을 위해서 상황을 준비했다.
위 스크린샷을 보면 알겠지만, 파일 2개를 수정한 상황으로 준비했다.


2. commit


2개의 파일 중에서 1개만 staging해서 commit을 했다고 해보자.

그런데, 나머지 파일도 방금 진행한 commit에 집어넣고 싶다면 어떻게 해야할까!?


3. git commit --amend


대상 파일을 'add' 하고선 'git commit --amend' 명령어를 실행하면,
comment 입력 에디터 화면이 뜨고, 저장을 하고 종료하면 마무리 된다.


4. log


로그를 확인해보면, 2개의 commit이 아니라 기존 commit에 반영이 되어있다는 것을 확인할 수 있다.

그리고 commit 기록 시간이 중요한데,
처음에 commit 시간이 그대로 반영 되어있다. 변화하지 않는다!




사용자가 실수를 했을 경우에 이를 만회할 수 있는 명령어들 중 하나에 대해서 설명을 하였다.
이미 commit을 한 것을 수정할 수 있다는 것은 살짝 논란거리가 될 수도 있다.

하지만, 나중에 살펴볼 Remote Server와의 관계를 생각하면 별 문제가 아닐 수도 있다.

중요한 것은 우선 실수를 하지 않는 것이다.
하지만, 만약 commit 할 때에 실수를 했다면 'git commit --amend'를 기억하면 더 좋겠지...!? ^^
반응형

'SCM > Git-GitHub' 카테고리의 다른 글

Git Server - Local  (0) 2012.02.22
Protocol - Git Server  (0) 2012.02.20
Log - gitk  (0) 2012.02.15
Log - git log  (2) 2012.02.14
Move file - git mv  (0) 2012.02.13

이번에 소개할 내용은 일단 알려는 드리지만, 절대 추천하지 않는 명령어(옵션?) 이다.

파일을 수정한 이후 git에 등록하기 위해서는 add를 통하여 staged 상태로 만든 후 commit을 해야한다.
그런데, 이러한 과정이 귀찮다면?


1. git commit -a

   - 소스 파일을 수정한 이후 add 과정 없이 바로 commit을 통해서 한 번에 처리할 수 있다.
   - commit의 옵션 중 '-a'를 사용하면 된다.


   - '-m' 옵션은 앞에서 살펴본 바와 같이 주석을 바로 적어주고 싶을 때 사용하는 옵션이다.


   - add 작업과 commit 작업을 합쳐서 한 번에 할 수 있는 것이다.



[ 주의사항 ]

새로운 파일을 등록할 때에도 'git add'를 사용한다.
그렇다면, 새로운 파일을 등록하고 commit을 할 때에도 'git commit -a'를 사용해도 될까?

답은 "안된다!" ^^




하지만, 이는 결코 추천하지 않는 방법이다.
그 이유는 무엇을 commit 하는지 명시하지 않는 방법이기 때문이다.
이는 종종 원하지 않는 것까지 commit을 하는 실수를 범한다.

무엇을 commit할 것인지 제대로 확인하지 않고 그냥 편의만 추구하는 것은
형상관리의 영속성을 해치는 가장 큰 악습 중 하나이다!!!!

이러한 방법이 있는 것만 확인하고 사용하지는 않기를 바란다~!!!
(그러면서 알려준다는 것 자체가 죄악인데... ^^)

반응형

git 의 Review 기능을 설명하고자 하는 것이 아니라,
지금까지 하나씩 알아보았던 것들 중에서 놓친 것이나 조금 더 알아볼 것들에 대해서 언급하고자 한다.


1. stage

   - git 에게 어떠한 action을 취할 대상들을 알려주는 과정이 필요하다.

   - 형상 관리를 하고자 하는 새로운 파일들, 반영을 하고자 하는 수정한 파일들 또는
     파일 이름을 변경하거나 삭제를 하거나 등등의 작업의 대상을 등록하는 것이다.

   - 다시 말하면, commit 을 할 내역을 알려주기 위한 과정이다.

   - 즉, 소스 파일을 수정을 열심히 하고 나서 commit 만 덜렁 하면?! 안된다!
     먼저 'git add'를 통해 stage 상태로 등록을 하고 commit을 해야 한다!


2. git commit -m

   - 간단한 주석과 함께 가볍게 commit을 하기 위해서는 '-m' 옵션을 사용하면 된다.


   - 앞에서 작업했던 것을 그대로 가지고 테스트를 해봤다.


3. git add --all

   - 앞에서 우리는 파일을 staging 하기 위해서 'git add 파일이름' 과 같이 일일이 명시해줬다.
   - 귀찮은 우리를 위해 좋은 옵션이 있다! 'git add --all'



4. git commit

   - 별다른 옵션 없이 그냥 'git commit'을 하게 되면 주석을 적기 위핸 에디터 창이 뜨게 된다.


   - 한글도 별 이상 없이 그냥 된다.
   - 다만 어려운 것은, 주석을 적을 때마다 느끼는 것이지만... 뭐라 적어야 할 지 모르겠다는 점... ^^



5. git config --list & git log

   - 위에서 'git commit'을 하게 되면 에디터가 뜬다고 했는데, 나의 경우에는 'nano'가 떴다.
   - 예전에 이미 다 했던 것이지만, 복습하는 차원에서 다시 한 번 확인만 해보자.


   - 더불어 아쉬운 마음에 'git log'까지 한 번 확인해보자.


오늘은 여기까지~^^

반응형

'SCM > Git-GitHub' 카테고리의 다른 글

Git 도우미 - TortoiseGit (in Windows)  (0) 2012.02.05
One Shot - commit  (2) 2012.01.22
Compare - modify (git diff, git log) 2/2  (0) 2012.01.18
Compare - modify (git diff, git log) 1/2  (0) 2012.01.17
Tracking file - ignoring  (0) 2012.01.15

git 에게 관리할 파일을 알려준 다음 우리가 경험하게 되는 다음 일은 바로 파일의 수정이다.
(아래에서 보는 코드의 원본은 open-source 로 진행되는 videoparser 이다)

관리 중인 소스 파일 중 하나를 수정한 이후...


1. modify & git status

   - 코드를 수정한 후 'git status'를 실행한다
   - 'modified' 된 파일이 확인된다.

 



2. git diff

   - 과연 무엇을 수정했는지 그것을 알고 싶으면 'git diff'를 실행하면 된다.



3. git add

   - 수정된 파일을 git 에게 알려주기 위해서는 우선 'git add' 과정을 다시 거쳐야 한다.



4. git commit

   - 최종적으로 'git commit'을 실행하고 코멘트를 적어주면 최종적으로 수정한 내역이 반영된다.



5. git log

   - 'git commit'을 실행하면 최종적으로 어떤 내용이 반영되었는지 알려준다.
   - git 에 반영된 내역들을 확인하기 위해서는 'git log'를 실행하면 볼 수 있다.




만약 여러개의 파일들을 수정하면 그것들을 일일이 하나씩 등록을 해야하는지,
변경한 것을 취소하고 싶을 때 어떻게 하는지 지금 상황에서 궁금한 것이 많겠지만,
차차 추가적으로 확인하도록 하자!!! (절대 지금 졸려서 그런 것 아니다!!! ^^)

반응형

'SCM > Git-GitHub' 카테고리의 다른 글

git Review - stage, add, commit  (0) 2012.01.19
Compare - modify (git diff, git log) 2/2  (0) 2012.01.18
Tracking file - ignoring  (0) 2012.01.15
Tracking file - add, status, commit  (0) 2011.11.30
File Status Lifecycle in GIT  (1) 2011.11.22

git의 기능들에 대해서 설명해 나가기 위해서 avi 동영상 파일의 parser를 만들어 나가도록 하겠다.
언어는 뭘로 할까 하다가, python을 가지고 한 번 해보도록 하겠다.


1. git init

      - 일단은 리퍼지토리를 하나 생성하자 (= 프로젝트를 하나 생성하자)


  $ mkdir aviParser
  $ cd aviParser
  $ git init


2. create file

      - git을 이용하여 관리할 파일을 만들자


  $ nano ./aviParser.py
  $ git status

      - 'aviParser.py'라는 파일을 생성한 리퍼지토리의 디렉토리에서 생성하자
      - 'git status'라는 명령어를 쓰면, 현재 리퍼지토리의 상태에 대해서 확인할 수 있다
      - 위의 예를 보면 'Untracked files'에 'aviParser.py' 파일이 있다고 알려준다
      - 거기에다가 친절하게 어떻게 해야하는지까지도 알려준다. (use "git add")


3. git add

      - 새로 만든 file을 git에 등록을 하자


  $ git add ./aviParser.py

      - 앞에서 'git status'로 확인해본 결과 'Untracked files'에 'aviParser.py'이 있다는 것을 확인했다.
      - 'git add ./aviParser.py'를 통해 해당 파일을 등록하고,
      - 다시 'git status'로 상태를 확인해 보면, 'new file'에 해당 파일이 있는 것을 볼 수 있다.


4. git commit

      - 최종적으로 git에게 확정을 지어주기 위해서는 'commit'을 해주어야 한다.


  $ git commit -m 'initial project!'

      - 앞에서 'git status'를 통해 확인했듯이 'git add'를 한 후 상태는 'new file'로 등록이 되어 있다.
      - 최종적으로 git에게 앞에서 한 명령(여기에서는 add)을 확정짓기 위해서는 'commit'을 해주면 된다.
      - 'commit'을 하면서 동시에 'comment'를 같이 명시해줄 수도 있다.
      - 'commit'을 하고 난 후 'git status'를 하면 아무 것도 할 것이 없다고 나온다.



지금까지 새로 프로젝트를 생성해서 신규로 파일을 생성하고,
그 파일을 git에 등록을 하는 과정을 살펴보았다.

이 과정을 이미지化 해보면,
"File Status Lifecycle in GIT"에서 봤던 그림과는 조금 다른 그림을 아래와 같이 그릴 수 있다.


반응형

'SCM > Git-GitHub' 카테고리의 다른 글

Compare - modify (git diff, git log) 1/2  (0) 2012.01.17
Tracking file - ignoring  (0) 2012.01.15
File Status Lifecycle in GIT  (1) 2011.11.22
Repository 생성하기  (1) 2011.11.20
저장소 - Repository  (0) 2011.11.17

+ Recent posts