[解決済み】Gitで複数のコミットの著者名やコミッター名、Eメールを変更する方法は?
質問
学校のコンピュータで簡単なスクリプトを書いて、その変更をGitにコミットしていました(自宅のコンピュータからクローンしたペンドライブ内のレポにコミットしていました)。何度かコミットした後、私は自分が root 権限でコミットしていることに気づきました。
これらのコミットの著者を私の名前に変更する方法はありますか?
解決方法は?
<ブロッククオート
この回答では
git-filter-branch
に対して
ドキュメント
は、このような警告を出すようになりました。
git filter-branch にはたくさんの落とし穴があり、意図した歴史の書き換えを明らかにしないままにしてしまうことがあります (そして、このようなひどいパフォーマンスのため、そのような問題を調査する時間がほとんどとれません)。これらの安全性とパフォーマンスの問題は後方互換性をもって修正することができないため、その使用は推奨されません。以下のような別の履歴フィルタリングツールを使用してください。 git フィルターレポ . それでもgit filter-branchを使用する必要がある場合は、次の項目をよくお読みください。 安全性 (そして パフォーマンス を読んで、フィルターブランチの地雷について学び、そこに書かれている危険性を可能な限り回避するようにしましょう。
作者(またはコミッター)を変更すると、すべての履歴を書き直す必要があります。 もしあなたがそれでいいのなら、そしてその価値があると思うなら、以下をチェックしてみてください。 git フィルターブランチ . manページにはいくつかの例が掲載されていますので、参考にしてください。 また、環境変数を使って、作者名、コミッター名、日付などを変更できることにも注意してください。-- の "環境変数" のセクションを参照してください。 ギットマニュアルページ .
具体的には、間違った著者名と電子メールをすべて修正することができます。 すべてのブランチとタグについて をこのコマンドで実行します(ソースはこちら)。 GitHubヘルプ ):
#!/bin/sh
git filter-branch --env-filter '
OLD_EMAIL="[email protected]"
CORRECT_NAME="Your Correct Name"
CORRECT_EMAIL="[email protected]"
if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ]
then
export GIT_COMMITTER_NAME="$CORRECT_NAME"
export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"
fi
if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ]
then
export GIT_AUTHOR_NAME="$CORRECT_NAME"
export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL"
fi
' --tag-name-filter cat -- --branches --tags
代替履歴フィルタリングツールを使用する場合
git filter-repo
を使用する場合、まずそれをインストールし
git-mailmap
の書式にしたがって
ギットメールマップ
.
Proper Name <[email protected]> Commit Name <[email protected]>
そして、作成したメールマップを使ってfilter-repoを実行します。
git filter-repo --mailmap git-mailmap
関連
-
[解決済み] Git で直近のローカルコミットを取り消すには?
-
[解決済み] Gitブランチをローカルやリモートで削除するには?
-
[解決済み] git pull」と「git fetch」の違いは何ですか?
-
[解決済み] 現在のGit作業ツリーからローカル(未追跡)ファイルを削除する方法
-
[解決済み] リモート Git リポジトリの URI (URL) を変更するには?
-
[解決済み] ローカルの Git リポジトリが元々クローンされた URL を特定するにはどうすればよいですか。
-
[解決済み] Git で現在のブランチ名を取得するには?
-
[解決済み] ある特定のコミットのコミット作者を変更する方法は?
-
[解決済み] Gitのプッシュを正しく強制する方法は?
-
[解決済み】Gitバージョン管理でファイルの変更履歴を見る
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Git:コミットに何も追加されていないが、未追跡のファイルが存在する
-
[解決済み】git revert <hash> not allowed due to a merge but no -m option was given.
-
[解決済み】ERROR: Error cloning remote repo 'origin'.
-
[解決済み】ローカルに変更があるにもかかわらず、git pushが「すべて最新」と言う
-
Gitのプッシュでエラーが発生! [リモート拒否] master -> master (pre-receive hook declined) error: failed to push some refs to .......
-
[解決済み] リモートの <ブランチ名> とマージするように設定されていますが、そのような参照は取得されませんでしたか?
-
[解決済み】ローカルGitブランチとそのリモートブランチを比較する方法
-
[解決済み] ERROR: リモートレポ 'origin' のクローン作成に失敗しました。
-
[解決済み] git でディレクトリ階層が異なる 2 つのブランチをマージするには?
-
[解決済み] "fatal: This operation must be run in work tree." というメッセージが表示されるのはなぜですか?