iOS 개발일지
1014 새싹 70회차 정리 - Shell/Git 명령어 본문
iOS 앱 개발자 데뷔 과정 70회차
#1. Shell
- Shell 이란?
커널은 운영체제의 core한 부분으로, 하드웨어/입출력/시스템 자원을 관리한다.
Shell은 사용자가 커널 (OS) 에 명령을 내릴 수 있는 명령어 해석기의 역할을 한다.
Shell의 종류는 다양하며, Bourne Shell, Bash, Z Shell 등이 존재한다.
MacOS는 Bash Shell을 사용했으나, MacOS 10.15 (Catalina) 부터 Z Sehll을 기본 Shell로 사용한다.
Terminal은 Shell에 명령을 입력할 수 있는 인터페이스 (프로그램) 이다.
터미널에 입력하는 각종 명령어는, 실제로는 Shell에 명령을 내리는 명령어이기 때문에 Shell 명령어라고 한다.
- Shell 명령어 정리
- pwd (Print Working Directory)
터미널에서 현재 디렉토리 경로 확인
pwd
- cd (Change Directory)
디렉토리 이동 시 사용하는 명령어 : cd 디렉토리명
cd / #root 디렉토리로 이동
cd ~ #사용자 home 디렉토리로 이동
cd Desktop #현재 경로에서 하위에 있는 Desktop 디렉토리로 이동
cd Desktop/sesac #현재 경로에서 하위에 있는 Desktop 디렉토리의 하위 sesac 디렉토리로 이동
cd /Users/lia/Desktop #현재 경로와 관계없이 절대경로로 이동
cd .. #현재 디렉토리의 상위 디렉토리로 이동
cd ... #현재 디렉토리의 상위 디렉토리의 상위 디렉토리로 이동
- ls (List)
현재 디렉토리의 파일과 하위 디렉토리의 리스트를 확인
# 현재 디렉토리 파일/디렉토리 조회
ls
# 현재 디렉토리의 숨김파일을 포함한 모든 파일/디렉토리 조회
ls -a
ls -l
ls -al
- mkdir (Make Directory)
디렉토리를 생성하는 명령어
-p 옵션 : 중간 디렉토리까지 자동으로 생성
mkdir test1 #현재 경로에 test1 디렉토리 생성
mkdir -p test1/test2/test3 #현재 경로에 test1 디렉토리를 생성하고 하위에 test2, 그 하위에 test3 생성
- touch
empty 파일을 생성해주는 명령어
touch .gitignore #현재 디렉토리에 .gitignore 파일 생성
- echo
echo로 입력한 내용을 터미널에 출력하거나, 입력한 내용을 파일에 저장
echo $0 #시스템 변수 출력
echo aaa > a.txt #a.txt 파일의 내용을 aaa로 덮어쓰기
echo bbb >> a.txt #a.txt 파일의 마지막 라인에 bbb 추가
- cat (catenate)
파일의 내용을 터미널에 출력하는 명령어
cat .gitignore
- rm (remove)
파일이나 디렉토리를 삭제할 때 사용하는 명령어
22회차의 API Key 모아서 관리하기 (feat. gitignore) 에서도 비슷한 git 명령어를 사용한 적 있다.
-r 옵션 : 디렉토리를 삭제할 때 사용하는 옵션
-f 옵션 : 강제 삭제 옵션
rm filename.swift #파일 삭제
rm -r directoryName #디렉토리 삭제
rm -rf directoryName #디렉토리 강제 삭제
- clear
터미널의 화면을 초기화시켜 깔끔하게 정리
clear
- history
사용자가 과거에 입력한 명령어를 보여주는 명령어
-c 옵션 : history 초기화
history #과거에 입력한 명령어 확인
history -c #history 초기화(전체 삭제)
- Git 명령어 정리
- git config
git config는 global 설정과 local 설정으로 나뉘며, local 설정이 우선 적용된다.
# 전체 프로젝트에 적용되는 글로벌 user 설정
git config --global user.name
git config --global user.email
# 개별 프로젝트에 적용되는 user 설정
git config user.name
git config user.email
# init branch가 main이 아니라 master로 나오는 경우, 아래의 명령어를 입력하면 다음부터 main으로 생성된다.
git config --global init.defaultBranch "main"
# config 설정 내용 확인
git config --global --list
git config --list
---------------------------------------------------------------------------------------
# vs code를 git editor로 지정
git config --global core.editor "code --wait"
# global 설정 변경
git config --global -e
# local(프로젝트 폴더) 설정 변경
git config --local -e
# alias(별칭) 설정 / 명령어에 띄어쓰기가 있는 경우 ''로 명령어를 감싸주어야 동작한다.
git config --global alias.별칭 명령어
git config --global alias.st status
git config --global alias.cm 'commit -am'
- git init
프로젝트 폴더에서 git을 처음 사용할 때, 최초 한번
git init
# Tip : git init 후 init(empty) commit 생성 (필수 X)
git commit --allow-empty -m "git init"
- git add
워킹 디렉토리에 있는 파일들을 스테이징 에리어 (index) 로 전환할 때
# 변경된 모든 파일을 스테이징 상태로 전환
git add .
# 변경된 특정 파일만 스테이징 상태로 전환
git add a.swift
- git commit
# 커밋 생성
git commit -m "message"
# 추가 커밋을 생성하지 않고, 마지막 커밋에 amend
git commit -m --amend -m "message"
- git status
현재 관리되고 있는 깃 폴더의 상태변화에 대해 확인할 때
git status
- git log
git commit log 및 branch, HEAD 정보 확인
git log
git log --oneline
git log --graph
git log --graph --oneline
- git reflog
git의 모든 변동사항에 대한 로그 확인
git reflog
- git reset
git을 과거 시점으로 돌릴 때 사용하며, 과거로 돌아간 리셋도 다시 미래 시점으로 리셋 가능
# 워킹 디렉토리 + 스테이징 에리어 + 로컬 리포를 특정 커밋 시점으로 리셋
git reset --hard commit_id
# 스테이징 에리어 + 로컬 리포를 특정 커밋 시점으로 리셋
git reset commit_id
git reset --mixed commit_id
# 로컬 리포만 특정 커밋 시점으로 리셋
git reset --soft commit_id
- git stash
파일의 변경사항을 커밋하기 전에 임시저장할 때 사용하는 기능
pull할 때, 커밋이 되지 않는 내용이 있거나 branch switch 시 사용
# git stash
git stash
# stash message 작성
git stash -m "message"
# stash 목록 확인
git stash list
# stash 변경사항 확인
git stash show stash@{0}
# stash list에서 최신 stash 삭제
git stash drop
# stash list에서 특정 stash 삭제
git stash drop stash@{0}
# stash list 전체 삭제
git stash clear
# stash list stac에서 가장 최신 stash로 복원
git stash apply
# stash list에서 특정 stash로 복원
git stash apply stash@{0}
# stash list에서 가장 최신 stash로 복원하면서, stash list에서 해당 stash 삭제
git stash pop
git stash
- git branch
# 브랜치 생성
git branch branchName
# 브랜치 전환
git switch branchName
# 브랜치 삭제
git branch -d branchName
# 브랜치명 변경
git branch -m branchName
- git merge
merge는 fast-forward merge와 3way merge로 구분된다.
fast-forward (ff) merge는 merge commit을 남기지 않고 branch의 HEAD만 이동하며, 3way merge는 merge commit을 남긴다.
merge conflict가 발생한 경우에는 git status를 통해 conflict 파일을 확인 후, 해당 파일에서 conflict를 해결 후 commit을 진행한다.
git merge branchName
-----------------------------------------------------
# merge conflict 상황에서 vs code로 수정
code filename
# merge conflict 상황에서 merge를 취소할 때
git merge --abort
# fast-forward merge 상황에서 merge commit을 남기고 싶을 때
git merge --no-ff branchName
# squash merge
git merge --squash branchName
- rebase
분기된 브랜치의 base commit의 위치를 base branch (ex. main) 의 최신 커밋으로 이동하는 기능이다.
3way merge 상황에서 rebase를 통해 fast-forwad merge 가 가능해진다.
rebase는 분기된 브랜치의 base commit이 변경되기 때문에, base commit 이후 모든 commit_id는 변경된다.
협업 시, remote repo에 push 된 커밋은 rebase를 지양해야 한다.
push 되지 않은 commit 이나 branch 에서만 사용을 권장한다.
혼자 사용하는 remote repo의 경우에는 로컬에서 rebase 후 force push 할 수 있다.
# force push : 기존 remote repo의 내용을 무시하고, local repo의 내용으로 강제 push
git push -f origin main
rebase를 진행 시, merge conflict 처럼 conflict이 발생할 수 있다.
충돌이 발생한 파일을 확인 후, merge conflict와 동일하게 해결한 후 git add 후에 git rebase -- continue 를 하면 된다.
과거 commit 수정을 위해 사용하는 rebase를 Interactive Rebase 라고 한다.
수정이 필요한 커밋의 이전 commit_id를 통해 명령을 입력한다.
# command 영역에 필요한 명령어 입력
pick : 대상 커밋
edit : 커밋 수정이 필요한 경우 (커밋 메세지, 작성자, 시간, 코드 변경)
reword : 커밋 메세지 수정만 필요한 경우
squash : 여러 커밋을 하나의 커밋으로 합쳐야 하는 경우 (어떤 커밋이 스쿼시 되었는지 커밋 메세지에 표기)
fixup : 여러 커밋을 하나의 커밋으로 합쳐야 하는 경우 (어떤 커밋이 합쳐졌는지 커밋 메세지에 표기되지 않음)
Interactive Rebase도 commit에 변화가 일어나기 때문에, rebase 한 커밋 이후의 모든 commit_id가 변경된다.
# commit_id는 rebase 대상 커밋의 이전 커밋 id
git rebase -i commit_id
# edit 상태 : 커밋 메세지 변경
git commit --amend -m "message"
# edit 상태 : 커밋 작성자 변경 / --no-edit 옵션을 통해 커밋메세지 수정 없이 바로 커밋 가능
git commit --amend --no-edit --author="user <user@gmail.com>"
# edit 상태 : 커밋 일자 변경 / --no-edit 옵션을 통해 커밋메세지 수정 없이 바로 커밋 가능
git commit --amend --no-edit --date="{Jul 15 21:10:33 2022 +0900}"
# rebase 상태에서 수정이 완료되어, 다음 커밋으로 넘어갈 때
git rebase --continue
# rebase 중단
git rebase --abort
'SeSAC iOS 데뷔과정 2기' 카테고리의 다른 글
1018 새싹 72회차 정리 - Compositional Layout (0) | 2022.10.18 |
---|---|
1017 새싹 71회차 정리 - Model Relationship (0) | 2022.10.17 |
1013 새싹 69회차 정리 - Realm Migration (0) | 2022.10.13 |
1012 새싹 68회차 정리 - Remote Notification (0) | 2022.10.12 |
1011 새싹 67회차 정리 - Firebase (1) | 2022.10.11 |