기본 명령어
모든 명령에서 '<>' 는 제거하고 입력해주세요.
명령창에서 한번에 모든 단어를 지우려면 'control' + 'u' 를 사용
git init // 깃을 생성
git status // 상태 확인. commit 할 파일이 있나 보여줌
git log // commit 내용을 보여줌
git log --oneline // 한 줄씩 깔끔하게 commit 내용을 보여줌
git diff // 변한 것을 보여줌
git config --list // 깃 설정 리스트 보기
git config --unset <지우고 싶은 설정> // 설정 지우기 (list확인 후 "=" 전까지가 이름)
git remote set-url origin <새로운 repo 주소> // 깃 리모트 url 변경
rm -rf .git // 깃 파일 삭제(삭제할 폴더로 들어가서 사용)
Add (Staging area에 추가)
git add <파일 이름> // 파일을 스테이징 영역에 저장
git add . // 모든 파일을 스테이징 영역에 저장
git reset HEAD <파일 이름> // git add취소 (파일명이 없는 경우 스테이징을 전체 안 한 상태로 돌려준다.)
Commit (Repository에 추가)
git commit -m "commit 내용" // commit을 추가
git commit --amend // commit 수정 (수정 "i" 입력, 빠져나오기 esc누른 후 ":wq" 입력)
restore (되돌리기)
// 선택한 파일을 최근 commit 상태로 되돌립니다.
git restore <파일 이름>
// 특정 commit 상태로 파일을 되돌립니다.
git restore --source <커밋 주소> <파일 이름>
reset (초기화)
reset은 위험하므로 사용을 지양합니다.
git reset <HEAD위치> // commit의 위치 변경 (tap으로 위치 찾거나 HEAD^ 이전 commit으로 되돌리기)
// 더욱 더 세부적으로 들어가면 이렇게 3가지 방법으로 나눌 수 있다.
// commit을 취소하고 해당 파일들은 staged 상태로 워킹 디렉터리에 보존
git reset --soft HEAD^
// commit을 취소하고 해당 파일들은 unstaged 상태로 워킹 디렉터리에 보존 (reset의 기본옵션)
git reset --mixed HEAD^
// commit을 취소하고 해당 파일들은 unstaged 상태로 워킹 디렉터리에서 삭제
git reset --hard HEAD^
git reset ORIG_HEAD // 실수로 reset했을 때, reset을 하기 전으로 되돌린다.
Push & Pull
git push
git push <저장소명> <브랜치명> // push
git push -u origin my-feature // 다음 push 할 때 <저장소> 및 <브랜치> 생략 가능 (== git push)
git push --force, -f // 로컬에서 원격으로 최신 변경사항이 있다고 확신할 때 사용
// (! [rejected] master -> master (non-fast-forward) 에러 시 사용)
git push -f origin master // reset후 강제로 원격저장소(github)를 덮어 씌움 (위험)
git push origin +master
git pull
git push origin HEAD:main
git pull origin main // pull
Branch
git branch <브랜치명> // 브랜치 생성
git checkout <브랜치명> // 다음 브랜치로 전환
git branch -D <브랜치명> // 브랜치 삭제
git merge <병합하고 싶은 브랜치명> // 병합 (main에 다른 브랜치를 넣으려면 main이 위에 HEAD에 위치해야 함, main으로 브랜치 전환)
git merge --squash <브랜치명> // 커밋한 내용들을 전부 병합할 때
git cherry-pick <커밋주소> // 체리픽 다른 브랜치의 주소를 사용해 커밋한 내용 가져오기
Clone
git clone <레포지토리 깃 주소> // 클론 생성
서브모듈 추가
git submodule add <깃허브 레포 주소> <파일 이름> // 부모 폴더에 추가를 한다.
git submodule status // 서브모듈 커밋주소 확인
git rm -f <파일 이름> // 서브 모듈 제거 (.gitmodules의 정보 제거)
git config --unset <모듈 url, active> // 제거해준다
// 깔끔하게 제거하려면 .git(숨긴 폴더)의 modules을 제거하면 깔끔히 제거된다.
cached지우기
// 파일 제거
git rm --cached SecretKey.plist
// 전체 파일 제거
git rm --cached *.text
// 폴더 제거
git rm --cached folder/ -r
// 전체 트래킹 풀기 ⭐️
git rm -r --cached .
Git ignore
gitignore 양식
## 파일 무시
test.txt
## 다음과 같은 확장자는 전체 무시
*.text
*.exe
*.zip
## 폴더 무시
test/
gitignore_global 적용시키기
git config --global core.excludesfile ~/.gitignore_global // 한번만 해주면 된다.
기존 레포 합치기
이 방식으로 레포를 합치게 되면 Github의 초록잔디! 즉, commit을 유지한 채로 레포를 정리할 수 있습니다!
예를 들어 DanielRepo라는 레포에 Practice라는 레포를 합치고 싶다고 가정을 하겠습니다.
DanielRepo == 부모 레포
Practice == 합칠(복사할) 레포
1. 터미널에서 DanielRepo의 주소로 클론을 만들어 줍시다. ⭐️ (클론을 새로 만드는 게 정신건강에 좋습니다.)
git clone <깃 레포지토리 주소>
// ex) git clone https://github.com/DanielY1108/DanielRepo.git
2. 터미널에서 DanielRepo로 접근한 뒤 Practice의 이름, 레포 주소, 브랜치 이름을 사용합니다. (참고. 아래 코드)
git subtree add --prefix= <레포지토리 이름> <레포지토리 깃 주소> <브랜치 이름> 을 적어줍니다.
// ex)
git subtree add --prefix=Practice https://github.com/DanielY1108/Practice.git main
3. Push를 해주면 완료
만약 Working tree has modifications. Cannot add.
와 같은 에러 메시지가 나올 때에는
현재 DanielRepo의 레포가 최신 상태가 아닐 때 이런 에러가 발생합니다.
아래 코드를 사용하세요. 이것도 안되면 클론을 꼭 만들어주고 시작하세요!
git add .
git commit -m "Done"
git push
// 를 통하여 최신으로 업데이트 시켜줍니다.
참고
'Etc.' 카테고리의 다른 글
[iOS/Swift] Quick Help 생성 방법 (문서화, 마크업, 주석) (0) | 2023.02.09 |
---|---|
[iOS/Swift] Info.plist contained no UIScene configuration dictionary 에러발생 시 해결 방법 (0) | 2023.01.10 |