이전까지 나는 github desktop을 이용해서 push, pull, commit등을 진행했다.
하지만 다양한 사용방법을 정확하게 익혀야 협업에 도움을 받을 수 있기에
정리한다!
Repository(저장소) : 코드나 문서를 저장하는 프로젝트 저장공간
local Repository(로컬 저장소) : 개발자의 컴퓨터에서 작업되는 프로젝트 저장공간
Remote Repository(원격 저장소) : 클라우드 서비스(ex)GitHub)를 통해 인터넷 서버에 저장된 공간
Commit(커밋) : 저장소에 변경된 내용을 메세지와 함께 기록
Branch(브랜치) : 여러 작업을 동시에 협업하며 수행할 때 사용하는 관리 개념
Merge : 브랜치 작업 완료 시 기존 코드와 합치는 명령어
Pull : 원격 저장소에 변경사항을 로컬 저장소에 가져오는 명령어
Push : 로컬 저장소에 변경사항을 원격 저장소로 업로드하는 명령어
Pull Request : GitHub 호스팅을 통해 코드 수정을 요구하거나 토론하며 개선하는 개념
Fork : 다른 사용자의 저장소를 나의 계정으로 복제하는 것(원본 저장소와 독립적 관리 가능)
저장소를 생성할 위치의 directory에서 cmd창을 열고
git init
: 사용할 원격저장소를 현재 디렉토리 기준으로 생성한다.
git init 을 입력한다.

git add <파일명/디렉토리 경로>
: 변경 파일 또는 디렉토리를 스테이징 영역(staging area)에 추가
git add .
: 현재 디렉토리의 모든 변경내용을 스테이징 영역에 추가(하위 디렉토리만 포함)
git add -A
: 작업 디렉토리의 변경내용을 스테이징 영역에 추가(상위, 하위 디렉토리 포함)
git add -p
: 변경사항을 터미널에서 확인하면서 스테이징 영역에 추가
git add는 로컬 디렉토리상의 변경 된 내용을 스테이징 영역에 추가하는 명령어이다.
commit과 달리 깃 저장소의 변경이력에 어떠한 영향도 주지 않는다.

git add [파일명] 입력
git status로 확인

git add . 입력 후 작업상태 git status로 확인

cd 하위폴더멍으로 폴더 접근 후 git add -A 입력
git status로 작업상태 확인
파일추가 및 파일내용 변경

cmd 창에 cd ..으로 상위폴더 이동 후 git add -p 입력, 내용변경을 진행할 것이므로 y로 진행

git status로 작업상태 확인

🤔🤔 git add -p는 하위폴더의 변경상태는 적용되지 않네?
git add -p
-A 와 .의 -p차이
git add -A는 작업 디렉토리 상에 어디에 위치하든 항상 동일하게 모든 변경 내용을 스테이징으로 넘깁니다.
반면에git add .는 명령어를 실행한 디렉토리 이하에서 발생한 변경 내용만 포함하며, 해당 디렉토리 기준으로 상위 디렉토리의 변경 내용을 포함하지 않습니다.
git add -p는 현재 디렉토리의 변경상태를 감지하여 hunk(조각)를 만들어서 스테이징으로 넘깁니다. 하위폴더의 변경사항을 감지하지 못합니다.
git add 뒤에 옵션이 없으면?
뒤에 파일 명 없이 git add 했더니, 어떤 것도 더해지지 않았다.
문제사항을 보기 위해 git status 했다.

브랜치 안에 커밋이 아직 없고 추척되지 않는 파일을 add시키라는 설명이 나와있다.
옵션은 선택이 아닌 필수!
git rm --cached 파일명: add 된 파일을 깃이 추척하지 않는 상태로 스테이지에서 내린다.
cmd창에 git rm --cached 파일명를 입력한다.
git status로 작업상태를 확인한다.

y : 이 조각(hunk) 이 이후 커밋에 포함될 수 있도록 stage 시킨다
n : 이 조각이 이후 커밋에 포함되지 않도록 stage 대상에서 제외한다
q : 종료; 이 조각 및 이후 모든 조각들을 stage 시키지 않는다
a : 이 조각과 이후 현재 파일 내 모든 조각들을 stage 시킨다
d : 이 조각 및 이후 현재 파일 내의 모든 조각들을 stage 시키지 않는다
g : 파일 내의 다른 조각들의 목록을 표시하고 이동할 조각 위치를 선택한다
/ : 정규표현식을 이용해 조각을 검색하고 해당 위치로 이동한다
j : 현재 조각에 대한 결정은 뒤로 미루고 다음 미확정 조각 위치로 이동한다
J : 현재 조각에 대한 결정은 뒤로 미루고 확정 여부와 상관없이 다음 조각 위치로 이동한다
k : 현재 조각에 대한 결정은 뒤로 미루고 이전 미확정 조각 위치로 이동한다
K : 현재 조각에 대한 결정은 뒤로 미루고 확정 여부와 상관없이 이전 조각 위치로 이동한다
s : 현재 조각을 더 작은 단위의 조각으로 나눈다
e : 현재 조각 내용을 직접 편집한다
? : 조각 관련 조작 도움말을 표시한다
git commit -m "커밋 메세지"
: staging area에 저장되어있는 변경 사항을 로컬저장소에 저장한다.
git commit --amend -m "수정된 메시지"
: commit상태의 메세지를 수정한다.
git commit -m "커밋 메세지"를 입력
git commit --amend -m "수정된 메시지"를 입력
git remote add origin https://github.com/[본인계정명]/[디렉토리명]
: github의 원격저장소(Remote Repository)와 내 디렉토리를 연결한다.
git remote -v로 연결상태를 확인할 수 있다.
git remote remove origin로 저장소연결을 삭제할 수 있다.
cmd창에 git remote add origin https://github.com/[본인계정명]/[디렉토리명]

git remote -v로 연결 확인

git push <remote> <branch>
: remote는 저장소명 branch는 브랜치이름 으로 깃 저장소에 푸쉬함
git push origin main
: 메인 브랜치에 origin을 원격저장소로 푸쉬함
git push <remote> <branch> 사용자가 이 두 매개변수를 지정하지 않는다면 Git는 기본적으로 origin을 원격 저장소로, 현재 작업하고 있는 브랜치를 푸시할 브랜치로 지정한다.
현재 작업 중인 브랜치가 main인 경우, git push 명령어는 두 개의 기본 매개변수를 제공하기 때문에 git push origin main과 동일하게 실행된다.
cmd에 git push origin main 입력
😨😨😨ERROR😨😨😨

😢 에러코드
: failed to push some refs to 'https://github.com/itjuh/gitTEST'
https://github.com/itjuh/gitTEST라는 경로를 참조하여 push할 수 없음.
🤔 원인
: 저장소를 깃허브에 만들 지 않고 자동생성해준다 생각하고 바로 적었기 때문~
🙂 해결
: 깃허브에 저장소 생성 후 http링크를 가져와서 연결했다.
git remote remove origin입력 : 원격저장소 주소변경을 위한 삭제
git remote add origin https://github.com/itjuh/testRepo.git입력
cmd에 git push origin main 입력
😨😨😨ERROR😨😨😨

😢 에러코드
: failed to push some refs to 'https://github.com/itjuh/testRepo.git'
https://github.com/itjuh/testRepo.git라는 경로를 참조하여 push할 수 없음.
🤔 원인
: 저장소 내에 브랜치명이 main이 아니고 master임
🙂 해결
: git push origin으로 브랜치명을 확인하고 다시 push함!

Private 저장소의 경우 Ssh key를 사용하여 업로드를 해야 함
https://github.com/settings/keys 로 접속하면 ssh키를 등록할 수 있다고 함
git remote add origin git@github.com:[사용자닉네임]/[저장소경로]
Enter passphrase for key '/Users/.ssh/id_rsa':
참고)git ssh 키 생성 및 등록
참고) git add 사용법
git pull
: 원격 저장소에 있는 변경사항을 로컬저장소로 가져와서 자동으로 병합(merge)
git pull [원격 저장소의 이름] [원격 저장소에서 받아오고자 하는 브랜치의 이름]
: 원하는 저장소의 원하는 브랜치를 로컬저장소로 받아와서 병합
저장소 연결상태 확인 git remote -v
저장 할 로컬 디렉토리에서 git pull입력

git branch [브랜치명]
: 로컬 저장소에 새로운 버전을 관리할 브랜치를 생성한다.
git push -u origin [브랜치명]
: 원격 저장소에 생성된 브랜치를 push한다.
git branch -M main을 입력git push -u origin main입력
git branch --all입력
git branch -d [브랜치명]
: 로컬 저장소에 브랜치를 지운다.
git push [원격이름:origin] --delete [브랜치명]
: 원격 저장소에 브랜치를 지운다.
dev 브랜치를 삭제하기 위해 git branch -d dev를 입력
삭제된 것을 확인하기 위해 git branch --all을 입력

🙄삭제되지 않았다.(git branch: 로컬저장소 브랜치 확인, git branch --all: 원격저장소 브랜치 확인)
원격 저장소에 브랜치를 삭제하기 위해 git push origin --delete dev를 입력
삭제된 것을 확인하기 위해 git branch --all을 입력

git merge [브랜치명]
: 브랜치 합치기(1) name의 branch를 현재 branch 로 합친다(merge)
git rebase master
: 브랜치 합치기(2) - 더 많이 사용하는 방법.
git branchgit switch mastergit branchgit merge main

요청이 성공적으로 반영되었다.
fork
: 원본 저장소와 연결 된 상태로 내 깃허브 저장소로 복제하기
clone
: 원본 저장소를 내 저장소로 복제하기(연결이 끊김)



git clone [경로] [디렉토리명]



깃 명령어 사용해보니 github desktop처럼 편리한데 하루종일 걸렸다.
그래도 fork, clone, pull, push등등 여러가지를 해볼 기회가 있어서 뿌듯했다.
자주 써야지, 까먹지 말자!!!