Git Command

common git command

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
-> 로컬 저장소에서 원격 저장소로 업로드

# 혹시 모르니 원격 레포지토리와 로컬 저장소 동기화
1. git pull

# 레포지토리에 업로드할 파일 추가
2. git add <파일명>
tip) git add . # 현재 디렉토리의 모든 파일 추가
# 현재 추적된 파일 상태 확인
3. git status

# 이번 업로드 작업 커밋(설명)
3. git commit -m "커밋 내용"

# 로컬 저장소에 있는 파일 원격 저장소에 업로드
4. git push

====================

-> 병합 할 때

# branch 정보 업데이트
1. git fetch

# master branch로 이동
2. git checkout master

# master branch에 다른 branch 내용 병합
3. git merge <master branch에 병합할 branch 이름>

# master 브런치에 올라갈 파일들 commit
4. git commit -m "커밋 내용"

# 병합 적용
5. git push origin master

====================

-> 브런치 이동
git checkout <이동할 브런치 명>
ex) git checkout localbranch

-> 로컬에 브런치가 없는 상태에서 원격 저장소에 있는 특정 브런치를 가지고 올 때
git checkout -t <원격저장소로부터 가져올 브런치명>
ex) git checkout -t origin/testbranch

-> 브런치 생성 및 이동
git checkout -b <생성 및 이동할 브런치명>
ex) git checkout -b localbranch

-> 로컬, 원격 브런치 모두 보기
git branch -a

-> 로컬 브런치만 보기
git branch -l

-> 원격 브런치만 보기
git branch -r

-> 브런치 삭제
git branch -d <삭제할 브런치명>

====================

-> 로컬 및 원격 저장소 둘 다에서 특정 파일을 지우고 싶을 때
git rm <file 이름>
git commit -m "커밋 내용"
git push origin <브런치명>

-> 로컬 및 원격 저장소 둘 다에서 특정 디렉토리를 지우고 싶을 때
git rm -r <directory 이름>
git commit -m "커밋 내용"
git push origin <브런치명>

-> 로컬에 있는 파일은 그대로 두고, 원격 저장소에 있는 파일만 지우고 싶을 때
git rm --cached <파일명>
git commit -m "커밋 내용"
git push origin <브런치명>

-> 로컬에 있는 디렉토리는 그대로 두고, 원격 저장소에 있는 파일만 지우고 싶을 때
git rm --cached -r <디렉토리명>
git commit -m "커밋 내용"
git push origin <브런치명>

====================

-> git 패스워드 캐싱
git config credential.helper store

branch

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# branch확인
# 현재 존재하는 브런치와 활성화 되어 있는 브런치(녹색)
# 원격 저장소에만 저장된 브런치(빨간색)
1. git branch
1-1.git branch -a

# branch에 대해 변경된 사항 및 정보를 업데이트
git fetch

# 브런치 이동
git checkout <브런치명>

# 브런치 생성 및 이동
git checkout -b <브런치명>

# 지정된 브런치로 업로드
git push origin <브런치명>



-> 다른 브런치로부터 파일 가져오기

# 가져온 파일이 저장될 브런치로 이동
git checkout <파일이 저장될 브런치명>
ex) git checkout A

# B 브런치에서 test.txt 파일 가져오기
# B 브런치에서 test.txt를 가져온다.
git checkout B test.txt
#추가
git add test.txt
# 커밋
git commit -m "Update test.txt from B"
#push
git push origin <파일이 업로드 될 브런치명>
ex)git push origin A



-> branch merge

# 브런치 병합 확인
git branch --merged

# master 브런치에 다른 브런치의 내용을 병합할 때
1. git checkout master
2. git merge <master 브런치에 병합할 다른 브런치의 이름>
3. git commit -m "커밋할 내용"
4. git push origin master



-> branch 삭제 (Local Repository)

# 지우려는 branch가 활성화 상태라면, master로 이동 후 삭제
# 병합하지 않았거나, 충돌 등의 오류로 삭제할 수 없을 때, -d 대신 -D를 사용하면 강제로 삭제
1. git checkout master
2. git branch -d <삭제할 브런치명>



-> branch 삭제 (remote repository)

# 로컬 저장소에서 삭제하더라도, 깃허브에 저장된 브런치는 삭제되지 않는다.
git push <리모트명> --delete <삭제할 브런치명>
ex) git push origin --delete <삭제할 브런치명>

go to previous commit

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
-> reset VS revert

revert > reset

지정된 커밋 이후의 모든 커밋을 다 삭제하는 reset과 지정된 커밋이 왜 삭제 되었는지 커밋을 남기는 revert.

revert는 지정된 커밋만 삭제하고, 해당 커밋이 왜 revert 된 건지 commit message를 통해 관찰할 수 있기 때문에 더 유용하다



-> reset

# 다른 사람과의 코드 공유가 없을 때
# origin에 올리지 않고 로컬에 커밋이 머물렀다거나 올라갔어도 나만 해당 브런치를 사용할 때
Usage : git reset --option <돌아갈 커밋 순번 or 커밋 해시>

# 바로 이전 commit으로 돌아가기
git reset HEAD^

# 여러 개의 commit 이전으로 돌리는 경우
# 현재 커밋부터 첫 번째로 하여 3번째에 해당하는 커밋으로 되돌아갈 때
git reset HEAD~2

# --hard 옵션
# 지정된 n번 커밋으로 되돌아가는데, n번을 기준으로 이후 커밋들은 모두 삭제
git reset --hard <n번 commit hash>
git push

# --soft 옵션
# 변경 이력은 모두 삭제되지만, stage 상태로 변경된 코드 내용이 남아있기 때문에
# add 명령어 필요없이 바로 commit 진행이 가능하다
git reset --soft <n번 commit hash>
git commit -m "<커밋할 내용>"
git push

# --mixed 옵션
# 변경 이력은 모두 삭제되지만, unstage 상태로 변경된 코드 내용응 남아있다.
# 코드를 반영하려면 add 명령어로 stage에 반영하고 commit 해야 함
git reset --mixed <n번 commit hash>
git add .
git commit -m "<커밋할 내용>"
git push

# --force
# 로컬은 origin에 있는 commit을 삭제한 채로 origin에 덮으려고 하기에 에러가 뜨므로
# --force 옵션을 주어 강제로 로컬 commit history를 origin commit history로 덮어쓴다.
# 이는 다른 사람과 해당 레포지토리를 공유하여 작업한다면 하면 안된다.



-> revert

# 다른 사람과의 코드 공유가 있을 때
# 커밋을 삭제하는 reset과는 다르게 커밋을 추가한다.
# 이전 커밋과 정반대의 데이터를 추가하는 방식으로 코드를 되돌린다.
# reset --soft, mixed와 동일한 결과를 가져오지만 이력은 Revert "..."라는 메시지가 추가된다.

# 아래의 명령을 사용하면 n번 커밋 이후의 커밋들이 삭제되지 않고, n번 커밋에 해당하는 내용만 삭제되고
# revert "n번 커밋"이라는 커밋에는 n번 커밋이 삭제된 이력이 남게 된다.
git revert <n번 commit hash>

# --no-commit 옵션
# revert한 결과를 stage 상태만 유지하고, commit 하고 싶지 않을 때
1. git revert --no-commit <n번 커밋 해시>
2. git commit -m "<commit을 revert한 이유>"
3. git push

# 여러 개의 커밋을 되돌릴 때
git revert [n번 커밋 해시]..[n번 커밋 해시]
ex) git revert [1번 커밋 해시]..[2번 커밋 해시]

원격 저장소에 레포지토리 생성해놓고, 로컬 저장소에서 디렉토리를 만들어 연결

1
2
3
4
5
6
7
1. cd <원격 저장소랑 연결할 디렉토리 이름>
2. git init
3. git add <업로드할 파일명>
4. git commit -m "<커밋 내용>"
5. git branch -M <브런치 이름(주로 main 또는 master로 입력)>
6. git remote add origin <원격 저장소에 생성한 레포지토리 경로.git>
7. git push -u origin <5번에서 입력했던 브런치 명>

이미 로컬 저장소에 디렉토리가 있고, 연결

1
2
3
1. git remote add origin <원격 저장소에 생성한 레포지토리 경로.git>
2. git branch -M <브런치 이름>
3. git push -u origin <브런치 이름>

Git 사용자명, 이메일 변경

1
2
3
4
5
6
git commit user.name "<github 사용자 이름>"
ex 1) git config user.name "sean-baek"
ex 2) git config --global user.name "sean-baek"
git commit user.email "<사용자 email>"
ex 1) git config user.email "tester@gamil.com"
ex 2) git config --global user.email "tester@gamil.com"

다른 사람의 private repo git clone 안될 시

1
2
git clone https://[본인 github 사용자 이름]@[https를 제외한 repo 주소].git
ex) git clone https://[sean-baek]@github.com/Username/test.git