問題タブ [git-amend]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
git - Git - デタッチされたヘッド、コミットの修正、およびプッシュ時の遅れに関する問題?
私たちのチームは git サブモジュールを使用していますが、プルでいくつかのエラーが発生しました。これは、最近更新したにもかかわらず遅れていることを示しています (それ以来、リモート コミット/プッシュはありません)。これは、次の 2 つのシナリオで発生します。
HEAD
サブモジュールで切り離されている、または- 使用時
git commit --amend
。
これらのことが起こったシナリオを示してみます。私の質問は、特定のエラーがどこにあるのか、そしてそれらを修正するための簡単な方法(私たちの汚いハックよりも優れている)を知っている人はいますか?
シナリオ 1 - 切り離されたHEAD
- 次のいずれかを発行します。
git clone --recursive $REPO $DIR
git sfe 'git pull origin master'
git submodule update --recursive
HEAD
- 孤立した状態になりがちなので、実際にはあまり使用していません
master
を使用して、すべてのブランチがオンになっている(または少なくとも切り離されたHEAD
状態ではない)かどうかを確認しますgit sfe 'git branch'
。そうでない場合は、 を発行しgit sfe 'git checkout master'
ます。(現在、マージの必要性を最小限に抑え、起動して実行するために、全員 (〜4 人) が master で開発しています)- detached
HEAD
にいる場合は、変更を加えてから (ステージングされていないファイルが作業ディレクトリにとどまるように) に切り替え、master
それらの変更をステージングしてコミットし、プッシュを試みます。Git は、遅れているためプルする必要があると言います。これは次の方法で修正できます。- 「ねじ込み」と言って、完全にクリーンなスーパーモジュールをチェックアウトし、 detached
HEAD
にいないことを確認し、そこから作業します - リビジョン番号を取得し
git checkout master
、次に a を発行して、git merge $REV
現在の変更を再マージするという苦痛を経験し、そこにあると思われる過去の変更と競合します。
- 「ねじ込み」と言って、完全にクリーンなスーパーモジュールをチェックアウトし、 detached
シナリオ 2 - コミットの修正
- これにはあまりありません。私は自分で開発し、 を発行し
git commit --amend
、それらの変更をプッシュしようとします。ただし、これを行うと、遅れているためマージする必要があることがわかります。私がそうすると、現在のすべての変更を過去のリビジョンと再マージするという苦痛なプロセスが再び発生します。- これは、もはやコミットではないコミットに基づいたものをプッシュしようとしているため
HEAD
ですか?
- これは、もはやコミットではないコミットに基づいたものをプッシュしようとしているため
注:git sfe
のエイリアスですgit submodule foreach --recursive
(マゾヒズムのためだけに、ネストされたサブモジュールがいくつかあります [というか、コードを分離できるようにする必要があり、サブサブモジュールの配置が理にかなっています])
git - 修正するものがないのに、なぜgit amendが警告しないのですか?
コミットの直後にファイルに変更を加えてから実行git commit --amend
してからすばやく実行するという間違いを犯すことがよくあります。git push -f origin master
問題は、明らかに、私が走ったことがないということgit add foo.md
です。したがって、私の修正は、実際にはコミットされたコードのいずれも修正しませんでした。
質問は:変更なしでコミットを修正するときにgitが警告しないのはなぜですか?さらに良いことに、なぜそれが正常に完了するのですか?特定のコミットのタイムスタンプを変更する際の「タッチ」のように動作するだけですか?
git - git commit を修正不可能にすることは可能ですか?
特定の git コミットが修正されないように保護する方法はありますか?
私が考えられるのは、「修正不可能な」SHA のリストに対して SHA をチェックする pre-commit フックを作成することだけです。標準/より良い方法を知っている人はいますか?
ありがとう。
git - gitcommit--メッセージを要求せずに修正
時々、同じメッセージを使用してコミット修正を行っていることに気付きます。
通常、私は次のことを行います。
- ステージング領域に変更を追加します。
- する
git commit --amend
。 - テキストエディタが開くのを待ちます。
- 保存して閉じます(メッセージを変更せずに)。
とにかく、コミットメッセージを変更したくないことをgitに伝えることはできますか(テキストエディタを開いてメッセージを保存する手順をスキップします)?好き:
- ステージング領域に変更を追加します。
- 別のメッセージを要求せずに、ステージング領域を最後のコミットに修正するようにgitに指示します。
を実行することで、gitがテキストエディタを起動するのを回避できることを私は知っていgit commit --amend -m "<message>"
ます。しかし、この方法では、メッセージを再入力する必要があります。
git - Gerrit で新しいパッチセットを作成するには?
私は Gerrit を初めて使用し、新しい変更が送信されたときに新しいパッチを作成したいと考えています。このガイドでGerritをセットアップしましたhttps://review.typo3.org/Documentation/install-quick.html
次に、http: //gerrit.googlecode.com/svn/documentation/2.0/user-changeid.htmlを使用して新しいパッチを作成しChange-Id
、コミット メッセージの下部に行を追加しようとしました。
しかし、新しいパッチセットではなく、新しい変更を取得しています。誰でも私を助けることができますか?
ありがとう
git - プッシュされたコミット メッセージの修正
コミットをプッシュしたところ、コミットメッセージを変更する必要があることに気付きました。
だから私のローカルレポで私はした:
しかし、これをプッシュしようとすると、大量のエラーメッセージが表示されました
メッセージの修正方法が間違っていたのでしょうか? 結局、すべてのリポジトリをリセットしてから、新しいメッセージで再度コミットする必要がありました。
だから私の質問は、すでにプッシュされたもののコミットメッセージを修正する適切な方法は何ですか?
git - コミットのリポジトリ全体のリベース
この一連のコミットを考えてみましょう。
ブランチから始めて、時々からfoo
新しいブランチを作成します。今、ブランチで commit に取り組んでいると、 commit を間違えたことに気づきました。それで、編集のためにコミットを実行して開きます。変更を加えてステージングし、実行します。bar
foo
h
bar
c
git rebase
c
git rebase --continue
今、私のbar
ブランチが更新されました。ただし、foo
ブランチはまだコミットの元の欠陥のあるバージョンを指していc
ます。
特定のコミットへのポインターを含むすべてのブランチが識別され、一度に 1 つずつリベースされる、レポ全体のリベースを実行する方法はありますか?
私は手動の方法を知っています-fooをリベースし、新しいSHAを挿入/チェリーピックしますが、どのブランチがコミットを参照しているかを知る必要があります。しかも手作業が必要です。
git - Git は修正を保存しますか?
それらが に存在することは知っていますがgit reflog
、コミットをリモート リポジトリにプッシュした場合、修正してからgit push --force
(警告:pushing --force
リモート リポジトリへの送信は通常避ける必要があります)、上書きしたコミットはどこかに存在しますか?
git - git commit --amend は gerrit とどのように連携しますか?
5 つのファイルをステージングしてコミットし、それを gerrit にプッシュしましたが、それが git にマージされる前に、そのうちの 3 つを更新してから、最後のコミットに git commit --amend し、再度 gerrit にプッシュした場合は、この 2 番目のパスを実行します他の 2 つのファイルに更新が含まれていますか?