--amend
)$ git push -f
를 동반하므로 동시 사용자에게 매우 귀찮음$ git commit --amend
$ git commit --amend
$ git commit -m"Initial Commit"
# 커밋 햇는데 text.txt를 수정해야한다! 혹은 staged로 옮겨야한다!
# 수정 후...
$ git add text.txt # forgotten_file
$ git commit --amend # 커밋을 또 만들고 싶은게 아니라면 무조건 `--amend`
위 두개는 로컬에서 반영되었다. 문제는 리모트 저장소이다.
위에서 수정한 커밋이 remote 저장소에 업로드되어 있다면, 다른 유저는 이미 이전 커밋을 다운해서 사용 중일 것이다.
$ git chekcout new2
에서 commit --amend
해본다.push origin/master
하면 충돌난다.$ git push origin master -f
$ git rebase -i [branch new SHA]
e, edit <Commit>
:wq # vim 저장후 나감
(new2 commit) $ git commit --amend
(new2 commit) $ git rebase --continue
git push -f origin HEAD:main
git push --force-with-lease [remote] [branch]
remote/브랜치A
가 진짜 remote에서 remote/브랜치A
가 참조하고 있는 내용이 동일한 경우에만, 즉, 다른 누군가가 remote의 브랜치A에 push를 하지 않은 상태에서만 git push -f
를 실행
git checkout main
$ git merge origin/main
-> 충돌시
$ 충돌 수정
$ git add [modified file]
$ git commit -m"message"
git remote [option]
$ git remote [option]
$ git remote add [저장소이름] [URL]
$ git remote add [저장소이름] [URL]
$ git remote show [저장소이름]
$ git remote show [저장소이름]
$ git remote rename [지금이름] [바꿀이름]
$ git remote rename [지금 이름] [바꿀 이름]
$ git remote rm [삭제할 remote 저장소]
$ git remote rm [삭제할 이름]
$ git remote set-url [alias] [url]
$ git remote set-url [alias] [url]
alias
: url에 대한 리모트 저장소 별칭 설정url
: 리모트 저장소 URL# 1. 기존 원격 저장소 확인
$ git remote -v # 현재 local에서 remote 저장소 현황 체크
origin https://github.com/user/repo.git (fetch)
origin https://github.com/user/repo.git (push)
# 2. 원격 저장소 변경
$ git remote set-url origin https://github.com/user/repo2.git
# 리모트 저장소 새로 설정하는데, 별칭은 origin, URL은 https://github.com/user/repo2.git 이다.
# 3. 원격 저장소 확인
$ git remote -v
origin https://github.com/user/repo2.git (fetch)
origin https://github.com/user/repo2.git (push)
# 바뀐 원격 저장소 확인
$ git remote update [alias]
$ git remote update [remote_alias]
remote_alias
: 리모트 저장소 별칭을 지정해 Local에서 Update$ git remote update origin
$ git tag
$ git tag
$ git tag
v0.1
v0.3
$ git tag -l [pattern]
$ git tag -l 'v1.4.*'
-l
옵션으로 검색 패턴을 사용하여 태그 검색$ git tag -l 'v.1.4.*'
v1.4.0
v1.4.1
v1.4.2
v1.4.3
$ git describe --tags --abbrev=0
2.3.12-3
Lightweight 태그
-a, -s, -m
등의 옵션을 사용하지 않는다.$ git tag <TAG_NAME>
으로 만든다.$ git tag [TAG]
$ git tag [TAG]
dijkstra-2.0
이라는 태그를 붙여 본다.$ git tag dijkstra-2.0
Annotated
$ git tag -a [TAG NAME] -m 'MESSAGE'
$ git tag -a v1.4 -m 'my version 1.4'
$ git tag
v1.4
$ git show v1.0
git show
는 태그 정보와 커밋 정보를 모두 보여준다.$ git show v1.0
$ git checkout [TAG]
$ git checkout tig-0.5
하면, 태그명 tig-0.5
로 체크아웃된다.-a
옵션 대신 -s
옵션을 사용한다.$ git tag -s v1.5 -m 'my signed 1.5 tag'
$ git tag -s v1.5 -m 'my signed 1.5 tag'
You need a passphrase to unlock the secret key for
user: "Scoot Chacon <schacon@gee-mail.com>"
1024-bit DSA key, ID F721C45A, created 2009-02-09
git show
를 실행하면 GPG 서명도 볼 수 있다.$ git tag -v [태그 이름]
으로 서명한 태그 검증$ git tag -v v1.4.2.1
object 883653babd8ee7ea23e6a5c392bb739348b1eb61
type commit
tag v1.4.2.1
tagger Junio C Hamano <junkio@cox.net> 1158138501 -0700
GIT 1.4.2.1
Minor fixes since 1.4.2, including git-mv and git-http with alternates.
gpg: Signature made Wed Sep 13 02:08:25 2006 PDT using DSA key ID F3119B9A
gpg: Good signature from "Junio C Hamano <junkio@cox.net>"
gpg: aka "[jpeg image of size 1513]"
Primary key fingerprint: 3565 2A26 2040 E066 C9A7 4A7D C0C6 D9A4 F311 9B9A
gpg: Signature made Wed Sep 13 02:08:25 2006 PDT using DSA Key ID
F3119B9A
gpg: Can't check signature: public key not found
error: could not verify the tag 'v1.4.2.1'
$ git push
명령은 자동으로 리모트 서버에 태그를 전송하지 않는다. 태그를 만들었으면 서버에 별도로 Push해야한다. $ git push [remote name] [Tag name]
$ git push origin --tags
$ git describe [--all] [--tags] [--contains] [--abbrev=<n>] [<commit-ish>…]
$ git describe [--all] [--tags] [--contains] [--abbrev=<n>] --dirty[=<mark>]
$ git describe <blob>
$ git describe --always --match "*b"
스냅샷: git에서 데이터를 저장하는 방식
origin file -> Modified -> Staged -> Committed: 세 단계를 지나면 하나의 스냅샷이 저장된다.