web-dev-qa-db-ja.com

Git対話型リベースでコミットするコミットはありません

マスターにいます。rebase -i <my_branch>

これを得ました:

noop

# Rebase c947bec..7e259d3 onto c947bec
#
# Commands:
#  p, pick = use commit
#  r, reword = use commit, but edit the commit message
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#  f, fixup = like "squash", but discard this commit's log message
#  x <cmd>, exec <cmd> = Run a Shell command <cmd>, and stop if it fails
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#

一部のコミットは歓迎されないため、すべてではなく、いくつかのコミットを選択したいと思います。また、いくつかのファイルまたは変更を常にいくつかのブランチに対して「ローカル」にしたい場合はどうしますか? .gitignoreのようなヘルパーはありますか?

91
Lukasz

非対話型のリベースと同様に、特定のコミットにリベースする必要があります。

非対話型のリベースでは、現在のコミットの直接の祖先を指定しても、何も変更されません。インタラクティブなリベースを使用すると、コミットが現在のコミットの直接の祖先である場合でも、リベースするコミットの後にコミットを編集できますが、それ以降に編集するこのコミットを指定する必要があります。

あなたの状況の詳細はわかりませんが、次のようなものが欲しいかもしれません。

# Opportunity to edit or Prune commits between Origin/master and current branch
git rebase -i Origin/master

または

# Edit some of the last ten commits
git rebase -i HEAD~10 # Note that ~10 uses a tilde("~") not a dash("-"_) !
73
CB Bailey

rebase -iコミット範囲がない場合、コミットは表示されません。最後の、たとえば7つのコミットをリベースするには、次を使用します。

git rebase -i HEAD~7

ただし、これにより履歴が書き換えられることに注意してください。コミットがすでにプッシュされている場合は、それをしないでください


2番目の質問:変更を加えたブランチ(基本的には構成ブランチ)を用意し、他のブランチを定期的にマージしますinto it。このようにして、変更は他のブランチに移動しません

24
knittl

git rebase -iを使用している場合、通常は指定する必要があります。どのコミットからリベースを実行するのかを指定する必要があります。そのため、たとえば、現在のブランチに対する最後の10件のコミットの一部を削除する場合は、次のようにします。

git rebase -i HEAD~10
8
svick

他の人が述べたように、コミット範囲を指定する必要があります。

git rebase -i <latest-commit-to-be-retained>

(編集するコミットと同じブランチにいると仮定して)-

コミットを指定するには、HEAD〜5ショートハンドを使用するか、shaチェックサムを使用できます(git logで取得できます)。

実際、ツリーで削除/編集/書き直したいコミットの前/先祖である場合、どのコミットでも実行されます。これにより、エディターの<latest-commit-to-be-retained>(git configで定義)以降のすべてのコミットが一覧表示されます。リストから、コミットを削除するには、その特定の行を削除し、保存して終了し(vi habbits :))、ファイル+エディターを実行し、git rebase --continueを実行します。

2番目の答えについては、私はknittlに同意します

変更を含むブランチ(基本的には構成ブランチ)を用意し、他のブランチを定期的にマージします。このようにして、変更は他のブランチに移動しません

4
0xc0de