简体   繁体   中英

Git interactive rebase no commits to pick

I'm on master and I did rebase -i <my_branch>

Got this:

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.
#

I would like to pick some commits not all as some of them are not welcome. Also how do you work when you want to keep some files or changes always 'local' to some branch? Is there some helper like .gitignore ?

Like a non-interactive rebase, you have to rebase onto a particular commit.

With a non-interactive rebase, if you supply a direct ancestor of the current commit then you aren't changing anything; with an interactive rebase you can edit commits after the commit that you are rebasing onto, even if the commit is a direct ancestor of your current commit but you do have to specify this commit that you want to edit onwards from.

I don't know the details of your situation but you might want something like this:

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

or

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

rebase -i without a commit range will not display any commits. to rebase the last, say, 7 commits use the following:

git rebase -i HEAD~7

be careful though, that this will rewrite history. don't do it, if the commits are already pushed


for your second question: have a branch with your changes (basically a configuration branch) and regularly merge the other branches into it. this way the changes will not move to other branches

When you're using git rebase -i , you usually have to specify, since which commit do you want to perform the rebase. So, if, for example, you want to remove some of the commits among the last 10 to the current branch, you would do:

git rebase -i HEAD~10

As others have mentioned, you need to specify a commit range.

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

(Assuming that you are on the same branch as the commit to be edited)--

To specify the commits, you can use the HEAD~5 shorthands or use sha checksum (which you can get by git log )

In fact any commit will do if it is prior/ancestor to the commits which you want to delete/edit/reword in the tree. This will list all the commits since the <latest-commit-to-be-retained> in the editor(defined in your git config). From the list, to delete a commit, just delete that particular line, save and exit (vi habbits :) )the file+editor, and do git rebase --continue

For the second answer, I agree with knittl

have a branch with your changes (basically a configuration branch) and regularly merge the other branches into it. this way the changes will not move to other branches

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM