당연히 5년 동안 git을 사용했는데 바이트에 와서는 git을 사용해 본 적이 없는 것 같은 느낌이 듭니다. 靠,我5年前端开发经验难道是假造的咩~,真的是栓q
. git rebase;git rebase -i;git cherry-pick;git stash;git commit --amend;
블로그에서만 보던 이 명령어들이 다 일상이 되었네요 woohoo . 방법이 없습니다. 집에 가서 비밀의 물결을 배울 수 밖에 없고, 이제 그것들을 정리하고 공유합니다.各位同学千万不要走我的老路,被人发现了真的社死。
지점 관리
- git checkout -b feat/sass-v1 origin/feat/sass-v1 // 원격 브랜치 feat/sass-v1을 로컬에 복제
- git checkout -b feat/saas-0817 // 현재 브랜치에서 새 브랜치 생성 feat/saas-0817
- git merge [branchName] 현재 분기에 branchName 병합
- git merge [branchName] --squash branchName을 현재 분기로 병합하고 branchName의 모든 커밋을 하나의 커밋으로 병합합니다.
git commit --amend 修改上次的提交信息,push后不会增加新的commit记录,但是会修改本次的commithash(也可以理解为删掉了最新的一次commit,重新又提交了一次)
git commit --amend
// 修改commit msg
复制代码
- git branch -D [branchName] 로컬 분기 삭제
git push origin -D [branchName] 删除远端分支
리베이스 브랜치
- git pull --rebase origin [branchName] = git fetch + git rebase
// 假设当前分支dev, commit 为 a b c d e
// 假设master分支, commit 为 a b f g h
git pull --rebase origin master
// 当前分支dev commit 变为 a b c d e f g h
复制代码
- 자식 리베이스 마스터
// 假设当前分支dev, commit 为 a b c d e
// 假设master分支, commit 为 a b f g h
git pull --rebase origin master
// 当前分支dev commit 变为 a b f g h c d e
复制代码
숨김 숨김 코드
- 시나리오: 함수가 개발되지 않아 커밋할 수 없지만 이제 마스터를 리베이스해야 할 때 캐시 영역의 코드로 무엇을 해야 합니까? 몇 줄의 코드를 작성했지만 이제 버그를 수정하기 위해 다른 분기로 전환해야 하는 경우 캐시에 있는 코드로 무엇을 해야 합니까? git stash를 사용하면 됩니다.
- git stash 은닉 코드
- git stash pop은 작업 공간과 캐시로 복원하고 stashid를 제거합니다.
- 현재 stash를 보려면 git stash 목록
注意:stash@{0} stash@{1} stash@{2} 是stashname
git stash apply stashname 恢复指定贮藏代码到工作区和缓存区,会保留stashid
git stash save 'msg' 带备注贮藏
- git stash show -p는 최신 숨김 파일별 변경 사항을 보여줍니다.
- git stash show -p stashname 지정된 숨김 파일에 대한 특정 변경 사항을 표시합니다.
저지르다
- git commit -m "msg" --no-verify 확인하지 않고 강제 커밋
- git push -f 强制提交代码并以本地版本代码为主覆盖远程
git push -f是不安全的,git push --force-with-lease更安全,注意--force-with-lease失败后再执行一次也会强制提交覆盖
reset回退
- git log 查看提交日志
- git reset 将所有暂存区回退到工作区
- git checkout . 丢弃工作区所有的更改
- git reset --hard [commit hash] 将从commithash及之后的丢弃
- git reset --hard 将暂存区、工作区所有内容丢弃
git reset --soft [commit hash] 将从commithash及之后的提交回退到暂存区
git reset --soft HEAD~4 回退最近4次提交到暂存区
cherry-pick 复制提交
- 场景:当你在merge或者rebase的时候发现冲突太多了,想哭的时候,可以用原分支check目标分支处理,然后再cherry-pick当前分支的每个提交,这样冲突就会少很多。或者另一分支上有些代码还没有merge到master,但是你当前分支又非要用的时候,就可以cherry-pick过来一份。
git cherry-pick [commit hash] 将其他分支上已提交的commit在当前分支再提交一次,产生新的commithash
revert
- git revert [commit hash] 非merge的commit
- git revert -m [1|2] [commit hash] merge类型的commit
- 通过git show [commit hash]查看
- 第三行第一个hash为编号1,第二个hash为编号2,以哪个父hash为主线则保留哪个,删除另一个
复制代码
- git revert -m 1 bd86846 则回滚bd86846的提交,且以ba25a9d master分支为主线保留,回滚掉1c7036f 所在分支提交
复制代码
rebase -i
- 场景:使用merge导致git提交线乱七八糟,提交日志过多非常难看。自从使用了rebase提交线变得无比丝滑,使用rebase -i合并每个需求的所有提交成1个,使日志变得清晰
git rebase -i HEAD~10
调整最近10次提交的日志、或合并多次提交为1次,让log更好看更清晰
p使用, pick = use commit
s合并掉, squash = use commit, but meld into previous commit
所有的提交按时间倒序排列
被s的会合并到上一次commit,也就是当前排列的上一个里面
scope
feat: 新功能、新特性
fix: 修改 bug
perf: 更改代码,以提高性能(在不影响代码内部行为的前提下,对程序性能进行优化)
refactor: 代码重构(重构,在不影响代码内部行为、功能下的代码修改)
docs: 文档修改
스타일: 코드 형식 수정, CSS 수정(세미콜론 수정 등)이 아님에 유의
테스트: 테스트 케이스 추가 및 수정
빌드: 프로젝트 빌드 또는 종속성 수정에 영향을 줍니다.
되돌리기: 마지막 커밋을 되돌리기
ci: 지속적 통합 관련 파일 수정
chore: 기타 수정 사항(위 유형이 아닌 수정 사항)
릴리스: 새 버전을 릴리스
워크플로: 워크플로 관련 파일 수정
以上仅为个人学习总结,欢迎评论讨论
觉得不错的记得点个赞哦~