세 줄의 코드로 Git 커밋 기록을 깔끔하게 만드세요.
이 기사는 Git 기록을 깨끗하게 유지하는 방법에 대해 주로 설명합니다. 관심 있는 친구는 아래를 살펴보고 모든 사람에게 도움이 되기를 바랍니다.
서문
저자는 최근 한 프로젝트의 아키텍처 마이그레이션 작업을 주도하고 있습니다. 마이그레이션 프로젝트의 무거운 역사적 부담과 많은 인력 협력으로 인해 여러 분기와 여러 커밋을 수행하는 것이 불가피합니다. 시간이 지남에 따라 git 제출 기록이 엉망이 되었습니다. 느낌을 주기 위해 그래픽 git 제출 기록을 가져왔습니다.
하렘에서 첩들이 호감을 얻기 위해 경쟁하는 것처럼 여러 가지가 미친 듯이 싸우고 있습니다. 이러한 상황이 발생하는 이유는 주로 git merge 명령을 남용하고 그에 따른 이해 비용이 부족하기 때문입니다. 오늘날 대규모 공장에서 일하는 프로그래머들은 변경 사항을 처음부터 신중하게 고려하지 않으면 필연적으로 "애자일" 개념의 홍보와 함께 온라인 변경의 급속한 반복이 발생하게 됩니다. 핵심 지표가 된 이후에는 이러한 무의미한 커밋 로그가 "다음 번에 처리"되어 시간이 지남에 따라 혼란스러워졌습니다.
일부 오픈 소스 저장소를 살펴보면 커밋 기록이 매우 깔끔하다는 것을 알 수 있습니다. 사실 이는 커뮤니티의 프로그래머가 더 유능하기 때문이 아니라 이를 채찍질할 KPI 스틱이 없기 때문입니다. 코드를 제출하기 전에 시간을 들여 커밋 로그를 정리합니다. 그리고 이번 글의 주인공은 바로 "Git Rebase" 입니다.
git rebase 및 git merge
git rebase는 중국어로 "rebase"로 번역되며 일반적으로 분기 병합에 사용됩니다. 브랜치 병합이 언급되었기 때문에 git merge
명령은 반드시 필요합니다. git merge
这个命令。
相信每个新手程序员刚进入职场的时候,都会听到“xxx你把这个分支merge一下”这样的话。那么问题来了,假如你有6个程序员一起工作, 你就会有6个程序员的分支, 如果你使用merge, 你的代码历史树就会有六个branch跟这个主的branch交织在一起。
上图是 git merge
操作的流程示意图,Merge命令会保留所有commit的历史时间。每个人对代码的提交是各式各样的。尽管这些时间对于程序本身并没有任何意义。但是merge的命令初衷就是为了保留这些时间不被修改。于是也就形成了以merge时间为基准的网状历史结构。每个分支上都会继续保留各自的代码记录,主分支上只保留merge的历史记录。子分支随时都有可能被删除。子分子删除以后,你能够看到的记录也就是,merge某branch到某branch上了。这个历史记录描述基本上是没有意义的。
而 git rebase
中文翻译为“变基”,变得这个基指的是基准。如何理解这个基准呢?我们看一下下图。
我们可以看到经过变基后的feature分支的基准分支发生了变化,变成了最新的master。这就是所谓的“变基”。
通过上面的两张图可以很明显的发现,这两种合并分支的方式最大的区别在于,merge后的分支,会保留两个分支的操作记录,这在git commit log 树中会以交叉的形式保存。而rebase后的分支会基于最新的master分支,从而不会形成分叉,自始至终都是一条干净的直线。
关于
git rebase
和git merge
的详细用法不在本文的介绍范围内,详情可以参考互联网上的其他资料。
在变基过程中,我们通常需要进行commit的修改,而这也为我们整理git记录提供了一个可选方案。
保持最近的几条记录整洁
假设我们有一个仓库,我在这个仓库里执行了4次提交,通过 git reflog
命令查看提交记录如下。
如果我们想将Commit-3、Commit-2和Commit-1的提交合并成一次提交(假设某次提交至改了一些pom文件),我们可以直接执行下面的命令
git rebase -i HEAD~3
-i
指的是 --interactive
,HEAD~3
git merge
작업의 흐름도입니다. Merge 명령은 모든 커밋의 기록 시간을 유지합니다. 모든 사람의 코드 제출은 다양합니다. 이 시간은 프로그램 자체에는 아무런 의미가 없습니다. 그러나 병합 명령의 원래 의도는 이러한 시간이 수정되지 않도록 하는 것입니다. 결과적으로 병합 시간을 기준으로 한 네트워크 이력 구조가 형성됩니다. 각 브랜치는 자체 코드 기록을 계속 유지하며, 병합 내역만 기본 브랜치에 유지됩니다. 하위 지점은 언제든지 삭제될 수 있습니다. 하위 분자가 삭제된 후 볼 수 있는 기록은 특정 가지가 특정 가지로 병합되는 것입니다. 이 역사적 설명은 기본적으로 의미가 없습니다. 그리고 git rebase
는 중국어로 "rebase"로 번역되는데, 이 베이스는 기준선을 의미합니다. 이 벤치마크를 이해하는 방법은 무엇입니까? 아래 이미지를 살펴 보겠습니다. 🎜🎜
🎜🎜리베이스 프로세스 중에는 일반적으로 커밋 수정이 필요하며 이는 git 레코드를 구성할 수 있는 옵션도 제공합니다. 🎜git rebase
및git merge
의 자세한 사용법은 이 글의 범위를 벗어납니다. 자세한 내용은 인터넷의 다른 정보를 참조하세요. 🎜
최신 기록을 깔끔하게 유지하세요🎜🎜웨어하우스가 있고 이 웨어하우스에서 git reflog
명령을 통해 4개의 커밋을 실행했다고 가정해 보겠습니다. 아래 제출 기록. 🎜🎜
🎜🎜원한다면 Commit-3, Commit-2 및 Commit-1의 커밋은 하나의 커밋으로 병합됩니다(특정 커밋에서 일부 pom 파일이 변경되었다고 가정). 다음 명령을 직접 실행할 수 있습니다. 🎜git rebase -i d2b9b78
로그인 후 복사🎜-i는 <code>--interactive
를 의미하고, HEAD~3
은 마지막 3개의 커밋을 나타냅니다. 🎜🎜물론 보관하고 싶은 최신 Commit🎜의 ID를 직접 지정할 수도 있습니다. 위의 예에서는 Commit-0의 ID이므로 🎜git rebase -i xxx
git push -f
git pull
로그인 후 복사로그인 후 복사🎜라고 쓸 수도 있습니다. 다음과 같이 입력하겠습니다. 인터페이스: 🎜
git rebase -i d2b9b78
git rebase -i xxx git push -f git pull
这个界面是一个Vim界面,我们可以在这个界面中查看、编辑变更记录。有关Vim的操作,可以看我之前写的文章和录制的视频《和Vim的初次见面》
在看前三行之前,我们先来看一下第5行的命令加深一下我们对git rebase
的认识。
翻译过来就是,将d2b9b78..0e65e22
这几个分支变基到d2b9b78
这个分支,也就是将Commit-3/2/1/0
这几次变更合并到Commit-0
上。
回到前面三行,这三行表示的是我们需要操作的三个 Commit,每行最前面的是对该 Commit 操作的 Command。而每个命令指的是什么,命令行里都已经详细的告诉我们了。
-
pick
:使用该commit -
squash
:使用该 Commit,但会被合并到前一个 Commit 当中 -
fixup
:就像squash
那样,但会抛弃这个 Commit 的 Commit message
因此我们可以直接改成下面这样
这里使用fixup,而不是squash的主要原因是squash会让你再输入一遍commit的log,图省事的话,可以无脑选择fixup模式。
然后执行:wq
退出vim编辑器,我们可以看到控制台已经输出Successful了。
这个时候我们再来看下log 记录,执行git log --oneline
于是最近三次的提交记录就被合并成一条提交记录了。
保持中间某些记录整洁
那如果不是最后的几个commit合并,而是中间连续的几个Commit记录,可以用上述方法整理合并吗?答案是可以的,只不过需要注意一下。
我们重新创建一个新的仓库
如果这次我们想将"third commit"和"second commit"合并为一个提交,其实和上面的方式一样,我们只需执行git rebase -i HEAD~3
,然后将中间的提交改成fixup/squash
模式即可,如下图所示:
之所以是HEAD~3,是因为我们要做的变更是基于first commit做的,因此我们也可以写成
git rebase -i a1f3929
我们来看下更改完的commit log,如下图所示:
是不是就干掉了third commit了。
三行代码让git提交记录保持整洁
上面我们都是在本地的git仓库中进行的commit记录整理,但是在实际的开发过程中,我们基本上都是写完就直接push到远程仓库了,那应该如何让远程的开发分支也保持记录的整洁呢?
第一种做法是在push代码前就做在本地整理好自己的代码,但是这种做法并不适用于那种本地无法部署,需要部署到远程环境才能调试的场景。
这时我们只需要执行git push -f
命令,将自己的修改同步到远程分支即可。
-f
是force强制的意思,之所以要强制推送是因为本地分支的变更和远程分支出现了分歧,需要用本地的变更覆盖远程的。
而远程分支更新后,如果其他人也在这条分支上更改的话,还需要执行一个git pull
命令来同步远程分支。
这里我们来总结下让git提交记录保持整洁的三行代码。
git rebase -i xxx git push -f git pull
❗️❗️❗️Tips:由于rebase和push -f是有些危险的操作,因此只建议在自己的分支上执行哦。
推荐学习:《Git视频教程》
위 내용은 세 줄의 코드로 Git 커밋 기록을 깔끔하게 만드세요.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











GIT 코드를 업데이트하는 단계 : 코드 확인 : git 클론 https://github.com/username/repo.git 최신 변경 사항 가져 오기 : Git Fetch Merge 변경 사항 : GIT 병합 원산지/마스터 푸시 변경 (옵션) : Git Push Origin Master

GIT를 통해 로컬로 프로젝트를 다운로드하려면 다음 단계를 따르십시오. GIT를 설치하십시오. 프로젝트 디렉토리로 이동하십시오. 다음 명령을 사용하여 원격 저장소 클로닝 : git 클론 https://github.com/username/repository-name.git

해결 : GIT 다운로드 속도가 느리면 다음 단계를 수행 할 수 있습니다. 네트워크 연결을 확인하고 연결 방법을 전환하십시오. GIT 구성 최적화 : 포스트 버퍼 크기를 늘리고 (GIT 구성-글로벌 http.postBuffer 524288000) 저속 제한 (git config --global http.lowspeedlimit 1000)을 줄입니다. git 프록시 (예 : git-proxy 또는 git-lfs-proxy)를 사용하십시오. 다른 git 클라이언트 (예 : Sourcetree 또는 Github 데스크탑)를 사용해보십시오. 화재 보호를 확인하십시오

Git Commit은 프로젝트의 현재 상태에 대한 스냅 샷을 저장하기 위해 파일 변경을 GIT 저장소에 기록하는 명령입니다. 사용 방법은 다음과 같습니다. 임시 저장 영역에 변경 사항 추가 제출 메시지를 저장하고 종료하기 위해 간결하고 유익한 제출 메시지를 작성하여 제출을 완료하기 위해 제출물을 완료하십시오. 제출자에 서명을 추가하여 제출 내용을보기 위해 GIT 로그를 사용하십시오.

git 저장소를 삭제하려면 다음 단계를 따르십시오. 삭제하려는 저장소를 확인하십시오. 로컬 리포지토리 삭제 : rm -rf 명령을 사용하여 폴더를 삭제하십시오. 원격으로 창고 삭제 : 창고 설정으로 이동하고 "창고 삭제"옵션을 찾은 후 작동을 확인하십시오.

GIT 코드 병합 프로세스 : 충돌을 피하기 위해 최신 변경 사항을 가져옵니다. 병합하려는 지점으로 전환하십시오. 병합을 시작하고 병합을 지정합니다. 병합 충돌을 해결하십시오 (있는 경우). 커밋 메시지를 제공하여 병합을 준비하고 커밋합니다.

전자 상거래 웹 사이트를 개발할 때 어려운 문제가 발생했습니다. 대량의 제품 데이터에서 효율적인 검색 기능을 달성하는 방법은 무엇입니까? 기존 데이터베이스 검색은 비효율적이며 사용자 경험이 좋지 않습니다. 일부 연구 후, 나는 검색 엔진 타입을 발견하고 공식 PHP 클라이언트 Typeense/Typeense-PHP를 통해이 문제를 해결하여 검색 성능을 크게 향상 시켰습니다.

git에 빈 폴더를 제출하려면 다음 단계를 따르십시오. 1. 빈 폴더를 만듭니다. 2. 스테이징 영역에 폴더를 추가하십시오. 3. 변경 사항을 제출하고 커밋 메시지를 입력하십시오. 4. (선택 사항) 변경 사항을 원격 저장소로 밀어 넣습니다. 참고 : 빈 폴더의 이름은 시작할 수 없습니다. 폴더가 이미 존재하는 경우 git add -force를 사용하여 추가해야합니다.
