Gitインタラクティブリベースを選択するコミットなし


105

私はマスターです 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ますか?

回答:


85

非インタラクティブなリベースと同様に、特定のコミットにリベースする必要があります。

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

私はあなたの状況の詳細を知りませんが、あなたはこのようなものが欲しいかもしれません:

# 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("-"_) !

HEAD~*構文を使用するとうまくいきましたが、最初の構文ではうまくいきませんでした。
Dev Yego

25

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

git rebase -i HEAD~7

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


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


9

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

git rebase -i HEAD~10

6

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

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

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

コミットを指定するには、HEAD〜5の省略形を使用するか、shaチェックサムを使用します(これはで取得できますgit log)。

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

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.