サーチ…
前書き
Gitとのコミットは、コードの変更を著者に帰属させることによって説明責任を提供します。 Gitは、コミットの特異性とセキュリティのための複数の機能を提供します。このトピックでは、Gitを使用してコミットする際の適切なプラクティスと手順について説明します。
構文
- git commit [flags]
パラメーター
パラメータ | 詳細 |
---|---|
- メッセージ、-m | コミットに含めるメッセージ。このパラメータを指定すると、エディタを開くというGitの通常の動作がバイパスされます。 |
--amend | 現在ステージングされている変更を前のコミットに追加(修正)するように指定します。注意して、これは歴史を書き換えることができます! |
--no-edit | エディタを起動せずに、選択したコミットメッセージを使用します。たとえば、 git commit --amend --no-edit はコミットメッセージを変更せずにコミットを修正します。 |
--all、 - a | まだステージングされていない変更を含む、すべての変更を確定します。 |
- 日付 | コミットに関連する日付を手動で設定します。 |
- のみ | 指定されたパスのみをコミットします。これは、そうしない限り、あなたが現在行っているものをコミットしません。 |
--patch、-p | 対話型パッチ選択インタフェースを使用して、どの変更をコミットするかを選択します。 |
- 助けて | git commit manページを表示します。 |
-S [keyid]、-S --gpg-sign [= keyid]、-S --no-gpg-sign | コミットのサイン、GPGサインのコミット、countermand commit.gpgSign 設定変数 |
-n、--no-verify | このオプションは、コミット前コミットとフックをバイパスします。 フックも参照してください |
エディタを開かずにコミットする
Gitは通常、 git commit
を実行するときに( vim
やemacs
ような)エディタを開きます。コマンドラインからメッセージを指定するには、 -m
オプションを渡します。
git commit -m "Commit message here"
コミットメッセージは複数の行にまたがることができます:
git commit -m "Commit 'subject line' message here
More detailed description follows here (after a blank line)."
あるいは、複数の-m
引数を渡すこともできます。
git commit -m "Commit summary" -m "More detailed description follows here"
「 Git Commit Messageを書く方法」を参照してください。
Udacity Git Commitメッセージスタイルガイド
コミットの修正
最新のコミットがまだ公開されていない場合(上流のリポジトリにプッシュされていない場合)、コミットを修正することができます。
git commit --amend
これは、現在の段階的な変更を前のコミットに置きます。
注:これは、間違ったコミットメッセージを編集するためにも使用できます。これは、デフォルトのエディタ(通常はvi
/ vim
/ emacs
)を起動し、以前のメッセージを変更できるようにします。
コミットメッセージをインラインで指定するには:
git commit --amend -m "New commit message"
以前のコミット・メッセージを変更せずに使用するには、次のようにします。
git commit --amend --no-edit
修正するとコミットの日付は更新されますが、作成者の日付は変更されません。情報を更新するようgitに指示できます。
git commit --amend --reset-author
コミットの作成者を変更することもできます:
git commit --amend --author "New Author <[email protected]>"
注意:最新のコミットを修正すると完全に置き換えられ、前のコミットはブランチの履歴から削除されることに注意してください。これは、公開リポジトリや他の共同作業者とのブランチ上で作業する場合に留意してください。
つまり、以前のコミットがすでにプッシュされていた場合は、それを修正してから強制的にpush --force
する必要があります。
変更を直接コミットする
通常、 git add
またはgit rm
を使用して、 git commit
する前に変更をインデックスに追加する必要があります。 -a
または--all
オプションを渡すと、(変更されたファイルへの)すべての変更を、削除を含むインデックスに自動的に追加できます。
git commit -a
コミットメッセージを追加する場合は、次のようにします。
git commit -a -m "your commit message goes here"
また、2つのフラグを結合することもできます。
git commit -am "your commit message goes here"
すべてのファイルを一度にコミットする必要はありません。 -a
または--all
フラグを省略し、直接コミットするファイルを指定します。
git commit path/to/a/file -m "your commit message goes here"
複数の特定のファイルを直接コミットするには、1つまたは複数のファイル、ディレクトリ、パターンも指定できます。
git commit path/to/a/file path/to/a/folder/* path/to/b/file -m "your commit message goes here"
空のコミットの作成
一般に、空のコミット(または親と同一の状態のコミット)はエラーです。
しかし、ビルド・フック、CIシステム、およびコミットを引き起こす他のシステムをテストする場合、ダミー・ファイルを編集/タッチすることなくコミットを簡単に作成できると便利です。
--allow-empty
コミットはチェックをバイパスします。
git commit -m "This is a blank commit" --allow-empty
ステージングと変更のコミット
基礎
あなたがそれらをコミットする前に、あなたのソースコードに変更を加えた後、あなたはGitリポジトリを持つそれらの変更をステージングする必要があります。
たとえば、 README.md
とprogram.py
を変更したとしますprogram.py
git add README.md program.py
これはgitに次のコミットにファイルを追加したいことを伝えます。
次に、
git commit
これはテキストエディタを開きますが、それはしばしば vimです。 vimに精通していない場合は、 i
を押して挿入モードに入り、コミットメッセージを書き、 Esc
と:wq
をEsc
て保存して終了することができます。テキストエディタを開くのを避けるには、メッセージに-m
フラグを付けるだけです
git commit -m "Commit message here"
コミットメッセージは、しばしば特定のフォーマットルールに従います。詳細については、「適切なコミットメッセージ」を参照してください。
ショートカット
ディレクトリ内の多くのファイルを変更した場合は、それぞれのファイルを一覧表示するのではなく、次のコマンドを使用できます。
git add --all # equivalent to "git add -a"
または、 削除されたファイルを除く、すべての変更をトップレベルのディレクトリとサブディレクトリから追加するには、次のようにします 。
git add .
または、現在追跡されているファイルのみを追加する(「更新」):
git add -u
必要に応じて、段階的な変更を確認します。
git status # display a list of changed files
git diff --cached # shows staged changes inside staged files
最後に、変更をコミットします。
git commit -m "Commit message here"
代わりに、既存のファイルや削除されたファイルのみを変更し、新しいファイルを作成していない場合は、 git add
とgit commit
アクションを1つのコマンドで組み合わせることができます:
git commit -am "Commit message here"
これはgit add --all
と同じ方法ですべての変更されたファイルをステージングすることに注意してください。
機密データ
パスワードや秘密鍵などの機密データを決して決して捨てるべきではありません。このケースが発生し、変更がすでに中央サーバーにプッシュされている場合は、機密データが侵害されたものと見なします。それ以外の場合は、後でそのデータを削除することができます。迅速かつ簡単な解決策は、「BFG Repo-Cleaner」( https://rtyley.github.io/bfg-repo-cleaner/ )の使用方法です。
コマンドbfg --replace-text passwords.txt my-repo.git
はpasswords.txt
ファイルからpasswords.txt
読み込み、 ***REMOVED***
置き換えます。この操作では、リポジトリ全体の前回のコミットをすべて考慮します。
誰かのためにコミットする
他の誰かがあなたがコミットしているコードを書いたなら、あなたは--author
オプションを付けてクレジットを与えることができます:
git commit -m "msg" --author "John Smith <[email protected]>"
Gitが以前の著者を検索するために使用するパターンを提供することもできます:
git commit -m "msg" --author "John"
この場合、 "John"を含む著者との最も最近のコミットの著者情報が使用されます。
GitHubでは、上記のいずれかの方法で作成されたコミットは、大きな著者のサムネイルを表示します。
特定のファイルの変更をコミットする
特定のファイルに加えられた変更をコミットし、 git add
を使ってステージングをスキップすることができます:
git commit file1.c file2.h
または、ファイルを最初にステージングすることもできます。
git add file1.c file2.h
後でコミットしてください:
git commit
良いコミットメッセージ
git log
をたどる人が、それぞれのコミットが何であるかを簡単に理解することが重要です。正常なコミットメッセージには、通常、トラッカーのタスクまたは問題の番号と、実行された内容と理由、および場合によってはそれがどのように行われたかに関する簡潔な説明が含まれています。
より良いメッセージは次のようになります。
TASK-123: Implement login through OAuth
TASK-124: Add auto minification of JS/CSS files
TASK-125: Fix minifier error when name > 200 chars
次のメッセージはあまり役に立ちませんが、
fix // What has been fixed?
just a bit of a change // What has changed?
TASK-371 // No description at all, reader will need to look at the tracker themselves for an explanation
Implemented IFoo in IBar // Why it was needed?
コミット・メッセージが正しい気分で書かれているかどうかをテストする方法は、ブランクをメッセージに置き換えて、意味があるかどうかを確認することです。
このコミットを追加すると、私は自分のリポジトリに___します。
素晴らしいgit commitメッセージの7つのルール
- 件名と本文を空白の行で区切ります
- 件名を50文字に制限する
- 件名を大文字にする
- 件名にピリオドをつけないでください
- 件名に必須の気分を使用する
- 本文の各行を72文字で手動で折り返します。
- 体を使って何の 理由で説明するのか
特定の日付にコミットする
git commit -m 'Fix UI bug' --date 2016-07-01
--date
パラメータは、 著者の日付を設定します 。この日付は、たとえばgit log
標準出力に表示されgit log
。
コミット日付も強制するには:
GIT_COMMITTER_DATE=2016-07-01 git commit -m 'Fix UI bug' --date 2016-07-01
dateパラメータは、GNUの日付でサポートされているような柔軟な形式を受け入れます。
git commit -m 'Fix UI bug' --date yesterday
git commit -m 'Fix UI bug' --date '3 days ago'
git commit -m 'Fix UI bug' --date '3 hours ago'
日付が時刻を指定していない場合、現在の時刻が使用され、日付のみがオーバーライドされます。
コミットのためにステージングする行を選択する
1つまたは複数のファイルに多くの変更が加えられているとしますが、変更をコミットするファイルごとに、次のように変更することができます。
git add -p
または
git add -p [file]
それぞれの変更が個別に表示され、変更ごとに次のオプションのいずれかを選択するように求められます。
y - Yes, add this hunk
n - No, don’t add this hunk
d - No, don’t add this hunk, or any other remaining hunks for this file.
Useful if you’ve already added what you want to, and want to skip over the rest.
s - Split the hunk into smaller hunks, if possible
e - Manually edit the hunk. This is probably the most powerful option.
It will open the hunk in a text editor and you can edit it as needed.
これにより、選択したファイルの一部がステージングされます。次に、このような段階的な変更をすべてコミットできます。
git commit -m 'Commit Message'
ステージングまたはコミットされなかった変更は、引き続き作業ファイルに表示され、必要に応じて後でコミットできます。または、残りの変更が望ましくない場合は、次の方法で破棄できます。
git reset --hard
より小さなコミットに大きく変化することを別にすれば、このアプローチはあなたがコミットしようとしているものを見直すのにも役立ちます。それぞれの変更を個別に確認することで、あなたが書いたものをチェックする機会があり、println / logging文のような望ましくないコードを誤ってステージングすることを避けることができます。
コミットの時間の修正
コミットの時間を修正するには
git commit --amend --date="Thu Jul 28 11:30 2016 -0400"
あるいは
git commit --amend --date="now"
コミットの著者を修正する
間違った作者としてコミットした場合、それを変更してから修正することができます
git config user.name "Full Name"
git config user.email "[email protected]"
git commit --amend --reset-author
GPG署名がコミットする
あなたの鍵のIDを決定する
gpg --list-secret-keys --keyid-format LONG /Users/davidcondrey/.gnupg/secring.gpg -------------------------------------- sec 2048R/YOUR-16-DIGIT-KEY-ID YYYY-MM-DD [expires: YYYY-MM-DD]
あなたのIDは、最初のスラッシュに続く英数字の16桁のコードです。
あなたのgitの設定であなたの鍵のIDを定義する
git config --global user.signingkey YOUR-16-DIGIT-KEY-ID
バージョン1.7.9以降、git commitはコミットに署名を付ける-Sオプションを受け入れます。このオプションを使用すると、GPGパスフレーズが要求され、コミットログに署名が追加されます。
git commit -S -m "Your commit message"