.git 하위 디렉토리 생성 (폴더를 만든 후, 그 안에서 명령 실행 => 새로운 git저장소 생성)
저장소 복제/다운로드(clone)
$ git clone <https:.. URL>
기존 소스 코드 다운로드/복제
$ git clone/로컬/저장소/경로
로컬 저장소 복제
$ git clone 사용자명@호스트:/원격/저장소/경로
원격 서버 저장소 복제
추가 및 확정(commit)
$ git add <파일명> $ git add *
커밋에 단일 파일의 변경 사항을 포함 (인덱스에 추가된 상태)
$ git add -A
커밋에 파일의 변경 사항을 한번에 모두 포함
$ git commit -m "커밋 메시지"
커밋 생성 (실제 변경사항 확정)
$ git status
파일 상태 확인
가지(branch)치기 작업
$ git branch
브랜치 목록
$ git branch <브랜치이름>
새 브랜치 생성 (local로 만듦)
$ git checkout -b <브랜치이름>
브랜치 생성 & 이동
$ git checkout master
master branch로 되돌아 옴
$ git branch -d <브랜치이름>
브랜치 삭제
$ git push origin <브랜치이름>
만든 브랜치를 원격 서버에 전송
$ git push -u < remote > <브랜치이름>
새 브랜치를 원격 저장소로 push
$ git pull < remote > <브랜치이름>
원격에 저장된 git 프로젝트의 현재 상태를 다운받고 + 현재 위치한 브랜치로 병합
변경 사항 발행(push)
$ git push origin master
변경사항 원격 서버에 업로드
$ git push < remote > <브랜치이름>
커밋을 원격 서버에 업로드
$ git push -u < remote > <브랜치이름>
커밋을 원격 서버에 업로드
$ git remote add origin <등록된 원격 서버 주소>
클라우드 주소 등록 및 발행 (git에게 새로운 원격 서버 주소 알림)
$ git remote remove <등록된 클라우드 주소>
클라우드 주소 삭제
갱신 및 병합(merge)
$ git pull
원격 저장소의 변경 내용이 현재 디렉토리에 가져와지고(fetch) 병합(merge)됨
$ git merge <다른 브랜치이름>
현재 브랜치에 다른 브랜치의 수정사항 병합
$ git add <파일명>
각 파일을 병합할 수 있음
$ git diff <브랜치이름><다른 브랜치이름>
변경 내용 merge 전에 바뀐 내용을 비교할 수 있음
태그tag 작업
$ git log
현재 위치한 브랜치 커밋 내용 확인 및 식별자 부여됨
로컬 변경사항 return 작업
$ git checkout -- <파일명>
로컬의 변경 사항을 변경 전으로 되돌림
$ git fetch origin
원격에 저장된 git프로젝트의 현 상태를 다운로드
CLI (Command Line Interface) 명령어
명령어 인터페이스는 (마우스나 각종 UI 컴포넌트 대신) 터미널을 통해 사용자와 컴퓨터가 상호 작용하는 방식
분류
명령어
의미설명
관리자 권한으로 실행
$ sudo
(super user do)
1. 관리자만 읽을 수 있는 파일 읽기 2. 새로운 프로그램 설치 (Ubuntu Linux) 3. Notes : 새로운 프로그램 설치시 Package Manager를 이용하는 것이 보편적
기본적인 unix/linux 명령어
$ ls
(list)
파일보기
$ al
(all)
파일의 세부내용 확인
< $ ls -al의 상세 내용 (권한) >
1. 접근권한 (읽기/쓰기/실행 가능)여부 2. 링크된 파일 갯수 3. 소유자 4. 소유 그룹 5. 파일 크기 6. 만든 날짜 7. 만든 시간 8. 파일/디렉토리 이름
$ cd
(change directory)
디렉토리로 이동
$ pwd
(print working directory)
full 디렉토리 path 확인 / (디렉토리 위치 변경)
<디렉토리로 이동>
$ cd ~
홈 디렉토리 (현재 사용자 개인 파일 디렉토리)
$ cd /
루트 디렉토리 (시스템 최상위 디렉토리 확인) / (매우 중요한 디렉토리를 의미하며 관리자 권한 요구함)
$ cd .
현재 디렉토리
$ cd ..
부모 디렉토리
$ pwd
현재 full 디렉토리 확인
$ clear
터미널의 입력 내용들을 지워줌
자주쓰는 명령어
$ touch [file_name]
빈 파일 생성 / (not 디렉토리 / literally 파일을 생성)
$ mkdir [dir_name]
(make directory)
디렉토리 생성
$ cat [file_name]
(concatenate)
텍스트 형태의 파일 확인
$ mv [file_name or dic_name][target_dir_name]
(move)
파일 또는 디렉토리 옮기기
$ mv [file_name or dir_name][new_file_name]
파일 및 디렉토리 이름 바꾸기
$ cp [file][target_dir_name]
(copy)
복사
$ cp -r [folder_name]
복사
<삭제> (주의!휴지통을 거치지 않고 즉시 삭제)
$ rm [file_name]
(remove)
파일 삭제
$ rm -r [dir_name]
폴더 삭제
<파일 소유권 변경>
$ chown [owner_file]:[group_file]
(change owner)
파일 소유권 변경
$ mkdir
디렉토리 생성
$ rm
삭제
<GUI프로그램의 실행을 더 간편하게>
$ explorer .
현재 폴더를 windows파일 관리자에서 보기
$ open .
현재 폴더를 macOS finder에서 보기
$ code .
현재 폴더를 VS Code 에디터로 열기
<파일 이름에 따른 팁>
공백이 있는 경우
공백부분에 tab 키를 누르기 or / (역슬래시)를 입력
파일 자동완성 기능
첫글자 등을 쓰고 tab 키 누르기
Git 커밋(commit) 이력 되돌리기
이미 커밋(commit)된 작업 이력을 이전으로 되돌려야 하는 상황은 항상 발생합니다. 작업중에 실수로 올라간 커밋일 수 도 있고 버그나 오류가 포함된 커밋 일수도 있습니다. Git 에서는 이러한 상황에서reset이나revert명령을 사용하여 과거로 되돌아 갈 수 있습니다.
Git reset
Gitreset명령어는 현재 작업중인 브랜치의 HEAD 포인터를 과거의 특정 시점을 가르키도록 되돌립니다. 이 때 변경된 파일들을 스테이지 영역에 보존 시킬 수 도 있고 아예 깨끗하게 지워버릴 수 도 있습니다.
git reset <되돌릴 커밋>
reset --soft
소프트 리셋은 과거의 커밋으로 인해 발생한 변경 사항을 제거하지 않고 과거의 커밋으로 HEAD 포인터를 이동시킵니다. 커밋 이력은 삭제하더라도 작업했던 변경내역은 유지하고자 할 때 유용합니다.
예를 들어 아래 c657d 커밋과 3a52b 커밋은 각각 index.js 파일과 styles.css 파일을 신규로 추가한 작업 입니다. 이 두가지 수정사항을 커밋 이전으로 되돌리고자 합니다. 이력은 되돌리더라도 추가된 두 개의 파일은 삭제되지 않기를 원한다면 git reset --soft 명령을 사용할 수 있습니다.
git reset --soft 로 HEAD 를 2단계 전으로 되돌린다.
git status명령으로 확인해 보면 이전 커밋으로 발생한 변경사항에 여전히 접근 가능함을 확인할 수 있습니다. 이 파일들에 추가 수정사항을 반영하고 새로운 커밋으로 Git 리파지토리에 등록이 가능한 상태입니다.
reset --hard
하드 리셋은 과거 이력으로 발생한 모든 수정사항을 깨끗하게 날려버립니다. 이전 커밋의 변경사항을 유지할 필요가 없다면 하드 리셋을 사용하여 온전하게 이전의 커밋 상태로 돌아갈 수 있습니다.
git reset --hard 는 워킹디렉토리와 스테이지 영역도 깔끔히 날려준다.
현재 워킹 디렉토리와 스테이지 영역을 완벽하게 과거의 커밋 상태로 돌아가고자 한다면reset --hard를 사용합니다.
Git revert
커밋 이력을 과거로 되돌리는 또 다른 명령어는git revert입니다.git revert는 이전 커밋 이력을 삭제하는 대신에 과거의 커밋으로 발생한 변경사항을 되돌리는새로운 커밋을 생성합니다.
git revert <원복할 커밋>
ec5be 커밋으로 index.js 파일을 추가했습니다. 이 파일의 추가가 불필요한 작업이었다는 것을 깨달았고 이전 상태로 되돌리고자 한다면 git revert 명령을 사용하여 이전상태로 되돌릴 수 있습니다.
ec5be 커밋으로 발생한 변경사항을 제거한 새로운 커밋을 생성한다.
git revert 명령으로 ec5be 커밋의 변경사항을 되돌리는 새로운 커밋이 생성되었습니다. git revert 명령은 브랜치의 커밋 히스토리를 수정하지 않으면서 특정 커밋의 변경사항을 되돌리는 작업에 유용합니다.
Reset vs Revert
reset 명령은 커밋 히스토리를 수정하므로 작업 이력을 단순하게 만들어 주는 장점이 있습니다. 그러나 이미 원격 저장소에 Push 된 커밋 이력은 reset 으로 되돌리면 안됩니다. 원격 저장소와 싱크가 맞지 않아 수정된 커밋을 push 할 수 없기 때문입니다.
반면에 revert 명령은 커밋 히스토리를 수정하지 않고 새로운 커밋을 생성하기 때문에 원격 리파지토리에 push 된 커밋도 수정이 가능합니다. 과거의 이력도 온전히 보관된다는 점에서 공동작업 시 유용하다고 볼 수 있을 것 같습니다.