Git의 명령어

jinkyu Seok·2025년 1월 25일

기초학습

목록 보기
2/11

새로운 브랜치로 이동해서 새로이 커밋을 했는데도 원래 브랜치에서 커밋한 리스트가 따라오고 있어. 이전 커밋들은 전부 PR되어 병합까지 완료되어서 로컬에 있는 부분은 삭제한 뒤에 다시 최근 커밋에 덮어서 다시 커밋하면 어떤지도 검토해줘.

네, 이전 브랜치의 커밋들이 새 브랜치에 불필요하게 따라오는 상황이네요. 다음과 같은 절차로 해결할 수 있습니다:

  1. 먼저 현재 작업 내용을 임시 저장(stash)합니다:
git stash
  1. main 브랜치로 이동하여 최신 상태로 업데이트합니다:
git checkout main
git pull origin main
  1. 새로운 브랜치를 main에서 다시 생성합니다:
git checkout -b fix/recommand/issue-173
  1. 임시 저장했던 작업 내용을 복원합니다:
git stash pop
  1. 변경사항을 확인하고 새로 커밋합니다:
git status
git add src/main/java/org/team14/webty/recommend/repository/RecommendRepository.java
git add src/main/java/org/team14/webty/recommend/service/RecommendService.java
git commit -m "fix: 댓글 및 리뷰페이지관련 오류해결"
  1. 강제로 원격 저장소에 푸시합니다:
git push -f origin fix/recommand/issue-173

이렇게 하면:
1. 이전 브랜치의 커밋 히스토리가 새 브랜치에 따라오지 않습니다.
2. main 브랜치의 최신 상태에서 시작하므로 깔끔한 커밋 히스토리를 가질 수 있습니다.
3. 실제로 필요한 변경사항만 새로운 커밋으로 남게 됩니다.

주의사항:

  • git push -f 명령어는 원격 저장소의 내용을 강제로 덮어쓰므로 신중하게 사용해야 합니다.
  • 다른 사람과 협업 중인 브랜치에서는 이 방법을 사용하지 않는 것이 좋습니다.
  • stash를 사용할 때는 작업 내용이 모두 저장되었는지 확인하는 것이 중요합니다.
  • Gradle 빌드 시 'Permission Denied' 오류 처리

  • 문제: ./gradlew buildgradlew: permission denied 오류 발생

  • 해결 방법:

  • 문제 원인 분석: 'Permission Denied' 오류는 실행 파일에 실행 권한이 없어서 발생합니다.

  • 권한 설정:

  • chmod 명령어: chmod +x ./gradlew

  • chmod: 파일 권한 변경 명령어

  • +x: 실행 권한 추가 옵션

  • ./gradlew: Gradle 실행 파일

  • chmod +x ./gradlew 명령어를 입력하여 - gradlew 파일에 실행 권한을 부여합니다.

  • 권한 부여 후 실행:

./gradlew build 다시 실행합니다.
이제 'Permission Denied' 오류가 해결되었기 때문에 Gradle 빌드가 정상적으로 진행됩니다.

위 과정을 통해 파일에 실행 권한을 부여하여 'Permission Denied' 오류를 해결하고, 이후 Gradle 빌드를 수행할 수 있게 됩니다.

Next.js 프로젝트를 실행하는 기본적인 명령어들을 알려드리겠습니다:

개발 서버 실행:

# npm 사용 시
npm run dev

# yarn 사용 시
yarn dev

# pnpm 사용 시
pnpm dev

프로덕션 빌드 후 실행:

# 1. 빌드
npm run build
# 또는 yarn build
# 또는 pnpm build

# 2. 실행
npm run start
# 또는 yarn start
# 또는 pnpm start

주요 포트 정보:

  • 기본적으로 http://localhost:3000에서 실행됩니다
  • 다른 포트를 사용하고 싶다면:
    # 예: 3001 포트 사용
    npm run dev -- -p 3001
    # 또는
    PORT=3001 npm run dev

개발 시 유용한 팁:
1. 자동 새로고침이 안 될 경우:

# 개발 서버 완전 재시작
npm run dev -- --turbo
  1. 캐시 클리어가 필요할 경우:

    # next.js 캐시 삭제
    npm run dev -- --clear
  2. 터미널에서 Ctrl + C를 누르면 개발 서버를 종료할 수 있습니다.

개발 서버를 실행하면 코드 변경 사항이 실시간으로 반영되어 브라우저에서 확인하실 수 있습니다.

Git의 명령어에 대해서 정리해볼까 한다. 대부분의 사용자들이 주로 add, commit, push, pull, fetch 등을 사용하겠지만 Git의 명령어는 정말 다양하고 옵션도 많다. 이 포스팅에서는 간단하게 살펴보고 Git에 대해서 포스팅을 진행하면서 각 명령어가 쓰이는 곳과 더 상세한 설명을 추가하도록 하겠다.

참고로 아래 명령어를 보면 (-)대시 사이에 공백이 있는 걸 볼 수 있는데 Medium에서 대시를 이어서 쓸 수가 없다 보니 중간에 공백을 끼워 넣었다. 실제로 사용할 때는 (-)대시 사이에 공백 없이 이어서 써야 한다.

현재 로컬에서 수정한 SecurityConfig.java 파일이 있어서 pull이 안되고 있네요.
다음 두 가지 방법 중 하나로 해결할 수 있습니다:

1. 현재 변경사항을 commit 하기

# 변경사항 저장
git add src/main/java/org/team14/webty/security/config/SecurityConfig.java
git commit -m "SecurityConfig 수정"

# 그 후 pull 실행
git pull origin main

2. 현재 변경사항을 임시 저장(stash)하기

# 변경사항 임시 저장
git stash

# pull 실행
git pull origin main

# 임시 저장한 변경사항 다시 적용
git stash pop

보통은:

  • 작업이 완료된 상태라면 1번 방법
  • 작업이 진행 중이라면 2번 방법을 사용합니다.

어떤 방법으로 진행할까요?

네, 로컬 변경사항을 무시하고 원격 저장소의 내용으로 강제로 덮어쓰는 방법이 있습니다:

# 현재 변경사항 모두 버리고 원격 저장소 내용으로 덮어쓰기
git fetch origin
git reset --hard origin/main

⚠️ 주의: 이 명령어를 실행하면 현재 작업 중인 모든 로컬 변경사항이 영구적으로 삭제됩니다.

더 안전한 방법을 원하신다면:

# 현재 변경사항을 백업 브랜치로 저장한 후 pull
git checkout -b backup-branch
git checkout main
git reset --hard origin/main

어떤 방법으로 진행할까요?

1. 설정과 초기화

전역 사용자명/이메일 구성하기

git config - -global user.name “Your name”

git config - -global user.email “Your email address”

저장소별 사용자명/이메일 구성하기 (해당 저장소 디렉터리로 이동후)

git config user.name “Your name”

git config user.email “Your email address”

참고로 user 설정이 되어 있지 않으면 Github에 있는 repository에 변경사항을 푸시 한다고 해도 commit count 집계도 안되고 해당 커밋의 작성자 프로필 아이콘도 ? 로 표시되기 때문에 웬만하면 name과 email 주소를 설정하길 추천한다.

전역 설정 정보 조회

git config - -global - -list

저장소별 설정 정보 조회

git config - -list

Git의 출력결과 색상 활성화하기

git config - -global color.ui “auto”

새로운 저장소 초기화하기

mkdir /path/newDir

cd /path/newDir

git init

저장소 복제하기

git clone <저장소 url>

새로운 원격 저장소 추가하기

git remote add <원격 저장소> <저장소 url>

2. 기본적인 사용법

아래 명령어에서 [ ]는 선택적인 매개변수를 의미한다.

새로운 파일을 추가하거나 존재하는 파일 스테이징하고 커밋하기

git add <파일>

git commit -m “<메시지>

파일의 일부를 스테이징하기

git add -p [<파일> [<파일> [기타 파일들…]]]

add 명령에서 Git 대화 모드를 사용하여 파일 추가하기

git add -i

수정되고 추적되는 파일의 변경 사항 스테이징하기

git add -u [<경로> [<경로>]]

수정되고 추적되는 모든 파일의 변경 사항 커밋하기

git commit -m “<메시지>” -a

작업 트리의 변경 사항 돌려놓기

git checkout HEAD <파일> [<파일>]

커밋되지 않고 스테이징된 변경 사항 재설정하기

git reset HEAD <파일> [<파일>]

마지막 커밋 고치기

git commit -m “<메시지>” - -amend

이전 커밋을 수정하고 커밋 메시지를 재사용하기

git commit -C HEAD - -amend

3. 브랜치

지역 브랜치 목록 보기

git branch

원격 브랜치 목록 보기

git branch -r

지역과 원격을 포함한 모든 브랜치 목록 보기

git branch -a

현재 브랜치에서 새로운 브랜치 생성하기

git branch <새로운 브랜치>

다른 브랜치 체크아웃하기

git checkout <브랜치>

현재 브랜치에서 새로운 브랜치 생성하고 체크아웃하기

git checkout -b <새로운 브랜치>

다른 시작 지점에서 브랜치 생성하기

git branch <새로운 브랜치> <브랜치를 생성할 위치>

기존의 브랜치를 새로운 브랜치로 덮어쓰기

git branch -f <기존 브랜치> [<브랜치를 생성할 위치>]

브랜치를 옮기거나 브랜치명 변경하기

<새로운 브랜치>가 존재하지 않을 경우

git checkout -m <기존 브랜치> <새로운 브랜치>

무조건 덮어쓰기

git checkout -M <기존 브랜치> <새로운 브랜치>

다른 브랜치를 현재 브랜치로 합치기

git merge <브랜치>

커밋하지 않고 합치기

git merge - -no-commit <브랜치>

선택하여 합치기

git cherry-pick <커밋명>

커밋하지 않고 선택하여 합치기

git cherry-pick -n <커밋명>

브랜치의 이력을 다른 브랜치에 합치기

git merge - -squash <브랜치>

브랜치 삭제하기

삭제할 브랜치가 현재 브랜치에 합쳐졌을 경우에만

git branch -d <삭제할 브랜치>

삭제할 브랜치가 현재 브랜치에 합쳐지지 않았어도

git branch -D <삭제할 브랜치>

4. Git 이력

모든 이력 보기

git log

변경 사항을 보여주는 패치와 함께 로그 표시하기

git log -p

1개의 항목만 보이도록 로그 개수 제한하기

git log -1

20개의 항목과 패치만 보이도록 로그 제한하기

git log -20 -p

6개월 동안의 커밋 로그 보기

git log - -since=”6 hours”

이틀 전까지의 커밋 로그 보기

git log - -before=”2 days”

HEAD보다 세 개 이전의 커밋 로그 보기

git log -1 HEAD-3

git log -1 HEAD^^^

git log -1 HEAD~1^^

두 지점 사이의 커밋 로그 보기

git log <시작 지점>< 지점>

*시작 지점이나 끝 지점은 커밋명, 브랜치명, 혹은 태그명이 될 수 있고 조합하여 사용 가능하다.

각 항목의 로그 이력 한 줄씩 보기

git log - -pretty=oneline

각 항목마다 영향 받은 줄의 통계 보기

git log - -stat

커밋할 시점의 파일 상태 보기

git log - -name-status

현재 작업 트리와 인덱스의 차이점 보기

git diff

인덱스와 저장소의 차이점 보기

git diff - -cached

작업 트리와 저장소의 차이점 보기

git diff HEAD

작업 트리와 특정 위치 간의 차이점 보기

git diff <시작 지점>

*시작 지점은 커밋명 or 브랜치명 or 태그명이다.

저장소의 두 지점 사이의 차이점 보기

git diff <시작 지점> < 지점>

차이점의 통계 보기

git diff - -stat <시작 지점> [< 지점>]

파일의 커밋 정보 줄 단위로 보기

git blame <파일>

파일의 줄 단위의 복사, 붙여 넣기, 이동 정보 보기

git blame -M <파일>

파일의 줄 단위의 이동과 원본 파일 정보 보기

git blame -C -C <파일>

로그에서 복사와 붙여 넣은 정보 보기

git log -C -C -p -1 <특정 지점>

5. 원격 저장소

저장소 복제하기

git clone <저장소>

마지막 200개의 커밋만 포함하여 저장소 복제하기

git clone - -depth 200 <저장소>

새로운 원격 저장소 추가하기

git remote add <원격 저장소> <저장소 url>

모든 원격 브랜치 목록 보기

git branch -r

원격 브랜치에서 지역 브랜치 생성하기

git branch <새로운 브랜치> <원격 브랜치>

원격 태그에서 지역 브랜치 생성하기

git branch <새로운 브랜치> <원격 태그>

origin 저장소에서 합치지 않고 지역 브랜치로 변경 사항 가져오기

git fetch

원격 저장소에서 합치지 않고 지역 브랜치로 변경 사항 가져오기

git fetch <원격 저장소>

원격 저장소에서 변경 사항을 가져와 현재 브랜치에 합치기

git pull <원격 저장소>

origin 저장소에서 변경 사항을 가져와 현재 브랜치에 합치기

git pull

새로운 브랜치 생성 및 이동

git checkout -b typo-fix/review/issue-63

ReviewCommentRepository.java 파일만 스테이징

git add src/main/java/org/team14/webty/reviewComment/repository/ReviewCommentRepository.java

커밋 생성

git commit -m "typo-fix: 재귀적 하위댓글 조회기능 오류를 네이티브 쿼리로 변경"

새로 생성한 브랜치를 원격 저장소에 푸시

git push origin typo-fix/review/issue-63

지역 브랜치를 원격 브랜치에 푸싱하기

git push <원격 저장소> <지역 브랜치>:<원격 브랜치>

지역 브랜치를 동일한 이름의 원격 브랜치에 푸싱하기

git push <원격 저장소> <지역 브랜치>

새로운 로컬 브랜치를 원격 저장소에 푸싱하기

git push <원격 저장소> <지역 브랜치>

원격 저장소에서 쓸모가 없어진 원격 브랜치 제거하기

git remote prune <원격 저장소>

원격 저장소를 제거하고 관련된 브랜치도 제거하기

git remote rm <원격 저장소>

위에 작성된 명령어들은 주로 사용될만한 명령어들이고 이외에도 git 의 명령어는 상당히 많다. 더 다양한 사용법들을 알아보고자 한다면 아래 링크에서 확인하면 된다.

git 사이트 링크

0개의 댓글