As described in https://github.com/twosigma/git-meta/issues/561, when there is a tree-level conflict for a submodule,
git checkout cannot resolve the problem. After running
git checkout $conflicted-submodule, you get the following problem when you try to add it:
$ git add s error: unable to index file s fatal: updating files failed
To make matters worse, if you run
git meta status, you get no indication that the submodule is conflicted.
As with normal
rebase -i operates only on meta commits; it does not show information about submodule commits or allow them to be manipulated (doing so would make the command drastically more complicated and it's not even clear what it would look like).
- pick -- just use existing rebase logic
- reword -- similar to pick but allow user to change commit message (see below)
- edit -- pauses before making meta commit, does make submodule commits
- squash -- squash meta and associated sub commits into one
- fixup -- like squash
- exec -- execute a command
- drop -- similar to deleting a commit, just don't use it
As long as we have a parser for the file format, we can just leave it in the
meta-sequencer directory as a record of what to do with each commit.
Sample file format
pick 18c456a message # Rebase 91e3416..18c456a onto 91e3416 (1 command) # # 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, exec = run command (the rest of the line) using shell # d, drop = remove commit # # These lines can be re-ordered; they are executed from top to bottom. # # If you remove a line here THAT COMMIT WILL BE LOST. # # However, if you remove everything, the rebase will be aborted. # # Note that empty commits are commented out
Sample reword file format
message # Please enter the commit message for your changes. Lines starting # with '#' will be ignored, and an empty message aborts the commit. # # interactive rebase in progress; onto 91e3416 # Last command done (1 command done): # reword 18c456a message # No commands remaining. # You are currently rebasing branch 'master' on '91e3416'. # # Changes to be committed: # new file: 2 #