저장소 생성 완료 후, 새로운 'comment.js'파일 작업을 완료하였습니다.
이 파일을 저장소에 어떻게 반영할 수 있을까요?

Image 출처: git-scm.com
먼저, comment.js 파일을 준비영역으로 보내야 한다. > git add 명령어를 사용
한 번에 추가할 파일이 너무 많다면 현재 폴더 대상으로 지정 가능 > git add .
$ git add comment.js
$ git add .
git status 명령어로 Staging area의 어떤 파일이 변경되었는지 등의 파일의 상태를 확인 할 수 있음
$ git status
comment.js 파일을 staging area(준비영역)에 올려놓았으므로, 어떤 것을 수정했는지 메시지와 함께 저장소에 저장하는 작업을 진행
1) .git 저장소 내에 staging area에 있는 모든 파일을 저장
$ git commit
2) 저장소 반영에 "커밋 메시지"는 생략이 가능하지만 반영한 내용을 추후에 쉽게 알 수 있도록 적절한 메세지를 넣어주기
$ git commit -m "Initial commit"
/*"Initial commit"이 메세지 내용*/
3) 앞에서 적은 메세지에 오타가 있거나 누락된 파일이 있을 경우 수정 가능
$ git commit --amend
/*텍스트 편집기가 실행되고, 수정하고 싶은 수정하면 수정되어 반영됨*/
/*메세지 수정하고 [control+X] > [Y] > [Enter] */
$ git commit --amend -m "add main.py"
/*텍스트 편집기 없이 바로 수정하는 방법 " " 안이 수정하고 싶은 메세지*/
4) 저장소 반영 내영이 궁금하면 아래 명령어를 통해 확인 가능
$ git log
commit commit ID
Autor: sukki <knk1213@gmail.com>
Data: Fri Sep 8 13:45:22
Initial commit
[문제!] git add와 commit으로 저장소에 파일 추가하기
1) 저장소에 파일을 넣으려고 해도 아래와 같은 오류가 발생하면서 넣어지지가 않음
nothing added to commit but untracked files present
2) git status로 파일을 상태를 확인해보니$ git status On branch master Untracked files: (use "git add <file>..." to inclued in wha will be committed) README.text searching.py두 파일 중 searching.py 파일만 commit 하려면 어떻게 해야할까?
git add searching.py 후 git commit -m "add searching.py"로 커밋한다
Git 저장소까지 저장을 완효하면, 파일들의 상태와 history를 git status, git log를 통해 확인할 수 있음
git diff : commit 된 파일 중 변경된 사항을 비교할 때
$ git diff
diff --git a/article.js b/article.js
index ~~~~~~~
--- a/article.js
--- b/article.js
@@ -1 +1 @@
-#let
+#trysome
git log @
[문제!] git 파일의 상태를 확인하고 staging을 취소할 수 있을까?
상황1) README.txt파일만 commit되어 올라감 (초록)
상황2) searching.py 파일은 commit되었다가 수정함 > modified상태
상황3) searching.py 파일만 commit하고 싶음
(tip. modified > staging > commit 이 순서로 진행이 되어야 함
① git add searching.py
② git reset HEAD README.txt
③ git commit -m "add searching.py"
git에서 브랜치를 만들고, 여러 작업을 독립적으로 수행하여 브랜치의 내용을 병합할 수 있음
독립적으로 어떤 작업을 진행하기 위한 개념.
각각의 Branch는 다른 Branch의 영향을 받지 않음
Branch는 아래의 명령어로 생성할 수 있음
$ git branch like_feature
$ git branch
$ git checkout like_feature
Switched to branch 'like_feature'
↓ HEAD가 현재 위치해 있는 branch 위치를 나타냄 ↓

checkout은 branch를 전환하는데 사용할 수도 있고, 아래와 같이 git log 로 확인한 snapshot을 넘나들때도 사용이 가능합니다.
git checkout <snapshot hash>
$git log --pretty=online
e4abb6f... (HEAD -> master) this is master
d97d387... another snapshot
$ git checkout d97d387 another snapshot
$git log --pretty=online
e4abb6f... (master) this is master
d97d387... (HEAD) another snapshot
이렇게 snapshot의 hash값을 이용하여 과거의 파일 내용을 확인 할 수 있습니다.
"like_feature" Branch의 working directory에서 새로운 정보를 넣어 commit하면 새로운 checkpoint가 생성됨
$ git checkout like_feature
"like_feature" Branch에서의 작업을 끝마치고 "master" Branch로 통합
1) master branch로 이동
2) like_feature branch를 병합
$ git checkout master
$ git merge like_feature
"like_feature" Branch의 내용이 "master" Branch에서 업데이트 된 내용이기 때문에 곧바로 merge가 되는 것을 확인할 수 있음
> 이렇게 merge가 이루어지는 것을 fast-forword 라고 부름
이번에는 각각의 Branch의 working directory에서 같은 파일의 내용을 다르게 수정
(여러 branch들을 동시에 작업한 경우)
git log --graph --all 을 사용하면 commit graph를 확인 가능
$ git log --pretty=online --graph --all
아래의 명령어로 Merge된 Branch를 볼 수 있음
$ git branch --merged
사용을 마친 branch는 아래 명령어를 이용하여 삭제할 수 있음
$ git branch -d like_feature
$ git log --graph --pretty=online --all
/* branch의 merge, delete 과정이 graph형식으로 나타남 */
충돌은 왜 발생할까? Merge한 두 Branch에서 같은 파일을 변경했을 때 충돌이 발생합니다

① git status명령어로 어느 파일에서 충돌이 발생했는지 확인이 가능
② 어느 부분 때문에 conflict가 일어났는지 확인하고
③ '<<<<' , '====', '>>>>'가 포함된 행을 삭제해주기
④ 수정 완료 후 다시 git add, git commit 과정을 거쳐 다시 merge하기
① master Branch의 변화를 지속적으로 가져와서 충돌이 발생하는 부분을 제거
② master Branch를 변경하는 경우가 없도록 하기
[문제!] 현재 git에 master branch 만 있고, master branch가 선택되어져 있음
① 새 브랜치 sukki를 생성
② sukki브랜치에서 module1.py파일을 생성하고 아무내용이나 채우기
③ module1.py파일을 commit
④ master branch에 병합
⑤ sukki branch 삭제git branch #branch의 현재 구조 파악 git branch sukki #sukki branch 생성 git checkout sukki #sukki branch에 들어가기 nano module1.py #module1.py생성 > 명령어 사용 안하고 그냥 만들어도 됨 git add module1.py #module.py파일 저장소에 올리기 git commit -m "add module1.py" #저장소에 있는 module.py파일 커밋하기 git checkout master #master branch로 이동 git merge sukki #sukki branch 병합 git branch -d sukki #sukki branch 삭제 git log --graph #지금까지 병합 과정 한눈에 보기
[문제!] merge중 충돌발생! master, apple, banana 3가지 브랜치가 있을 때, crawling.py 파일에서 충돌 발생
① 충돌을 해결 > crawling.py 파일 수정
② banana 브랜치 apple와 병합
③ master에 apple 병합
④ apple, banana 브랜치 삭제git status #충돌 발생 현재 상태 파악 git add crawling.py #crawling.py파일 저장소에 올리기 git commit -m "crawling.py" #저장소에 있는 crawling.py파일 커핏하기 git checkout banana #banana branch로 이동 git merge apple #apple merge git checkout master #master branch로 이동 git merge apple #apple branch 병합 git branch -d apple #apple branch 삭제 git branch -d banana #banana branch 삭제