제대로 파는 Git & GitHub - by 얄코 4-5 ~ 7-5
fatal: The current branch from-local has no upstream branch.
To push the current branch and set the remote as upstream, use
git push --set-upstream origin from-local
To have this happen automatically for branches without a tracking
upstream, see 'push.autoSetupRemote' in 'git help config'.
어디에 업로드 할지 몰라 오류발생
git push -u origin from-local 또는 git push --set-upstream origin from-local
git branch
git branch --all 또는 git branch -a
$ git branch -a
conflict
* from-local
main
remotes/origin/from-local
remotes/origin/main
from-remote
브랜치 만들기git fetch
git branch -a
로 확인git switch -t origin/브랜치명
git push (원격 이름) --delete (원격의 브랜치명)
Github
에서 프로젝트 삭제 방법
설정의 맨 아래 Delete this repository 클릭
petch
push
pull
commit
되어 레포지토리에 들어간 후 수정사항이 발생하면 tracked
파일로써 스테이징을 기다리게 됩니다.Working directory
git add
명령어로 Staging area로 이동Staging area
git commit
명령어로 repository로 이동Repository
.git directory
라고도 불림비유 설명
상태 | 설명 |
---|---|
untracked | 식기세척기에 들어가 본 적이 없거나 식기세척기 사용이 불가(ignored)한 그릇 |
tracked | 식기세척기에 들어가 본 적이 있고 식기세척기 사용이 가능한 그릇 |
add | 식기세척기에 넣는 행위 |
staging area | 식기세척기 안(에 들어간 상태) |
commit | 세척(식기세척기 가동) |
repository | 세척되어 깨끗해진 상태 |
파일에 수정이 가해짐 | 그릇이 사용되어 이물질(커밋되지 않은 변경사항)이 묻음 |
working directory | 세척되어야 하는 상태 |
tracked가 된다는 건, Git의 관리대상에 정식으로 등록됨을 의미합니다.
새로 추가되는 파일은 반드시 add해줌으로써, 해당 파일이 tracked될 것임을 명시해야 하는 이유입니다.
(Git이 새 파일들을 무조건 다 관리해버리는 것을 방지)
일반 삭제시
$ git status
On branch from-remote
Your branch is up to date with 'origin/from-remote'.
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: tigers.yaml
no changes added to commit (use "git add" and/or "git commit -a")
git rm
으로 삭제시
$ git status
On branch from-remote
Your branch is up to date with 'origin/from-remote'.
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
deleted: tigers.yaml
add
된 상태일반적인 파일 이름 변경
$ git status
On branch from-remote
Your branch is up to date with 'origin/from-remote'.
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: tigers.yaml
Untracked files:
(use "git add <file>..." to include in what will be committed)
zzamtigers.yaml
git mv으로 변경
$ git mv tigers.yaml zzamtigers.yaml
결과
$ git status
On branch from-remote
Your branch is up to date with 'origin/from-remote'.
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
renamed: tigers.yaml -> zzamtigers.yaml
staging area
에서 working directory
로쉽게 말해서 add
취소
git restore --staged (파일명)
--staged
를 빼면 working directory
에서도 제거git reset HEAD (파일명)
--soft
: repository
에서 staging area
로 이동--mixed
(default): repository
에서 working directory
로 이동--hard
: 수정사항 완전히 삭제현재 속한 브랜치의 가장 최신 커밋
checkout
으로 앞뒤 이동해보기git checkout HEAD^
^
또는 ~
: 갯수만큼 이전으로 이동git checkout HEAD^^^
, git checkout HEAD~5
git checkout
(커밋해시)git checkout -
: (이동을) 한 단계 되돌리기익명의 브랜치에 위치함을 알 수 있음
git branch
로 현재 해드 해쉬 알아내기
$ git branch
* (HEAD detached at 4697b11)
alpha-branch
beta-branch
delta-branch
main
해드에서 새로운 브랜치 만들기
$ git switch -c gamma-branch
Switched to a new branch 'gamma-branch'
⭐ HEAD 사용하여 reset하기
git reset HEAD(원하는 단계) (옵션)
git checkout origin/(브랜치명)
git switch -t origin/(브랜치명)
Git 사용 중 모르는 부분이 있을 때 도움을 받을 수 있는 기능
git help
자세한 설명
git help -a
해당 명령어의 설명과 옵션 보기
git (명령어) -h
git help (명령어)
git (명령어) --help
config를 --global과 함께 지정하면 전역으로 설정됩니다.
user.name
과 user.email
지정해보기현재 모든 설정값 보기
git config (global) --list
에디터에서 보기 (기본: vi)
git config (global) -e
기본 에디터 수정
git config --global core.editor "code --wait"
위의 에디터 설정을 되돌리려면
git config --global -e
로 편집기를 연 뒤 아래 부분을 삭제하고 저장
줄바꿈 호환 문제 해결
git config --global core.autocrlf (윈도우: true / 맥: input)
pull
기본 전략 merge
또는 rebase
로 설정
git config pull.rebase false
git config pull.rebase true
기본 브랜치명
git config --global init.defaultBranch main
push시 로컬과 동일한 브랜치명으로
git config --global push.default current
git config --global alias.(단축키) "명령어"
git config --global alias.cam "commit -am"
널리 사용되는 커밋 메시지 작성방식
type: subject
body (optional)
...
...
...
footer (optional)
예시
feat: 압축파일 미리보기 기능 추가
사용자의 편의를 위해 압축을 풀기 전에
다음과 같이 압축파일 미리보기를 할 수 있도록 함
- 마우스 오른쪽 클릭
- 윈도우 탐색기 또는 맥 파인더의 미리보기 창
Closes #125
타입 | 설명 |
---|---|
feat | 새로운 기능 추가 |
fix | 버그 수정 |
docs | 문서 수정 |
style | 공백, 세미콜론 등 스타일 수정 |
refactor | 코드 리팩토링 |
perf | 성능 개선 |
test | 테스트 추가 |
chore | 빌드 과정 또는 보조 기능(문서 생성기능 등) 수정 |
커밋의 작업 내용 간략히 설명
길게 설명할 필요가 있을 시 작성
아래 명령어로 hunk별 스테이징 진행
git add -p
?
입력 후 엔터y
또는 n
로 각 헝크 선택git stats
와 소스트리로 확인예시
$ git add -p
diff --git a/leopards.yaml b/leopards.yaml
index 2198cce..eeb1ac5 100644
--- a/leopards.yaml
+++ b/leopards.yaml
@@ -1,8 +1,8 @@
team: Leopards
-manager: Dooli
+manager: Peter
-coach: Lupi
+coach: Rocket
members:
- Linda
(1/2) Stage this hunk [y,n,q,a,d,j,J,g,/,s,e,?]? ?
y - stage this hunk
n - do not stage this hunk
q - quit; do not stage this hunk or any of the remaining ones
a - stage this hunk and all later hunks in the file
d - do not stage this hunk or any of the later hunks in the file
j - leave this hunk undecided, see next undecided hunk
J - leave this hunk undecided, see next hunk
g - select a hunk to go to
/ - search for a hunk matching the given regex
s - split the current hunk into smaller hunks
e - manually edit the current hunk
? - print help
@@ -1,8 +1,8 @@
team: Leopards
-manager: Dooli
+manager: Peter
-coach: Lupi
+coach: Rocket
members:
- Linda
(1/2) Stage this hunk [y,n,q,a,d,j,J,g,/,s,e,?]? y
@@ -11,3 +11,5 @@ members:
- Olivia
- Evie
- Dongho
+- Drax
+- Groot
(2/2) Stage this hunk [y,n,q,a,d,K,g,/,e,?]? n
diff --git a/tigers.yaml b/tigers.yaml
index 287c2df..75081a1 100644
--- a/tigers.yaml
+++ b/tigers.yaml
@@ -1,8 +1,8 @@
team: Tigers
-manager: Brenda
+manager: Thanos
-coach: Ruth
+coach: Ronan
members:
- Linda
(1/2) Stage this hunk [y,n,q,a,d,j,J,g,/,s,e,?]? n
@@ -11,5 +11,8 @@ members:
- George
- Tyler
- kim
+- Gamora
+- Nebula
fetch: this
+new: branch
\ No newline at end of file
(2/2) Stage this hunk [y,n,q,a,d,K,g,/,s,e,?]? t
y - stage this hunk
n - do not stage this hunk
q - quit; do not stage this hunk or any of the remaining ones
a - stage this hunk and all later hunks in the file
d - do not stage this hunk or any of the later hunks in the file
K - leave this hunk undecided, see previous hunk
g - select a hunk to go to
/ - search for a hunk matching the given regex
s - split the current hunk into smaller hunks
e - manually edit the current hunk
? - print help
@@ -11,5 +11,8 @@ members:
- George
- Tyler
- kim
+- Gamora
+- Nebula
fetch: this
+new: branch
\ No newline at end of file
(2/2) Stage this hunk [y,n,q,a,d,K,g,/,s,e,?]? y
git commit -v
j
, k
로 스크롤하며 내용 확인git diff --staged
와 비교커밋 명칭
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# On branch main
# Your branch is up to date with 'origin/main'.
#
# Changes to be committed:
# modified: leopards.yaml
# modified: tigers.yaml
#
# Changes not staged for commit:
# modified: leopards.yaml
# modified: tigers.yaml
#
# ------------------------ >8 ------------------------
# Do not modify or remove the line above.
# Everything below it will be ignored.
diff --git a/leopards.yaml b/leopards.yaml
index 2198cce..e4dea21 100644
--- a/leopards.yaml
+++ b/leopards.yaml
@@ -1,8 +1,8 @@
team: Leopards
-manager: Dooli
+manager: Peter
-coach: Lupi
+coach: Rocket
members:
- Linda
diff --git a/tigers.yaml b/tigers.yaml
index 287c2df..35ebf69 100644
--- a/tigers.yaml
+++ b/tigers.yaml
@@ -11,5 +11,8 @@ members:
- George
- Tyler
- kim
+- Gamora
+- Nebula
fetch: this
+new: branch
\ No newline at end of file
git stash
$ git stash
Saved working directory and index state WIP on main: 12e6a0f Edit Leopards and Tigers
git stash pop
$ git stash pop
On branch main
Your branch is ahead of 'origin/main' by 2 commits.
(use "git push" to publish your local commits)
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: tomcats.yaml
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: tigers.yaml
Dropped refs/stash@{0} (737b4cd8f9276765e1af220d671f476d02d91e18)
Stash2
만 선택하여 스태시git stash -p
$ git stash -p
diff --git a/jaguars.yaml b/jaguars.yaml
index ba26d8e..8858d30 100644
--- a/jaguars.yaml
+++ b/jaguars.yaml
@@ -7,3 +7,4 @@ members:
- Harvey
- Myles
- Pinkfong
+- Stash3
\ No newline at end of file
(1/1) Stash this hunk [y,n,q,a,d,e,?]? n
diff --git a/leopards.yaml b/leopards.yaml
index eeb1ac5..350951a 100644
--- a/leopards.yaml
+++ b/leopards.yaml
@@ -13,3 +13,4 @@ members:
- Dongho
- Drax
- Groot
+- Stash2
(1/1) Stash this hunk [y,n,q,a,d,e,?]? y
Saved working directory and index state WIP on main: 12e6a0f Edit Leopards and Tigers
git stash -m 'Add Stash3'
git stash list
apply
, drop
, pop
가능git stash apply stash@{1}
$ git stash list
stash@{0}: On main: Add Stash3
stash@{1}: WIP on main: 12e6a0f Edit Leopards and Tigers
hj247@DESKTOP-R1VCF2H MINGW64 /f/git_test (main)
$ git stash apply stash@{1}
On branch main
Your branch is ahead of 'origin/main' by 2 commits.
(use "git push" to publish your local commits)
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: leopards.yaml
no changes added to commit (use "git add" and/or "git commit -a")
$ git stash branch stash-branch
Switched to a new branch 'stash-branch'
On branch stash-branch
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: jaguars.yaml
modified: leopards.yaml
no changes added to commit (use "git add" and/or "git commit -a")
Dropped refs/stash@{0} (fd1a3875308937e8468c4799602bf9134ed8b66a)
$ git stash apply stash@{1}
On branch main
Your branch is ahead of 'origin/main' by 2 commits.
(use "git push" to publish your local commits)
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: leopards.yaml
no changes added to commit (use "git add" and/or "git commit -a")$ git stash apply stash@{1}
On branch main
Your branch is ahead of 'origin/main' by 2 commits.
(use "git push" to publish your local commits)
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: leopards.yaml
no changes added to commit (use "git add" and/or "git commit -a")
명령어 | 설명 | 비고 |
---|---|---|
git stash | 현 작업들 치워두기 | 끝에 save 생략 |
git stash apply | 치워둔 마지막 항목(번호 없을 시) 적용 | 끝에 번호로 항목 지정 가능 |
git stash drop | 치워둔 마지막 항목(번호 없을 시) 삭제 | 끝에 번호로 항목 지정 가능 |
git stash pop | 치워둔 마지막 항목(번호 없을 시) 적용 및 삭제 | apply + drop |
💡 git stash branch | (브랜치명) 새 브랜치를 생성하여 pop | 충돌사항이 있는 상황 등에 유용 |
git stash clear | 치워둔 모든 항목들 비우기 |
마지막 커밋 수정
Hoki
추가하고 스테이지횻홍
git commit --amend
Add a member to Panthers
Poki
추가하고 스테이지git commit --amend
로 마지막 커밋에 포함git commit --amend -m 'Add members to Panthers and Pumas'
명령어 | 설명 |
---|---|
p, pick | 커밋 그대로 두기 |
r, reword | 커밋 메시지 변경 |
e, edit | 수정을 위해 정지 |
d, drop | 커밋 삭제 |
s, squash | 이전 커밋에 합치기 |