찾다
개발 도구자식세 줄의 코드로 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 커밋 기록을 깔끔하게 만드세요.

上图是 git merge 操作的流程示意图,Merge命令会保留所有commit的历史时间。每个人对代码的提交是各式各样的。尽管这些时间对于程序本身并没有任何意义。但是merge的命令初衷就是为了保留这些时间不被修改。于是也就形成了以merge时间为基准的网状历史结构。每个分支上都会继续保留各自的代码记录,主分支上只保留merge的历史记录。子分支随时都有可能被删除。子分子删除以后,你能够看到的记录也就是,merge某branch到某branch上了。这个历史记录描述基本上是没有意义的。

git rebase 中文翻译为“变基”,变得这个基指的是基准。如何理解这个基准呢?我们看一下下图。

세 줄의 코드로 Git 커밋 기록을 깔끔하게 만드세요.

我们可以看到经过变基后的feature分支的基准分支发生了变化,变成了最新的master。这就是所谓的“变基”。

通过上面的两张图可以很明显的发现,这两种合并分支的方式最大的区别在于,merge后的分支,会保留两个分支的操作记录,这在git commit log 树中会以交叉的形式保存。而rebase后的分支会基于最新的master分支,从而不会形成分叉,自始至终都是一条干净的直线。

关于 git rebasegit merge 的详细用法不在本文的介绍范围内,详情可以参考互联网上的其他资料。

在变基过程中,我们通常需要进行commit的修改,而这也为我们整理git记录提供了一个可选方案。

保持最近的几条记录整洁

假设我们有一个仓库,我在这个仓库里执行了4次提交,通过 git reflog 命令查看提交记录如下。

如果我们想将Commit-3、Commit-2和Commit-1的提交合并成一次提交(假设某次提交至改了一些pom文件),我们可以直接执行下面的命令

git rebase -i HEAD~3

-i 指的是 --interactiveHEAD~3

초보 프로그래머라면 누구나 처음 직장에 입사할 때 "xxx, 이 브랜치를 병합해 주세요"라는 말을 듣게 될 것이라고 믿습니다. 문제는 다음과 같습니다. 6명의 프로그래머가 함께 작업하면 6명의 프로그래머 분기가 있게 됩니다. 병합을 사용하면 코드 기록 트리에는 이 기본 분기와 얽혀 있는 6개의 분기가 있게 됩니다.

세 줄의 코드로 Git 커밋 기록을 깔끔하게 만드세요.

위로 그림은 git merge 작업의 흐름도입니다. Merge 명령은 모든 커밋의 기록 시간을 유지합니다. 모든 사람의 코드 제출은 다양합니다. 이 시간은 프로그램 자체에는 아무런 의미가 없습니다. 그러나 병합 명령의 원래 의도는 이러한 시간이 수정되지 않도록 하는 것입니다. 결과적으로 병합 시간을 기준으로 한 네트워크 이력 구조가 형성됩니다. 각 브랜치는 자체 코드 기록을 계속 유지하며, 병합 내역만 기본 브랜치에 유지됩니다. 하위 지점은 언제든지 삭제될 수 있습니다. 하위 분자가 삭제된 후 볼 수 있는 기록은 특정 가지가 특정 가지로 병합되는 것입니다. 이 역사적 설명은 기본적으로 의미가 없습니다.

그리고 git rebase는 중국어로 "rebase"로 번역되는데, 이 베이스는 기준선을 의미합니다. 이 벤치마크를 이해하는 방법은 무엇입니까? 아래 이미지를 살펴 보겠습니다. 🎜🎜b9f2769c019da51c74455494e25e306.jp g 🎜🎜 us 기능 브랜치의 베이스 브랜치가 리베이스 이후 변경되어 최신 마스터가 된 것을 확인할 수 있습니다. 이것을 "리베이스"라고 합니다. 🎜🎜위의 두 그림에서 명확하게 볼 수 있듯이 브랜치를 병합하는 두 가지 방법의 가장 큰 차이점은 병합된 브랜치가 두 브랜치의 작업 기록을 유지하며 이는 git 커밋 로그에 십자가로 표시된다는 것입니다. 트리 형식으로 저장됩니다. 리베이스 이후의 브랜치는 최신 마스터 브랜치를 기반으로 하므로 분기가 없고 처음부터 끝까지 깔끔한 직선이 됩니다. 🎜
🎜 git rebasegit merge의 자세한 사용법은 이 글의 범위를 벗어납니다. 자세한 내용은 인터넷의 다른 정보를 참조하세요. 🎜
🎜리베이스 프로세스 중에는 일반적으로 커밋 수정이 필요하며 이는 git 레코드를 구성할 수 있는 옵션도 제공합니다. 🎜

최신 기록을 깔끔하게 유지하세요🎜🎜웨어하우스가 있고 이 웨어하우스에서 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
🎜라고 쓸 수도 있습니다. 다음과 같이 입력하겠습니다. 인터페이스: 🎜

这个界面是一个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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
이 기사는 juejin에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제
GitHub : 코드 호스팅, 협업 및 버전 제어GitHub : 코드 호스팅, 협업 및 버전 제어Apr 25, 2025 am 12:23 AM

GitHub는 GIT를 기반으로 한 분산 버전 제어 시스템으로 버전 제어, 협업 및 코드 호스팅의 핵심 기능을 제공합니다. 1) 리포지토리 생성, 복제, 커밋 및 변경 변경이 기본 사용법입니다. 2) 고급 사용법에는 자동화에 githubactions를 사용하고 GitHubPages에 정적 웹 사이트를 배포하고 보안 기능을 사용하여 코드를 보호하는 것이 포함됩니다. 3) 병합 충돌, 권한 문제 및 네트워크 연결 문제와 같은 일반적인 오류는 수동으로 갈등을 해결하고 창고 소유자에게 연락하고 프록시를 설정함으로써 디버깅 할 수 있습니다. 4) 워크 플로를 최적화하는 방법에는 분기 전략, 자동 테스트 및 CI/CD, 코드 검토, 문서 및 주석을 명확하게 유지하는 것이 포함됩니다.

GIT : 도구, Github : 서비스GIT : 도구, Github : 서비스Apr 24, 2025 am 12:01 AM

Git 및 Github는 다른 도구입니다. Git은 분산 버전 제어 시스템이며 Github는 GIT를 기반으로 한 온라인 협업 플랫폼입니다. GIT는 작업 영역, 임시 저장 공간 및 로컬 창고를 통해 코드를 관리하고 Gitinit, Gitclone 등과 같은 일반적인 명령을 사용합니다. GitHub에는 코드 호스팅, 풀 레큐스트, 발행 등과 같은 기능이 제공됩니다. 기본 프로세스에는 리포지토리 생성, 코드 푸시 및 풀 레 퀘스트와의 공동 작업이 포함됩니다.

GIT : 버전 제어의 핵심, Github : 소셜 코딩GIT : 버전 제어의 핵심, Github : 소셜 코딩Apr 23, 2025 am 12:04 AM

Git과 Github는 최신 소프트웨어 개발을위한 핵심 도구입니다. GIT는 리포지토리, 분기, 커밋 및 합병을 통해 코드를 관리 할 수있는 버전 제어 기능을 제공합니다. GitHub는 문제 및 풀 레크와 같은 코드 호스팅 및 협업 기능을 제공합니다. GIT와 GitHub를 사용하면 개발 효율성과 팀 협업 기능을 크게 향상시킬 수 있습니다.

GIT : 버전 제어 시스템, GitHub : 호스팅 플랫폼GIT : 버전 제어 시스템, GitHub : 호스팅 플랫폼Apr 22, 2025 am 12:02 AM

GIT는 2005 년 Linus Torvaz가 개발 한 분산 버전 제어 시스템이며 Github는 2008 년에 설립 된 GIT 기반 코드 호스팅 플랫폼입니다. GIT는 Snapshot Management 파일을 통한 분기 및 병합을 지원하며 Github는 풀 요청, 문제 추적 및 코드 검토 기능을 제공하여 팀 공동 작업을 용이하게합니다.

Git 및 Github : 비교 분석Git 및 Github : 비교 분석Apr 21, 2025 am 12:10 AM

Git과 Github는 최신 소프트웨어 개발의 핵심 도구입니다. GIT는 분산 버전 제어 시스템이며 GitHub는 GIT 기반 코드 호스팅 플랫폼입니다. GIT의 핵심 기능에는 버전 제어 및 지점 관리가 포함되며 Github은 협업 및 프로젝트 관리 도구를 제공합니다. GIT를 사용할 때 개발자는 파일 변경을 추적하고 함께 작업 할 수 있습니다. GitHub를 사용할 때 팀은 PullRequest 및 문제를 통해 협력 할 수 있습니다.

Github : 코드 호스팅 플랫폼 소개Github : 코드 호스팅 플랫폼 소개Apr 20, 2025 am 12:10 AM

githubiscrucialforsoftwaredevelopmentdueToitscompeholecosystemforcodemanagementandcollaboration.itoffersioncontrol, CommunitySupport, 및 Tools -LikeGithUbactionandPages.StartBymasteringbasicslikecreatingAreposority, andautomatingwo

Git 및 Github : 개발자를위한 필수 도구Git 및 Github : 개발자를위한 필수 도구Apr 19, 2025 am 12:17 AM

Git과 Github는 현대 개발자에게 필수 도구입니다. 1. 버전 제어에 GIT를 사용하십시오 : 병렬 개발을위한 분기를 만들고, 분기를 병합하고, 롤백 오류. 2. 팀 협업에 GitHub를 사용하십시오 : 풀 레크를 통한 코드 검토를 통해 병합 충돌을 해결하십시오. 3. 실용적인 팁 및 모범 사례 : 정기적으로 제출하고, 메시지를 명확하게 제출하고, .gitignore를 사용하고, 코드 기반을 정기적으로 백업하십시오.

Git and Github : 그들의 관계가 설명되었습니다Git and Github : 그들의 관계가 설명되었습니다Apr 18, 2025 am 12:03 AM

Git과 Github는 동일하지 않습니다. Git은 분산 버전 제어 시스템이며 Github는 Git을 기반으로 한 온라인 플랫폼입니다. GIT는 개발자가 코드 버전을 관리하고 분기, 병합 및 기타 기능을 통해 협업을 달성하도록 도와줍니다. GitHub은 코드 호스팅, 검토, 문제 관리 및 소셜 상호 작용 기능을 제공하여 GIT의 협업 기능을 향상시킵니다.

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

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

뜨거운 도구

SecList

SecList

SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

mPDF

mPDF

mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

SublimeText3 Linux 새 버전

SublimeText3 Linux 새 버전

SublimeText3 Linux 최신 버전

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

DVWA

DVWA

DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는