git을 알음알음 사용하다 보니, 한번 정리의 필요성을 느껴
기본부터 정리하는 과정.
앞부분은 local에서의 작업만 다룬다.
git 의 시작
.git 폴더가 만들어지면 해당폴더를 root로 git tracking 가능
git init
<file>
touch README.MD 등 새로운 빈 파일을 생성함.
# touch <something>
touch README.MD
touch main.py
현재 git 의 상태를 출력한다.
현재 branch 및 tracking 상태 등을 출력.
veritas@veritas:~/git/gittest$ git status
On branch master
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
README.MD
main.py
nothing added to commit but untracked files present (use "git add" to track)
현재 git의 log 출력
git log --oneline 으로 한줄출력할수 있음.
veritas@veritas:~/git/gittest$ git log --oneline
51b7eaf (HEAD -> master) git add for deleted file
5e50429 (dev2, dev) initial commit
<file1> <file2>
git add README.MD main.py
현재 git 에서 untrack 되는 파일을 track 되도록 지정한다.
git add .
를 실행하면 현재 untrack 되는 모든 파일을 자동으로 tracking 시작
이상태에서 git status 를 실행하면 tracking 되는 상태로 변경됨.
veritas@veritas:~/git/gittest$ git status
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: README.MD
new file: main.py
tracking 되는 파일을 삭제한 후에 해당 파일을 다시 git add하면 삭제된 상황이 tracking 된다.
veritas@veritas:~/git/gittest$ git switch master
Switched to branch 'master'
veritas@veritas:~/git/gittest$ ls
main.py README.MD
veritas@veritas:~/git/gittest$ rm -rf main.py
veritas@veritas:~/git/gittest$ git status
On branch master
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
deleted: main.py
no changes added to commit (use "git add" and/or "git commit -a")
veritas@veritas:~/git/gittest$ git add main.py
veritas@veritas:~/git/gittest$ git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
deleted: main.py
veritas@veritas:~/git/gittest$ git commit -m "git add for deleted file"
[master 51b7eaf] git add for deleted file
1 file changed, 0 insertions(+), 0 deletions(-)
delete mode 100644 main.py
veritas@veritas:~/git/gittest$ git status
On branch master
nothing to commit, working tree clean
<message>
commit 을 통해 변경 사항을 반영함.
commit 은 message 를 동반하며 보통 -m 옵션을 동반하여 한번에 메세지를 작성한다.
git commit 만 쓰면 설정된 에디터를 통해 commit message를 작성하게된다.
veritas@veritas:~/git/gittest$ git commit -m "initial commit"
[master (root-commit) 5e50429] initial commit
2 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 README.MD
create mode 100644 main.py
해당 옵션은 바로직전의 commit이 잘못되서 변경하고 싶을때 사용
원래 적용하고 싶었던 변경사항을 git add 하여 traking 하고
git commit --amend
를 실행하면 에디터에서 commit message를 수정하여 commit 이 변경된다.
<branch>
새로운 branch 생성.
현재 HEAD가 위치한 branch 를 복사하여 새로운 branch 생성
HEAD 는 새로운 branch 가 아닌 복사의 대상이된 branch 에 머문다.
git branch dev
혹은 git checkout -b <branch>
로 생성가능(생성 및 해당 브랜치로 HEAD 변경)
veritas@veritas:~/git/gittest$ git status
On branch master
nothing to commit, working tree clean
veritas@veritas:~/git/gittest$ git checkout -b bugfix
Switched to a new branch 'bugfix'
veritas@veritas:~/git/gittest$ git branch
* bugfix
master
현재 local에 존재하는 branch 리스트를 보여줌.
*가 붙은 branch 가 현재 HEAD 가 위치한 branch
veritas@veritas:~/git/gittest$ git branch
dev
* master
<branch>
branch 변경 ( HEAD 변경)
checkout 커맨드로도 가능. 다만 checkout이 기존의 command 이고 옵션이 다수 존재
switch 가 새로 생긴 커맨드라고 보면된다.
veritas@veritas:~/git/gittest$ git switch dev
Switched to branch 'dev'
veritas@veritas:~/git/gittest$ git branch
* dev
master
veritas@veritas:~/git/gittest$
-c 옵션으로 새로운 branch 를 만듬과 동시에 새로운 branch 로 이동가능
veritas@veritas:~/git/gittest$ git switch -c dev2
Switched to a new branch 'dev2'
veritas@veritas:~/git/gittest$ git branch
dev
* dev2
master
<branch>
브랜치 삭제 command
-d 는 delete
-D 는 delete 에 force가 붙어 강제적으로 삭제함.
기본적으로 -d 는 사용할 수 있는 상황이 적음. (merge 가 선행되거나 삭제하려는 branch에 commit이 없어야함.)
또한 삭제하려는 branch가 아닌 다른 branch 에서 시행해야됨.
local만 존재하는 git 환경에서는 유의
veritas@veritas:~/git/gittest$ git branch
dev
dev2
* master
veritas@veritas:~/git/gittest$ git switch -c deleteme
Switched to a new branch 'deleteme'
veritas@veritas:~/git/gittest$ git status
On branch deleteme
nothing to commit, working tree clean
veritas@veritas:~/git/gittest$ touch deleteme.txt
veritas@veritas:~/git/gittest$ git add deleteme.txt
veritas@veritas:~/git/gittest$ git commit -m "add deleteme.txt on deleteme branch"
[deleteme 779a1f9] add deleteme.txt on deleteme branch
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 deleteme.txt
veritas@veritas:~/git/gittest$ git branch -d deleteme
error: Cannot delete branch 'deleteme' checked out at '/home/veritas/git/gittest'
veritas@veritas:~/git/gittest$ git branch -D deleteme
error: Cannot delete branch 'deleteme' checked out at '/home/veritas/git/gittest'
veritas@veritas:~/git/gittest$ git switch master
Switched to branch 'master'
veritas@veritas:~/git/gittest$ git branch -d deleteme
error: The branch 'deleteme' is not fully merged.
If you are sure you want to delete it, run 'git branch -D deleteme'.
veritas@veritas:~/git/gittest$ git branch -D deleteme
Deleted branch deleteme (was 779a1f9).
veritas@veritas:~/git/gittest$ git branch
dev
dev2
* master
<branch>
branch 의 이름 변경
branch 삭제와 달리 이름을 변경하고자 하는 branch에서 수행
veritas@veritas:~/git/gittest$ git status
On branch master
nothing to commit, working tree clean
veritas@veritas:~/git/gittest$ git branch
dev
dev2
* master
veritas@veritas:~/git/gittest$ git switch dev
Switched to branch 'dev'
veritas@veritas:~/git/gittest$ git status
On branch dev
nothing to commit, working tree clean
veritas@veritas:~/git/gittest$ git branch -m dev3
veritas@veritas:~/git/gittest$ git status
On branch dev3
nothing to commit, working tree clean
veritas@veritas:~/git/gittest$ git branch
dev2
* dev3
master