원본(내꺼내가쓴다는데!) : http://blog.naver.com/imf4/220766148311


GitHub : 로컬PC안의 git Repository 수정사항 commit & push하기


GitHub 저장소의 LifeCycle



r

워킹 디렉토리의 모든 파일은 크게

 Tracked(관리대상임)Untracked(관리대상이 아님)로 나눈다. 


Tracked 파일은 이미 스냅샷에 포함돼 있던 파일이다. 

Tracked 파일은 또

 Unmodified(수정하지 않음)Modified(수정함) 그리고 Staged(커밋으로 저장소에 기록할) 상태 중 하나이다.

그리고 나머지 파일은 모두 Untracked 파일이다.


Untracked 파일은 워킹 디렉토리에 있는 파일 중 스냅샷에도 Staging Area에도 포함되지 않은 파일이다. 

 처음 저장소를 Clone 하면 모든 파일은 Tracked이면서 Unmodified 상태이다. 

파일을 Checkout 하고 나서 아무것도 수정하지 않았기 때문에 그렇다.


마지막 커밋 이후 아직 아무것도 수정하지 않은 상태에서 어떤 파일을 수정하면 Git은 그 파일을 Modified 상태로 인식한다. 

실제로 커밋을 하기 위해서는 

이 수정한 파일을 Staged 상태로 만들고, 

Staged 상태의 파일을 커밋한다.


이런 라이프사이클을 계속 반복한다.


* 출처 : https://git-scm.com/book/ko/v2/Git%EC%9D%98-%EA%B8%B0%EC%B4%88-%EC%88%98%EC%A0%95%ED%95%98%EA%B3%A0-%EC%A0%80%EC%9E%A5%EC%86%8C%EC%97%90-%EC%A0%80%EC%9E%A5%ED%95%98%EA%B8%B0


새 Spring 프로젝트를 만들기 위한 UML을 짜서 github에 올리기로 결정했다..


그래서 UML을 설계한 그림파일을 현재 git Repository 경로로 옮기고, git status로 상태를 보기로 한다.





현재 내 PC의 git Repository에는 노란색 박스쳐진것처럼 파일들이 3개가 있고, 

현재 접속되어 있는 나의 'master' branch의 정보를 보기 위해 아래 명령어를 입력한다.

git status 



"Your branch is up-to-date with 'origin/master'" :

해당 PC에 추가했던 Repository (remote repository 이름/branch이름) 가 최신상태 라는 이야기다.

이 메시지가 나오면 얼마든지 commit과 push 가 가능하다.

"Untracked files : ..."의 내용과 빨간색 글씨 :

현재 내 로컬 git 저장소로 옮겨진 파일은 아직 나의 GitHub 저장소에는 Staged된 상태가 아니다.
이럴때는 위의 설명과 같이 Commit을 하기위해 시뻘겋게 표시된 파일을 Staged 상태로 만들어야 한다.


 


 Modified 상태의 파일을 Stage 하기 

한글이 포함된 파일이 git에 적용이 잘 되는지 확인 해 보기로 했다.




해봤는데 안된다. 그래서 다시 영문이름으로 바꿔서 적용해 보기로 한다.





Tracked상태의 파일들을 Staged 상태로 바꾸기 위해 

git add 파일명
git add .  ← 해당 폴더 안의 모든 파일 Staging

git add aa*.jpg   ← a로 시작하는 모든 jpg파일 Staging

을 입력한다.

그러나 필자는 특정 파일만을 지정해서 add 하기위해 "git add [파일명1 & 파일명2]" 을 시도해 보았으나 실패하고 파일명1 만 Staged되었다..

확인해 보니까 파일명을 사이띄개로 한칸 띄워서 여러개 입력하면 추가하고싶은 것이 add된다. ㅋ





 Staged 하는 작업을 취소하기 

git reset 파일명 or git reset HEAD 파일명

으로 git add 로 추가된 파일을 다시 Unstaged로 되돌릴 수 있다.




이번에는 Staged된 모든 파일을 취소해보기 위해 테스트 해 본다.

명령어는 아래와 같다.

git reset .




 변경사항 파일 Commit하기 


* 주의 : Unstaged 상태의 파일은 커밋되지 않는다

git commit -m "커밋메시지"

  




 Commit된 사항들 Push하기 

git push [로컬Repository별명] [branch이름]

로컬 Repository 별명이란

git add remote origin [GitHub주소] 

로 맨 처음 git 세팅할 때 입력했던 'origin'로컬 Repository 별명이다.


  





git push 이후의 GitHub의 모습.


 


그런데 필자는 jpg파일들을 UML 폴더에 만들어서 이동시켜서 관리하기로 했다.

그래서 UML폴더에다가 jpg파일들을 이동했다.

그러면 자연스레 root에 있던 jpg파일은 없어지게 된다.

  



만들어진 UML폴더를 Staged상태로 바꾼다.

status를 확인 해 보면,

git에서는 변동된 사항이 new file로 인식을 하고,

UML폴더로 이동되어 현재 root경로에서 사라진 파일들은 deleted 로 인식을 한.

  




거기다가 새로운 txt파일도 Staged 시키기 위해 하나 만들어 보았다..
  



git status를 보면,

새로 생성된 텍스트파일이 Untracked로 추가된 것을 확인 할 수 있다.





현재 GitHub의 상태.


UML 폴더에 jpg파일을 이동시킨 것을 한번 commit 시켜 보겠다.

그리고 새로 만든 StudyHard.txt를 Stage한다.
  



 이미 commit한 내용에 Stage된 파일 add하기 

git add 파일명

git commit --amend

commit사항을 수정해서 --amend 하였을때 결과가 아래와 같이 나오는데,

deleted: 상태의 3개 파일은 "Changes not staged for commit:" 로 나온다.

즉 Unstaged라는 말이다. commit가 적용되지 않을 예정이다.
  



GitHub를 보면 알다시피 commit만 하면 변경사항이 GitHub에 적용되지 않는다.
 





git push를 하면 UML폴더와 amend된 파일이 업데이트 되었으나, 역시 root에서 없어져야 할 jpg들은 없어지지 않았다.

왜냐하면 이 3개의 jpg파일은 deleted: 상태이면서 Unstaged 상태이기 때문이다.



git status로 deleted상태인 Unstaged 상태를 확인 해 본다.




 Staging Area 생략하고 commit하기 


git commit 명령을 실행할 때 -a 옵션을 추가하면 Git은 Tracked 상태의 파일을 자동으로 Staging Area에 넣는다

그래서 git add 명령을 실행하는 수고를 덜 수 있다.


git commit -a   /* Staging 생략하고 commit */

git commit -a --amend    /* Stating 생략하고 가장 최근에 commit한 작업에 추가 */






* 일단 이 Step은 건너뛰고 해 볼 것. *

왜냐하면 이론상으로는 git pull을 해버리면 remote 저장소에 있던 원래 작업 목록들을 다운로드를 받는 꼴이기 때문에

로컬 저장소에서 자신이 작업한 내용들이 날아갈 수도 있을 것 같아서이다..

만약 이 작업이 필요하다면, 제안 해 줄 수 있는 것은 본은도 아직gitHub 초보라 백업을 하고 이 Step을 시도해야 할 것 같다.




완료 된 모습.

 

+ Recent posts