> 시스템 튜토리얼 > 리눅스 > 13가지 실용적인 Git 팁

13가지 실용적인 Git 팁

PHPz
풀어 주다: 2024-07-21 20:21:41
원래의
879명이 탐색했습니다.

13가지 실용적인 Git 팁

Git의 13번째 생일을 기념하여 Git 경험을 더욱 유용하고 강력하게 만드는 13가지 팁과 요령을 소개합니다. 간과했을 수 있는 몇 가지 기본 사항부터 시작하여 실제 고급 사용자 팁으로 확장하세요!

1. ~/.gitconfig 파일

처음 git 명령을 사용하여 저장소에 변경 사항을 커밋하려고 하면 다음과 같은 환영 메시지를 받을 수 있습니다.

으아아아

Git이 전역 구성 옵션을 저장하는 ~/.gitconfig의 내용을 수정하는 것이 바로 이러한 명령이라는 사실을 깨닫지 못할 수도 있습니다. 별칭 정의, 특정 명령 옵션을 영구적으로 켜거나 끄기, Git 작동 방식 수정(예: git diff가 사용하는 diff 알고리즘 또는 유형)을 포함하여 ~/.gitconfig 파일을 사용하여 많은 작업을 수행할 수 있습니다. diff는 기본 병합 전략에 사용됩니다). 저장소 경로에 따라 조건부로 다른 구성 파일을 포함할 수도 있습니다! 자세한 내용은 man git-config를 참조하세요.

2.웨어하우스의 .git/config 파일

이전 팁에서 git config 명령의 --global 플래그가 무엇을 하는지 궁금하셨을 것입니다. 이는 Git에게 ~/.gitconfig의 "전역" 구성을 업데이트하도록 지시합니다. 물론, 전역 구성이 있다는 것은 로컬 구성이 있다는 의미이기도 합니다. --global 플래그를 생략하면 git config는 대신 .git/config에 저장된 저장소별 구성을 업데이트합니다.

.git/config 파일에 설정된 옵션은 ~/.gitconfig 파일의 모든 설정보다 우선 적용됩니다. 예를 들어 특정 저장소에 다른 이메일 주소를 사용해야 하는 경우 git config user.email " also_you@example.com"을 실행할 수 있습니다. 그러면 해당 저장소의 모든 커밋은 개별적으로 구성된 이메일 주소를 사용하게 됩니다. 이는 오픈 소스 프로젝트에서 작업하고 업무 이메일을 기본 Git 구성으로 사용하면서 자신의 이메일 주소를 표시하려는 경우에 유용합니다.

~/.gitconfig에서 설정할 수 있는 거의 모든 항목은 .git/config에서 설정하여 특정 저장소에서 작동하도록 할 수도 있습니다. 아래 팁에서 ~/.gitconfig 에 무언가를 추가한다고 언급할 때 특정 저장소에 대해 .git/config 를 추가하여 해당 옵션을 설정할 수도 있다는 점을 기억하세요.

3. 별칭

앨리어싱은 ~/.gitconfig에서 수행할 수 있는 또 다른 작업입니다. 이는 명령줄의 셸처럼 작동합니다. 일반적으로 특정 옵션이나 플래그 집합을 사용하여 하나 이상의 다른 명령을 호출할 수 있는 새 명령 이름을 설정합니다. 자주 사용하는 길고 복잡한 명령에 적합합니다.

git config 명령을 사용하여 별칭을 정의할 수 있습니다. 예를 들어 git config --global --add alias.st status를 실행하면 git st를 실행하면 git status를 실행하는 것과 동일한 작업이 수행됩니다. 하지만 별칭을 정의할 때 발견한 것은 다음과 같습니다. 일반적으로 ~/.gitconfig 파일을 직접 편집하는 것이 더 쉽습니다.

이 방법을 사용하기로 선택하면 ~/.gitconfig 파일이 INI 파일임을 알 수 있습니다. INI는 특정 단락이 포함된 키-값 파일 형식입니다. 별칭을 추가하면 [alias] 단락이 변경됩니다. 예를 들어 위와 동일한 git st 별칭을 정의할 때 파일에 다음을 추가합니다.

으아아아

(이미 [별칭] 단락이 있는 경우 기존 섹션에 두 번째 줄을 추가하면 됩니다.)

4. 쉘 명령의 별칭

别名不仅仅限于运行其他 Git 子命令 —— 你还可以定义运行其他 shell 命令的别名。这是一个用来处理一个反复发生的、罕见和复杂的任务的很好方式:一旦你确定了如何完成它,就可以在别名下保存该命令。例如,我有一些复刻fork的开源项目的仓库,并进行了一些本地修改。我想跟上项目正在进行的开发工作,并保存我本地的变化。为了实现这个目标,我需要定期将来自上游仓库的更改合并到我复刻的项目中 —— 我通过使用我称之为upstream-merge 的别名来完成。它是这样定义的:

upstream-merge = !"git fetch origin -v && git fetch upstream -v && git merge upstream/master && git push"
로그인 후 복사

别名定义开头的 ! 告诉 Git 通过 shell 运行这个命令。这个例子涉及到运行一些 git 命令,但是以这种方式定义的别名可以运行任何 shell 命令。

(注意,如果你想复制我的 upstream-merge 别名,你需要确保你有一个名为 upstream 的 Git 远程仓库,指向你已经分配的上游仓库,你可以通过运行 git remote add upstream 来添加一个。)

5、 可视化提交图

如果你在一个有很多分支活动的项目上开发,有时可能很难掌握所有正在发生的工作以及它们之间的相关性。各种图形用户界面工具可让你获取不同分支的图片并在所谓的“提交图表”中提交。例如,以下是我使用 GitLab提交图表查看器可视化的我的一个仓库的一部分:

13가지 실용적인 Git 팁

GitLab commit graph viewer

如果你是一个专注于命令行的用户或者发现分支切换工具让人分心,那么可以从命令行获得类似的提交视图。这就是 git log 命令的 --graph 参数出现的地方:

13가지 실용적인 Git 팁

Repository visualized with --graph command

以下命令可视化相同仓库可达到相同效果:

git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)%Creset' --abbrev-commit --date=relative
로그인 후 복사

--graph 选项将图添加到日志的左侧,--abbrev-commit 缩短提交的 SHA 值,--date=relative 以相对方式表示日期,以及 --pretty 来处理所有其他自定义格式。我有个 git lg 别名用于这个功能,它是我最常用的 10 个命令之一。

6、 更优雅的强制推送

有时,你越是想避开越避不开,你会发现你需要运行 git push --force 来覆盖仓库远程副本上的历史记录。你可能得到了一些反馈,需要你进行交互式变基rebase,或者你可能已经搞砸了,并希望隐藏“罪证”。

当其他人在仓库的远程副本的同一分支上进行更改时,会发生强制推送的危险。当你强制推送已重写的历史记录时,这些提交将会丢失。这就是 git push --force-with-lease 出现的原因 -- 如果远程分支已经更新,它不会允许你强制推送,这确保你不会丢掉别人的工作。

7、 git add -N

你是否使用过 git commit -a 在一次行动中提交所有未完成的修改,但在你推送完提交后才发现 git commit -a 忽略了新添加的文件?你可以使用 git add -N (想想 “notify”) 来解决这个问题,告诉 Git 在第一次实际提交它们之前,你希望在提交中包含新增文件。

8、 git add -p

Eine bewährte Methode bei der Verwendung von Git besteht darin, sicherzustellen, dass jeder Commit nur eine logische Änderung enthält – sei es die Behebung eines Fehlers oder das Hinzufügen neuer Funktionen. Bei der Arbeit kann es jedoch vorkommen, dass für Änderungen in Ihrem Repository mehrere Commits erforderlich sind. Wie können Sie es schaffen, die Dinge so zu trennen, dass jedes Commit nur die entsprechenden Änderungen enthält? git add --patch ist hier, um Sie zu retten!

Dieses Flag bewirkt, dass der Befehl „git add“ alle Änderungen in Ihrer Arbeitskopie prüft und bei jeder Änderung fragt, ob Sie sie festschreiben, überspringen oder die Entscheidung verschieben möchten (Sie können nach dem Ausführen des Befehls „?“ auswählen, um weitere Änderungen anzuzeigen leistungsstarke Optionen). git add -p ist ein großartiges Tool zum Erstellen gut strukturierter Commits.

9. git checkout -p

Ähnlich wie git add -p akzeptiert der Befehl git checkout auch die Option --patch oder -p, was dazu führt, dass jeder „Chunk“ an Änderungen in der lokalen Arbeitskopie angezeigt und verworfen werden kann – vereinfacht gesagt Stellen Sie die lokale Arbeitskopie in den Zustand vor den Änderungen wieder her.

Das ist wirklich toll. Wenn Sie beispielsweise einen Fehler verfolgen, der eine Reihe von Debug-Protokollanweisungen einführt, können Sie nach der Behebung des Fehlers zunächst git checkout -p verwenden, um alle neuen Debug-Protokolle zu entfernen, und dann git add -p, um die Fehlerbehebung hinzuzufügen. Es gibt nichts Befriedigenderes, als eine elegante, gut strukturierte Einreichung zusammenzustellen!

10. Befehl beim Rebasieren ausführen

Einige Projekte haben die Regel, dass jeder Commit im Repository in einem funktionierenden Zustand sein muss – das heißt, bei jedem Commit sollte der Code kompilierbar sein oder die Testsuite sollte ohne Fehler ausgeführt werden. Dies ist nicht schwierig, wenn Sie an einem Zweig arbeiten. Wenn Sie jedoch aus irgendeinem Grund eine Rebase benötigen, müssen Sie jeden rebasierten Commit Schritt für Schritt durchgehen, um sicherzustellen, dass Sie ihn nicht versehentlich einführen eine Pause, und dieser Prozess ist langwierig.

Glücklicherweise überschreibt Git Rebase bereits die Option -x oder --exec. git rebase -x führt diesen Befehl aus, nachdem jedes Commit im Rebase angewendet wurde. Wenn Sie beispielsweise ein Projekt haben, in dem Sie npm run tests verwenden, um Ihre Testsuite auszuführen, führt git rebase -x npm run tests die Testsuite nach jedem Commit während des Rebase aus. Auf diese Weise können Sie sehen, ob Ihre Testsuite bei einem rebasierten Commit fehlschlägt, sodass Sie bestätigen können, dass Ihre Testsuite bei jedem Commit weiterhin erfolgreich ist.

11. Zeitbasierte Revisionszitierung

Viele Git-Unterbefehle akzeptieren einen Revisionsparameter, um zu bestimmen, auf welchen Teil des Repositorys der Befehl wirkt. Dies kann der SHA1-Wert eines bestimmten Commits, der Name eines Zweigs oder sogar ein symbolischer Name wie HEAD (der den aktuellen Checkout darstellt) sein (letzter Commit des Zweigs) können Sie zusätzlich zu diesen einfachen Formen auch ein bestimmtes Datum oder eine bestimmte Uhrzeit als Parameter anhängen und so „einen Verweis auf diese Zeit“ angeben.

Diese Funktion wird irgendwann sehr nützlich sein. Wenn Sie sich mit dem neuesten Fehler befassen und sich sagen: „Diese Funktion war gestern in Ordnung. Was wurde geändert?“ Anstatt auf den gesamten Bildschirm der Git-Protokollausgabe zu starren und herauszufinden, wann der Commit geändert wurde, führen Sie einfach Git aus diff HEAD@{yesterday}, um alle Änderungen seit gestern zu sehen. Dies funktioniert auch für längere Zeiträume (z. B. git diff HEAD@{'2months ago'}) sowie ein genaues Datum (z. B. git diff HEAD@{'2010-01-01 12:00:00'}) .

Sie können diese datumsbasierten Revisionsparameter auch mit jedem Git-Unterbefehl verwenden, der Revisionsparameter verwendet. Einzelheiten dazu, welches Format genau verwendet werden soll, finden Sie in der Gitrevisions-Manpage.

12. Allwissendes Reflog

Haben Sie jemals versucht, einen Commit während eines Rebases zu beenden, und dann festgestellt, dass Sie etwas in diesem Commit behalten müssen? Möglicherweise haben Sie das Gefühl, dass diese Informationen niemals abgerufen, sondern nur wiederhergestellt werden können. Wenn Sie jedoch in Ihrer lokalen Arbeitskopie einen Commit durchführen, wird der Commit zum Reflog hinzugefügt und Sie können weiterhin darauf zugreifen.

Wenn Sie git reflog ausführen, wird eine Liste aller Aktivitäten für den aktuellen Zweig in Ihrer lokalen Arbeitskopie angezeigt und Sie erhalten den SHA1-Wert jedes Commits. Sobald Sie den Commit gefunden haben, den Sie beim Rebasing aufgegeben haben, können Sie git checkout ausführen, um zu diesem Commit zu springen, alle benötigten Informationen kopieren und dann git checkout HEAD ausführen, um zum letzten Commit des Zweigs zurückzukehren.

13. Räumen Sie hinter sich auf

Autsch! Es stellt sich heraus, dass meine grundlegenden Mathematikkenntnisse meinen Git-Kenntnissen unterlegen sind. Git wurde ursprünglich im Jahr 2005 veröffentlicht, was bedeutet, dass es dieses Jahr 13 statt 12 Jahre alt wird. Um diesen Fehler auszugleichen, hier ist Tipp Nummer 13, der uns in dreizehn verwandeln kann.

Wenn Sie bei der Arbeit an einem langfristigen Projekt einen verzweigungsbasierten Workflow verwenden, erhalten Sie am Ende eine Reihe von Verzweigungen, es sei denn, Sie bereinigen jeden Zweig beim Zusammenführen. Dies macht es schwierig, den gewünschten Zweig zu finden, und der Zweigwald macht es unmöglich, ihn zu finden. Schlimmer noch: Wenn Sie über eine große Anzahl aktiver Zweige verfügen, kann es sehr mühsam sein, festzustellen, ob ein Zweig zusammengeführt ist (kann sicher gelöscht werden) oder noch nicht zusammengeführt ist und in Ruhe gelassen werden sollte. Glücklicherweise kann Git Ihnen helfen: Führen Sie einfach git branch --merged aus, um eine Liste der Zweige zu erhalten, die in Ihren aktuellen Zweig zusammengeführt wurden, oder git branch --no-merged, um herauszufinden, welche Zweige in andere Zweige zusammengeführt wurden. Standardmäßig werden dadurch Zweige in Ihrer lokalen Arbeitskopie aufgelistet. Wenn Sie jedoch das Argument --remote oder -r in die Befehlszeile einfügen, werden auch zusammengeführte Zweige aufgelistet, die nur im Remote-Repository vorhanden sind.

Wichtig: Wenn Sie die Ausgabe von git branch --merged verwenden möchten, um zusammengeführte Zweige zu bereinigen, müssen Sie darauf achten, dass die Ausgabe auch den aktuellen Zweig enthält (schließlich wird dieser aktuelle Zweig mit dem aktuellen zusammengeführt). Zweig!). Stellen Sie sicher, dass Sie den Zweig vor der Zerstörung ausschließen (wenn Sie es vergessen, lesen Sie Tipp 12, um zu erfahren, wie Reflog Ihnen dabei helfen kann, den Zweig wiederherzustellen. Ich hoffe, es hilft ...).

Das Obige ist der gesamte Inhalt

Hoffentlich haben Sie mit mindestens einem dieser Tipps etwas Neues über Git gelernt, ein 13 Jahre altes Projekt, das weiterhin Innovationen hervorbringt und neue Funktionen hinzufügt. Was ist Ihr Lieblings-Git-Trick?


위 내용은 13가지 실용적인 Git 팁의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:linuxprobe.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿