メーリングリスト+ git format-patch
+ git apply
作成者を生成できます!=コミッター
パッチがあるLinuxカーネルのようなプロジェクトでは:
作成者とコミッターが異なる単一の新しいコミットを生成する:
- 作者はパッチを書いた人です
- コミッターはプロジェクトのメンテナーであり、パッチをマージした人です
たとえば、このランダムに選択されたパッチと対応するコミットを参照してください。
GitHubやGitLabなどのGit Webインターフェースは、作成者を生成する場合としない場合があります!=コミッター
Git(Hub | Lab)は同じマシン上でアップストリームリポジトリとフォークリポジトリの両方を保持するため、次のいずれかを含め、ローカルで実行できるすべてのことを自動的に実行できます。
マージコミットを作成します。
著者を生成しません!=コミッター。
SHAまたは新しいコミットをそのまま保持し、新しいコミットを作成します。
* Merge commit (committer == author == project maintainer)
|\
| * Feature commit (committer == author == contributor)
|/
* Old master (random committer and author)
歴史的に、これはGitHubで利用可能な最初の方法でした。
ローカルでは、これはで行われgit merge --no-ff
ます。
これにより、プルリクエストごとに2つのコミットが生成され、git履歴にフォークが保持されます。
上にリベース master
GitHubはコミットをハッキングして、マージボタンを押した人をコミッター==に設定します。これは必須ではなく、デフォルトでによってローカルで行われることもありませんgit rebase
が、プロジェクトのメンテナに説明責任を与えます。
gitツリーは次のようになります。
* Feature commit (committer == maintainer, author == contributor)
|
* Old master (random committer and author)
これは、git apply
電子メールのパッチとまったく同じです。
現在GitHubで:
- マージボタンのドロップダウンからマージする方法を選択します
- メソッドは、所有者がリポジトリ設定で有効または無効にすることができます
https://help.github.com/articles/about-merge-methods-on-github/
新しいコミットのコミッターを設定するには?
私が見つけた最高のものは、環境変数を使用してコミッターをオーバーライドすることでした:
GIT_COMMITTER_NAME='a' GIT_COMMITTER_EMAIL='a' git commit --author 'a <a>'
特定のコミットのコミッターとコミット日付を取得するにはどうすればよいですか?
デフォルトでは、著者データのみが表示されますgit log
。
コミッターの日付を表示するには、次のいずれかを実行できます。
具体的には、ログをフォーマットします。
git log --pretty='%cn %cd' -n1 HEAD
どこcn
にcd
立つCommitter Name
とCommitter Date
fuller
事前定義された形式を使用します。
git log --format=fuller
参照:「コミットログ」を表示するように「git log」を設定する方法
低レベルにして、コミットデータ全体を表示します。
git cat-file -p HEAD
新しいコミットのコミッター日付を設定する方法は?
git commit --date
著者の日付のみを設定します。コミッターの日付については、環境変数を使用して見つけることができました。
GIT_COMMITTER_DATE='2000-01-01T00:00:00+0000' git commit --date='2000-01-01T00:00:00+0000'
参照:Gitでの作者とコミッターの違いは何ですか?
Gitはどのようにして作成者とコミッターを内部的に保存しますか?
参照:git commitオブジェクトのファイル形式は何ですか?
基本的に、コミットはテキストファイルであり、2行で区切られたフィールドが含まれています。
author {author_name} <{author_email}> {author_date_seconds} {author_date_timezone}
committer {committer_name} <{committer_email}> {committer_date_seconds} {committer_date_timezone}
これにより、両方がコミットオブジェクト内の2つの完全に独立したデータエントリであることが明確になります。