ホームページ  >  記事  >  開発ツール  >  3 つの動きで完了します!クリーンな Git コミット記録を維持する

3 つの動きで完了します!クリーンな Git コミット記録を維持する

WBOY
WBOY転載
2022-02-22 18:01:301562ブラウズ

この記事では、「git commit –amend」、「git rebase -i」、「rebase」など、クリーンな Git コミット レコードを維持するための知識を提供します。質問です。皆さんのお役に立てば幸いです。

3 つの動きで完了します!クリーンな Git コミット記録を維持する

## 推奨される学習: 「

Git チュートリアル

誰もが、標準化された簡潔な方法でコードを記述する方法を学習しています

しかし、コードを標準化して簡潔にする方法を学ぶことはほとんどありません。現在、ソースコード管理ツールとして Git は基本的に誰もが使用しています。Git は柔軟性に優れています。さまざまなワークフローに応じてコードを送信/マージします。この柔軟性が適切に制御されていないと、多くの問題も発生します最もよくある問題は、Git ログの履歴が乱雑であることです。これは本当に老婦人の足の包帯のようで、臭くて長いです。私は個人的にこの種のログが嫌いです

#この問題の根本原因自由にコードを提出しています。

3 つの動きで完了します!クリーンな Git コミット記録を維持するコードは送信されましたが、保存する方法はありますか? 3 つのヒントで問題を完全に解決できます

git commit –amend を上手に活用しましょう

このコマンドのヘルプ ドキュメントは次のように説明されています:

--amend               amend previous commit

つまり、これは、

最後の送信

を変更するのに役立ちます。送信したメッセージだけでなく、送信したファイルも変更でき、最終的に最後のコミット ID を置き換えることができます。特定の送信中に特定のファイルを見逃す可能性があります。再度送信すると、役に立たないコミット ID が存在する可能性があります。全員がこれを行うと、git ログは徐々に乱雑になり、完全な関数を追跡できなくなります

次のように仮定します。このようなログ情報がある

* 98a75af (HEAD -> feature/JIRA123-amend-test) feat: [JIRA123] add feature 1.2
* 119f86e feat: [JIRA123] add feature 1.1
* 5dd0ad3 feat: [JIRA123] add feature 1
* c69f53d (origin/main, origin/feature/JIRA123-amend-test, origin/HEAD, main) Initial commit

最後のログ メッセージを変更するとします。次のコマンドを使用できます。

git commit --amend -m "feat: [JIRA123] add feature 1.2 and 1.3"

ログ情報をもう一度見てみましょう。が見つかりました。古いコミット ID 98a75af を新しいコミット ID 5e354d1 に置き換え、メッセージを変更しました。ノードは追加しませんでした。

* 5e354d1 (HEAD -> feature/JIRA123-amend-test) feat: [JIRA123] add feature 1.2 and 1.3
* 119f86e feat: [JIRA123] add feature 1.1
* 5dd0ad3 feat: [JIRA123] add feature 1
* c69f53d (origin/main, origin/feature/JIRA123-amend-test, origin/HEAD, main) Initial commit

これで、リポジトリ内のファイルは次のようになります:

.
├── README.md
└── feat1.txt

0 directories, 2 files

機能 1.3 を送信したときに、構成ファイル config.yaml を忘れて、ログを変更したり、新しいコミット ID を追加したくなかったとします。その場合、次のコマンドは非常に簡単に使用できます

echo "feature 1.3 config info" > config.yaml
git add .
git commit --amend --no-edit

git commit -- amend --no-edit は魂です。現在のリポジトリ ファイルを見てみましょう:

.
├── README.md
├── config.yaml
└── feat1.txt

0 directories, 3 files

git log を見てみましょう

* 247572e (HEAD -> feature/JIRA123-amend-test) feat: [JIRA123] add feature 1.2 and 1.3
* 119f86e feat: [JIRA123] add feature 1.1
* 5dd0ad3 feat: [JIRA123] add feature 1
* c69f53d (origin/main, origin/feature/JIRA123-amend-test, origin/HEAD, main) Initial commit

このテクニックを理解すると、すべての提出物に有効な情報が含まれていることを確認できます。プロセスを説明する図は次のようになります:

--no-edit のバフ ボーナスを使用すると、より強力になります

3 つの動きで完了します!クリーンな Git コミット記録を維持するうまく活用してくださいgit rebase -i

上記のログはすべて feature1 の開発中にあることがわかります。feature ブランチをメイン ブランチにマージする前に、ログ コミット ノードのマージを続行する必要があります。これが使用されます

git rebase -i HEAD~n

ここで、n は最後のいくつかの送信を表します。上記の機能 1 には 3 つの送信があるため、使用できます:

git rebase -i HEAD~3

実行後、vim エディターが次の内容で表示されます:

 1 pick 5dd0ad3 feat: [JIRA123] add feature 1
 2 pick 119f86e feat: [JIRA123] add feature 1.1
 3 pick 247572e feat: [JIRA123] add feature 1.2 and 1.3
 4
 5 # Rebase c69f53d..247572e onto c69f53d (3 commands)
 6 #
 7 # Commands:
 8 # p, pick <commit> = use commit
 9 # r, reword <commit> = use commit, but edit the commit message
10 # e, edit <commit> = use commit, but stop for amending
11 # s, squash <commit> = use commit, but meld into previous commit
12 # f, fixup <commit> = like "squash", but discard this commit's log message
13 # x, exec <command> = run command (the rest of the line) using shell
14 # d, drop <commit> = remove commit
15 # l, label <label> = label current HEAD with a name
16 # t, reset <label> = reset HEAD to a label
17 # m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]
18 # .       create a merge commit using the original merge commit's
19 # .       message (or the oneline, if no original merge commit was
20 # .       specified). Use -c <commit> to reword the commit message.
21 #
22 # These lines can be re-ordered; they are executed from top to bottom.
23 #
24 # If you remove a line here THAT COMMIT WILL BE LOST.
25 #
26 #   However, if you remove everything, the rebase will be aborted.
27 #
28 #
29 # Note that empty commits are commented out</commit></oneline></label></commit></commit></label></label></commit></command></commit></commit></commit></commit></commit>

コミット ID をマージするために最も一般的に使用される方法は、squash と fixup です。前者にはコミット メッセージが含まれますが、後者には含まれていません。ここでは fixup を使用し、終了するには :wq を使用してください。

1 pick 5dd0ad3 feat: [JIRA123] add feature 1
2 fixup 119f86e feat: [JIRA123] add feature 1.1
3 fixup 247572e feat: [JIRA123] add feature 1.2 and 1.3

しましょうもう一度ログを見てください、非常に明確です

* 41cd711 (HEAD -> feature/JIRA123-amend-test) feat: [JIRA123] add feature 1
* c69f53d (origin/main, origin/feature/JIRA123-amend-test, origin/HEAD, main) Initial commit

リベースをうまく活用してください

上記の機能 1 は完全に開発されており、メイン ブランチも他の人によって更新されています。コードの競合を防ぐために、フィーチャーをメイン ブランチに戻します。最初にメイン ブランチの内容をフィーチャーにマージする必要があります。マージ コマンドを使用すると、追加のマージ ノードが存在し、変曲点も存在します。ログ履歴は直線的ではないため、ここでは機能ブランチで rebase コマンドを使用できます##

git pull origin main --rebase

pull コマンドは自動的にマージに役立ちますが、ここではリベースの形式で、log

* d40daa6 (HEAD -> feature/JIRA123-amend-test) feat: [JIRA123] add feature 1
* 446f463 (origin/main, origin/HEAD) Create main.properties
* c69f53d (origin/feature/JIRA123-amend-test, main) Initial commit

の feature1 関数を見てみましょう。メインの上部の送信ノードは依然として線形のままです。次に、コードをプッシュし、PR を送信し、コードをマージできます。 3 つの動きで完了します!クリーンな Git コミット記録を維持する

マージとリベースの違いを簡単に説明します:

ここでは git pullorigin main --rebase を使用して、メインを切り替え、最新のコンテンツをプルしてから元に戻すプロセスを省略します。これは 1 ステップで実行されます。その背後にある原則はすべて上の図に示されています。

リベースの使用には、従わなければならない黄金律があります。これについては以前にも述べたので、詳細は説明しません。

##概要

これらの 3 つのヒントについて, みんなの git ログは非常に明確になると思います。まだ知らない場合は、間違いなく使用できます。グループのメンバーが知らない場合は、間違いなく宣伝できます。この種のリポジトリはより健全に見えます。

推奨学習: 「

Git チュートリアル

以上が3 つの動きで完了します!クリーンな Git コミット記録を維持するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。