회사에서 자주쓰는 git 정리

짜리몽땅개발자·2020년 12월 21일
0

깃에 대해서 어떤것부터 설명해야 될지 모르겠고, 일단 설치하고 닥치는대로 해보는 수밖에 없다.

git tag 동기화

# 동기화
git fetch origin

# 특정태그
git tag 1.300.0 fetch_head

git checkout remote checkout

# 원격과 동일하게 이름따서 release 가져오기 
git checkout -t origin/release
# 원격 master 이름따면서 내려받기
git checkout -b master-2 origin/master

git clean : http://hochulshin.com/git-revert-changes/

git clean -fdx

git commit 여러개 하나로 합치기

git rebase -i HEAD~3

squash

upstream/master → fork/master sync example(sample)

remote → fort sync

git remote add upstream {url}

remote git source down : git fetch upstream master

current git location(local) : git rebase upstream/master

local→fork : git push origin master

git log

git log —pretty=format:"%h %s" head~3..head

file 원복

git checkout {/src/file}

branch 삭제

git branch -d {branchname}

강제 삭제

git branch -D {branchName}

branch 이름 변경

git branch -m old new

파일제외

git rm --cached package-lock.json -r

git fetch vs pull

fetch : 수동 merge

pull : 자동 merge

git fetch

git merge origin/master

git log --decorate --all --oneline

cherry-pick

git cherry-pick b8ffcad(가져 가고 싶은 커밋넘버)

git checkout feature/add-title

git reset feature/add-title-correct — hard

git diff master

git push origin master

명령어 입력시 아래와 같이 오류가 난다면 아래는 임시 방편이다.

기존명령:  HaHwul #> git push -u origin master
강제명령:  HaHwul #> git push -u origin +master
To https://github.com/hahwul/a2sv.git
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'https://github.com/hahwul/a2sv.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Merge the remote changes (e.g. 'git pull')
hint: before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

해당 커밋내용만 롤백

git revert {commit}

모두 롤백: commit 만 돌리고 싶을때

https://ahracho.github.io/posts/trials_and_errors/2018-08-29-git-revert-revert/

git reset —hard {commit} : 이력을 모두 날린다. 돌아 갈 수 없다.

git reset —soft {commit} : 이력은 남긴다. 돌아갈 수 있다.

git reset —mixed {commit} : 이력은 남긴다. 인덱스가 초기화 된다. 돌아갈 수 있다.

git reflog

# git reset --soft <돌아가고 싶은 commit id>  
git add는 되어 있는 상태로 돌아간다.  

# git reset --mixed <돌아가고 싶은 commit id>  
git add 이전으로 돌아간다.

tag

git tag

git tag -a v1.0.0 -m"Release version 1.0.0"

git show v1.0.0

github에서 포크시 최신소스 유지 방법

git remote add upstream ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git
git fetch upstream
git merge upstream/master

git remote remove upstream

# 소스내려받기
git fetch upstream

깃 코멘트 수정

git commit —amend -m "12123" // 마지막 커밋 내용 수정

iTerm Plugin

https://github.com/ohmyzsh/ohmyzsh

zsh 셀로 편하게....

feature 생성 및 종료

--no-ff 중요하고 생각한다.

// feature 브랜치(feature/login)를 'develop' 브랜치('master' 브랜치에서 따는 것이 아니다!)에서 분기
$ git checkout -b feature/login develop

/* ~ 새로운 기능에 대한 작업 수행 ~ */

/* feature 브랜치에서 모든 작업이 끝나면 */
// 'develop' 브랜치로 이동한다.
$ git checkout develop
// 'develop' 브랜치에 feature/login 브랜치 내용을 병합(merge)한다.
# --no-ff 옵션: 아래에 추가 설명
$ git merge --no-ff feature/login
// -d 옵션: feature/login에 해당하는 브랜치를 삭제한다.
$ git branch -d feature/login
// 'develop' 브랜치를 원격 중앙 저장소에 올린다.
$ git push origin develop

브랜치 전략

master: 제품

release: 제품 출시를 준비하는 브랜치

release 생성 및 종료 전략

// release 브랜치(release-1.2)를 'develop' 브랜치('master' 브랜치에서 따는 것이 아니다!)에서 분기
$ git checkout -b release-1.2 develop

/* ~ 배포 사이클이 시작 ~ */

/* release 브랜치에서 배포 가능한 상태가 되면 */
// 'master' 브랜치로 이동한다.
$ git checkout master
// 'master' 브랜치에 release-1.2 브랜치 내용을 병합(merge)한다.
# --no-ff 옵션: 위의 추가 설명 참고
$ git merge --no-ff release-1.2
// 병합한 커밋에 Release 버전 태그를 부여한다.
$ git tag -a 1.2

/* 'release' 브랜치의 변경 사항을 'develop' 브랜치에도 적용 */
// 'develop' 브랜치로 이동한다.
$ git checkout develop
// 'develop' 브랜치에 release-1.2 브랜치 내용을 병합(merge)한다.
$ git merge --no-ff release-1.2
// -d 옵션: release-1.2에 해당하는 브랜치를 삭제한다.
$ git branch -d release-1.2
https://gmlwjd9405.github.io/2018/05/11/types-of-git-branch.html

Hotfix 전략

배포한 버전에 긴급하게 수정을 해야 할 필요가 있을 경우, ‘master’ 브랜치에서 분기하는 브랜치이다.
https://gmlwjd9405.github.io/2018/05/11/types-of-git-branch.html

  1. 배포한 버전에 긴급하게 수정을 해야 할 필요가 있을 경우,
    ‘master’ 브랜치에서 hotfix 브랜치를 분기한다. (‘hotfix’ 브랜치만 master에서 바로 딸 수 있다.)
  2. 문제가 되는 부분만을 빠르게 수정한다.
    다시 ‘master’ 브랜치에 병합(merge)하여 이를 안정적으로 다시 배포한다.
    새로운 버전 이름으로 태그를 매긴다.
  3. hotfix 브랜치에서의 변경 사항은 ‘develop’ 브랜치에도 병합(merge)한다.
    https://gmlwjd9405.github.io/2018/05/11/types-of-git-branch.html
// release 브랜치(hotfix-1.2.1)를 'master' 브랜치(유일!)에서 분기
$ git checkout -b hotfix-1.2.1 master

/* ~ 문제가 되는 부분만을 빠르게 수정 ~ */

/* 필요한 부분을 수정한 후 */
// 'master' 브랜치로 이동한다.
$ git checkout master
// 'master' 브랜치에 hotfix-1.2.1 브랜치 내용을 병합(merge)한다.
$ git merge --no-ff hotfix-1.2.1
// 병합한 커밋에 새로운 버전 이름으로 태그를 부여한다.
$ git tag -a 1.2.1

/* 'hotfix' 브랜치의 변경 사항을 'develop' 브랜치에도 적용 */
// 'develop' 브랜치로 이동한다.
$ git checkout develop
// 'develop' 브랜치에 hotfix-1.2.1 브랜치 내용을 병합(merge)한다.
$ git merge --no-ff hotfix-1.2.1
https://gmlwjd9405.github.io/2018/05/11/types-of-git-branch.html

code diff

https://medium.com/@hohpark/vs-code를-git-diff-tool로-설정하기-88baa1d9f2b3

code diff

특정 커밋만을 수정

git rebase --interactive 
pick -> edit
# 원하는 내용 수정
git add .
git git commit --amed
:q!
git rebase --continue
git push --force
# 조금 안전 하게
git push --force-with-lease
profile
시간은 돈과 바꿀 수 있다.

0개의 댓글