git 허브 회원가입
https://git-scm.com/download/win => 프롬트창에서 github를 쓸 수 있게
cmd 에서 테스트 => git / git --version
git 환경설정
git config --global user.name miretta96
git config --global user.email miretta20@gmail.com
c 드라이브에 폴더(git_save)를 만든 후 cmd에서 이동
cd c:/git_save
git clone (깃 허브에있는 저장소 http주소 입력) https://github.com/miretta96/git_Tutorial.git
git_save 폴더로 들어가면 git_Tutorial 폴더가 생긴걸 볼 수 있음
컴퓨터는 local repository
github는 remote repository가 된다
git_save폴더에 간단한 document.txt를 만들고
cmd로 이동해보자 cd git_Tutorial
git add document.txt
git commit -m "Add Text File [document.txt]
아직 github에는 적용이 되지 않았다
git push를 해줘야 github에 적용된다.
git fetch + git merge => git pull
저장소(Repository) 실제 소스코드가 담겨있으며 커밋 내역등 모든 작업 이력이 담겨 있는 공간
(1) 해당 프로젝트 소속이 아닐 경우
PR(Pull Request)를 작성하여 오픈소스에 기여 가능
(2) 해당 프로젝트에 소속일 경우
권한이 있으므로 그냥 커밋(Commit)하고 푸시(Push)해서 저장소에 수정 내역을 반영
기존에 만들었던 repository에서 Code ->Clone with HTTPS에서 주소를 복사
c드라이브에 새로운 Tutorials라는 폴더를 만든후
cd c:/Tutorials 디렉토리를 이동시킨후
git clone (주소복사한 https://github.com/miretta96/git_Tutorial.git)
Tutorials 폴더에 가보면 복사된걸 볼 수 있음 dir누르면 확인가능
cd git_Tutorial로 이동하여 dir하면 document.txt 가 보인다.
이후에
Tutorials 파일에 my_module.py이라는 간단한 파이썬 코드를 적고 저장
< my_module.py >
def add(a,b)
return a+b
다시 cmd에서
git status => my_module.py가 추가된걸 볼 수 있음.
git add my_module.py => staging area에 올리기
(모든 파일을 다 하려면 그냥 git add . 으로 하면된다.)
git status => new file: my_module.py => 올라온걸 볼 수 있음
다시 원래되로 하고 싶으면
git reset my_module.py
git commit -m "Add my_module [Add]" 후 git status를 해보면 성공적으로 commit발생
그이후 git push까지 해줘야 성공적으로 업로그가 된다.
소스를 수정해본다.
my_module.py 에서
def sub(a,b):
return a-b
를 추가로 넣고
git status를 해보면 modified: my_module.py라고 뜬다
(1) 첫번째 경우, 원래 상태로 다시돌리려면
git checkout -- my_module.py
(2) 두번째 경우, git commit -m "Add my_module [Sub]" 후 git push 해서 업로드 시킨다.
(commit 명령어를 잘못 넣었을 경우 git commit --amend를 통하여 수정 가능!)
clone을 이용해 github페이지와 local 컴퓨터 파일을 동일화시킴
1. git pull
Already up to date가 뜨면 동일하다는 것을 알 수 있다.
my_module.py에서 하나 더 추가로 입력
def mul(a,b):
return a*b
git add . =>을 통해서 staging Area에 올림
git commit -m "Add my_module.py [MUL]"
git status를 통해 확인
git push를 통해 업로드
(*git log를 통해서 확인가능)
git log에서
처음에 commit한 document.txt로 돌아가려면 hash 값 복사
git reset --hard 2e1475f96d7a495cb0e2a61ff150c2fe08e87ed6(hash값)
(--hard는 이후의 것들은 모두 없애버리겠다!, --soft 옵션의 경우 내역을 보존한다. mix도 있음)
git log를 다시 찍어보면 document.txt 뺴고 전부 사라진 것을 볼 수 있다.
local(컴퓨터 내의) 파일로 들어가보면 전으로 돌아간것을 알 수 있다.
이제 local과 github(remote)저장소가 일치하지 않는다.
git push를 하면 거절된다. (구성이 달라졌기 때문)
강제로 push도가능 git push -f (전부 전으로 돌아간것을 볼 수 있다.)
다시 새로 Tutorials 폴더에 my_module.py에 add함수 추가
다시,
git add .
git commit -m "Add my_module.py [Add]"
git push
그리고 my_module.py에 sub함수 추가
이때, 수정된 commit이 필요한데 git commit --amend실행
UNIX모드라 a를 눌러야 수정가능하다
Add my_module.py [Add] => Add my_module.py [Add & Sub] 로 바꾼후 esc를 누르고
:wq! 를 입력하고 나온후
git status 입력하면 modified : my_module.py가 뜬다.
git log를 입력하면 commit한 메세지를 볼 수 있다.
이 상태로 강제로 푸쉬시킨다
git push -f
github에서 확인하여 보면 제목은 수정되었지만 내용물은 sub가 포함되지 않은 것을 볼 수 있다.
이때는 다시 git commit --amend실행하여 [Add]로 수정하여준다.
git push -f 를 통하여 확인해본다.
git add .
git commit -m "Add my_module.py [Sub]"
github에서 확인!!할것
깃(Git) : 동시에 여러 개발자들이 프로젝트에서 각기 다른 기능을 개발할 수 있도록 브렌치(Branch)기능 제공
Master Branch => developBranch(새로운기능) + bug fix Branch(버그 수정) (필요할시 merge, 마스터 브랜치는 안정적이어야하기 때문에)
실습
git branch
=> 어떤 브렌치가 있는지 확인 가능 현재는 master(default)
git branch develop
=> develop 브렌치 만듬
git branch
=> 추가된것을보고
git checkout develop
=> 이 develop을 가르킨다.
파일로 돌아가 my_module.py에 mul 함수를 추가해준다
=> def mul(a,b):
return a*b
git add .
git commit -m "Add my_module.py [Mul]"
git log
=> Head -> develop으로 가르키고 있지만 github홈피 상에는 적용되어있지 않다. / 아직 merge가 안됨.
git checkout master
=> 마스터 브렌치로 돌아간 이후에
git merge develop
=> 합친다.
git log
=> master와 develop이 둘다 수정된 함수를 반영했다는 것을 알수 있다.
git push
=> github에 반영해준다.
기능을 다한 develop 브렌치 삭제
git branch -d develop
git branch
=> master만 남아있음
git branch
=> 현재 브렌치 확인 (master)
git branch develop
=> develop 브렌치 생성
git branch
=> master , develop
git checkout develop
=> develop을 가르키게 변경
git branch
=> master -> develop으로 바뀜
기존의 my_module.py에 div추가
=> def div(a,b):
return a//b
git add .
git commit -m "Add my_module [Div]"
git log
=> develop 브렌치에 하나의 함수가 추가되있는걸 확인할 수 있다. / master브렌치는 그대로
내용을 다르게하기위해 my_module.py에 #주석 추가해본다
=> develop와 master는 서로 소스코드가 다르다
git checkout master
git add .
git commit -m "Add my_module [Div] & Comment"
git log
=> master만 보이고 develop은 보이지 않음
git checkout develop
=> develop만 보이고 master은 보이지않음
=> 서로 commit 메세지와 파일도 다르다.
git checkout master
=>merge는 마스터에서 해야한다
git merge develop
=> 충돌 발생! merge가 실패했다고 나옴
my_module.py로 들어가보면 서로다른 코드 모두를 보여준다.
수동으로 head(master)과 develop 둘중하나를 골르고 하나는 삭제하고 저장한다
git add .
git comment -m"Add my_module [Div] & Comment"
git merge develop => 성공
git log => 함께 한 화면에 나옴
git branch -d develop => 기능을 다해서 없애준다.
git push => github 원격지 저장소에 반영해줌
새로운 cmd창
cd c:/Tutorials/git_Tutorial
git remote
=> origin으로 원격저장소 등록됨.
git remote show origin
=> 자세히 알고 싶으면
git remote add test (저장소 주소를 입력)
git remote -v
=> 전체 목록을 확인한다.
git remote rename test temp
=> 원격저장소의 이름 바꾸기
git log origin/master
=> 로그확인 가능
git remote rm temp
=> 특정저장소 제거 가능
git remote -v
=> 전체 목록을 확인한다. // 삭제됨
<Git에서 로그 다루기>
=> 다양한 commit내용들을 시간순서대로 확인 // 깃과 관련한 처리내용 확인
git log
=>확인가능하고 많으면 enter를 치고 빠져나오려면 q
git log --stat
=> 각 commit의 통계정보 //얼마나 많은 라인이 추가되었는지
git log -p -3
=> 위에서부터 3개까지 어떤 방식으로 commit이 이루어졌는지 확인가능
git log --pretty=oneline
=> 각각 한줄로 commit내용 출력
git log --pretty=format:"%h -> %an, %ar : %s" --graph
=>내가 원하는 형태로 출력 hash값,어떤사람이commit했는지,언제했는지, 어떤 메세지로 했는지 그래프로 출력
<README.md 파일 작성하기>
github 해당 repository에서 add a README 작성
cmd창에서 git pull을 하면 폴더에 README.md 파일이 생성됨
작성하는 방법
소스코드 블록은 다음과 같이 작성할 수 있습니다.
#include <stdio.h>
printf("Hello World!");
return 0;
링크는 다음과 같이 작성할 수 있습니다.
순서 없는 목록은 다음과 같이 작성할 수 있습니다.
인용 구문은 다음과 같이 작성할 수 있습니다.
'공부합시다.' -김현우-
테이블은 다음과 같이 작성할 수 있습니다.
이름 | 영어 | 정보 | 수학 |
---|---|---|---|
김현우 | 98점 | 87점 | 100점 |
이순신 | 94점 | 78점 | 91점 |
홍길동 | 97점 | 93점 | 98점 |
강조는 다음과 같이 작성할 수 있습니다.
치킨 먹다가 두드러기 났어요. ㅠ
git archive --format=zip master -o Master.zip //git파일을 제외하고 압축폴더가생김
git archive --format=zip master -o ../Master.zip //상위폴더로 이동하여 생김
cd c:/Git Project Example
git init
Example 1.txt 메모장 생성
git add .
git commit -m "Add Example 1.txt"
내용 수정 Hello World 추가후 저장
git add .
git commit -m "Update Example 1.txt"
Example 1.txt 메모장 삭제 후
git add .
git commit -m "Delete Example 1.txt"
Example 2.txt 메모장 생성
git add .
git commit -m "Add Example 2.txt"
git log => 4개의 commit확인 가능
Delete Example 1.txt commit 메세지 수정
git rebase -i HEAD~3 //앞쪽에서 3개까지만
키보드 a를 누르고 변경할 Delete Example 1.txt 칸에 pick => reword로 변경 후
esc를 누르고 :wq!
나오게되면 화면이 하나뜨고 키보드 a를 누르고 Delete => Drop으로 변경후 같은방법으로 나온다
esc를 누르고 :wq!
git log를 눌러보면 변경이 된것을 알 수 있다.
특정 commit자체를 삭제하는 경우(동업의 경우 가능하면 X) => drop 이용
git rebase -i HEAD~3
키보드 a를 누르고 pick => drop으로 변경
esc누르고 :wq!
git log를 눌러보면 commit이 삭제된것을 볼 수 있음
git config --global user.name "test"
git config --global user.email "test@test.com"
설정 및 변경 가능