path: root/
AgeCommit message (Collapse)Author
2006-08-13Merge branch 'master' into js/c-merge-recursiveJunio C Hamano
Adjust to hold_lock_file_for_update() change on the master.
2006-07-31rebase: Make the fast-fowarding message more user-friendly by using branch ↵Robert Shearman
names instead of SHA1 IDs. Signed-off-by: Robert Shearman <> Signed-off-by: Junio C Hamano <>
2006-07-31rebase: Fix the detection of fast-forwarding of the current branch to upstream.Robert Shearman
Previously, a rebasing operation with on a branch that is just tracking an upstream branch would output a confusing "Nothing to do" due to no patches being given to git-am. The test brings the behaviour back into line with that of just before e646c9c8c0aa995eac284ea0a2117add19c4461c. Signed-off-by: Robert Shearman <> Signed-off-by: Junio C Hamano <>
2006-07-31Merge branch 'js/read-tree' into js/c-merge-recursiveJunio C Hamano
* js/read-tree: (107 commits) read-tree: move merge functions to the library read-trees: refactor the unpack_trees() part tar-tree: illustrate an obscure feature better git.c: allow alias expansion without a git directory setup_git_directory_gently: do not barf when GIT_DIR is given. Build on Debian GNU/kFreeBSD Call setup_git_directory() much earlier Call setup_git_directory() early Display an error from update-ref if target ref name is invalid. Fix http-fetch t4103: fix binary patch application test. git-apply -R: binary patches are irreversible for now. Teach git-apply about '-R' Makefile: ssh-pull.o depends on ssh-fetch.c log and diff family: honor config even from subdirectories git-reset: detect update-ref error and report it. lost-found: use fsck-objects --full Teach git-http-fetch the --stdin switch Teach git-local-fetch the --stdin switch Make pull() support fetching multiple targets at once ...
2006-07-14recur vs recursive: help testing without touching too many stuff.Junio C Hamano
During git-merge-recur development, you could set an environment variable GIT_USE_RECUR_FOR_RECURSIVE to use WIP recur in place of the recursive strategy. Signed-off-by: Junio C Hamano <>
2006-07-14Status update on merge-recursive in CJohannes Schindelin
This is just an update for people being interested. Alex and me were busy with that project for a few days now. While it has progressed nicely, there are quite a couple TODOs in merge-recursive.c, just search for "TODO". For impatient people: yes, it passes all the tests, and yes, according to the evil test Alex did, it is faster than the Python script. But no, it is not yet finished. Biggest points are: - there are still three external calls - in the end, it should not be necessary to write the index more than once (just before exiting) - a lot of things can be refactored to make the code easier and shorter BTW we cannot just plug in git-merge-tree yet, because git-merge-tree does not handle renames at all. This patch is meant for testing, and as such, - it compile the program to git-merge-recur - it adjusts the scripts and tests to use git-merge-recur instead of git-merge-recursive - it provides "TEST", a script to execute the tests regarding -recursive - it inlines the changes to read-cache.c (read_cache_from(), discard_cache() and refresh_cache_entry()) Brought to you by Alex Riesen and Dscho Signed-off-by: Junio C Hamano <>
2006-07-14Record rebase changes as 'rebase' in the reflog.Shawn Pearce
Signed-off-by: Shawn O. Pearce <> Signed-off-by: Junio C Hamano <>
2006-07-08Using 'perl' in *.shMichal Rokos
Some GIT's shell script are using bare 'perl' for perl invocation. Use @@PERL@@ symbol and replace it with PERL_PATH_SQ everywhere. Signed-off-by: Michal Rokos <> Signed-off-by: Junio C Hamano <>
2006-06-28rebase: check for errors from git-commitEric Wong
commit does not always succeed, so we'll have to check for it in the absence of set -e. This fixes a regression introduced in 9e4bc7dd1bb9d92491c475cec55147fa0b3f954d Signed-off-by: Eric Wong <> Signed-off-by: Junio C Hamano <>
2006-06-28rebase: get rid of outdated MRESOLVEMSGEric Wong
There was a time when rebase --skip didn't work when used with --merge, but that is no more so we don't need that message anymore. Signed-off-by: Eric Wong <> Signed-off-by: Junio C Hamano <>
2006-06-27Fix expr usage for FreeBSDDennis Stosberg
Some implementations of "expr" (e.g. FreeBSD's) fail, if an argument starts with a dash. Signed-off-by: Dennis Stosberg <> Signed-off-by: Junio C Hamano <>
2006-06-25rebase: allow --skip to work with --mergeEric Wong
Now that we control the merge base selection, we won't be forced into rolling things in that we wanted to skip beforehand. Also, add a test to ensure this all works as intended. Signed-off-by: Eric Wong <> Signed-off-by: Junio C Hamano <>
2006-06-25rebase: cleanup rebasing with --mergeEric Wong
We no longer have to recommit each patch to remove the parent information we're rebasing since we're using the low-level merge strategies directly instead of git-merge. Signed-off-by: Eric Wong <> Signed-off-by: Junio C Hamano <>
2006-06-25rebase: allow --merge option to handle patches merged upstreamEric Wong
Enhance t3401-rebase-partial to test with --merge as well as the standard am -3 strategy. Signed-off-by: Eric Wong <> Signed-off-by: Junio C Hamano <>
2006-06-22rebase --merge: fix for rebasing more than 7 commits.Junio C Hamano
Instead of using 4-digit numbers to name commits being rebased, just use "cmt.$msgnum" string, with $msgnum as a decimal number without leading zero padding. This makes it possible to rebase more than 9999 commits, but of more practical importance is that the earlier code used "printf" to format already formatted $msgnum and barfed when it counted up to 0008. In other words, the old code was incapable of rebasing more than 7 commits, and this fixes that problem. Signed-off-by: Junio C Hamano <>
2006-06-21rebase: error out for NO_PYTHON if they use recursive mergeEric Wong
recursive merge relies on Python, and we can't perform rename-aware merges without the recursive merge. So bail out before trying it. The test won't work w/o recursive merge, either, so skip that, too. Signed-off-by: Eric Wong <> Signed-off-by: Junio C Hamano <>
2006-06-21rebase: Allow merge strategies to be used when rebasingEric Wong
This solves the problem of rebasing local commits against an upstream that has renamed files. Signed-off-by: Eric Wong <> Signed-off-by: Junio C Hamano <>
2006-05-21git-rebase: use canonical A..B syntax to format-patchJunio C Hamano
Signed-off-by: Junio C Hamano <>
2006-05-14Make git rebase interactive help match documentation.Sean
Signed-off-by: Sean Estabrooks <> Signed-off-by: Junio C Hamano <>
2006-04-27Add --continue and --abort options to git-rebase.sean
git rebase [--onto <newbase>] <upstream> [<branch>] git rebase --continue git rebase --abort Add "--continue" to restart the rebase process after manually resolving conflicts. The user is warned if there are still differences between the index and the working files. Add "--abort" to restore the original branch, and remove the .dotest working files. Some minor additions to the git-rebase documentation. [jc: fix that applies to the maintenance track has been dealt with separately.] Signed-off-by: Junio C Hamano <>
2006-04-26rebase: typofix.Junio C Hamano
Noticed by Sean. Signed-off-by: Junio C Hamano <>
2006-04-13Shell utilities: Guard against expr' magic tokens.Mark Wooding
Some words, e.g., `match', are special to expr(1), and cause strange parsing effects. Track down all uses of expr and mangle the arguments so that this isn't a problem. Signed-off-by: Mark Wooding <> Signed-off-by: Junio C Hamano <>
2006-02-22Fix typo in Riedy
s/upsteram/upstream in Signed-off-by: Jason Riedy <> Signed-off-by: Junio C Hamano <>
2006-02-22git-rebase: Clarify usage statement and copy it into the actual documentation.Carl Worth
I found a paper thin man page for git-rebase, but was quite happy to see something much more useful in the usage statement of the script when I went there to find out how this thing worked. Here it is cleaned up slightly and expanded a bit into the actual documentation. Signed-off-by: Carl Worth <> Signed-off-by: Junio C Hamano <>
2006-02-18Merge branch 'jc/rebase-limit'Junio C Hamano
* jc/rebase-limit: rebase: allow rebasing onto different base.
2006-02-15rebase: allow rebasing onto different base.Junio C Hamano
This allows you to rewrite history a bit more flexibly, by separating the other branch name and new branch point. By default, the new branch point is the same as the tip of the other branch as before, but you can specify where you graft the rebased branch onto. When you have this ancestry graph: A---B---C topic / D---E---F---G master $ git rebase --onto master~1 master topic would rewrite the history to look like this: A'\''--B'\''--C'\'' topic / D---E---F---G master Signed-off-by: Junio C Hamano <>
2006-02-13rebase: allow a hook to refuse rebasing.Junio C Hamano
This lets a hook to interfere a rebase and help prevent certain branches from being rebased by mistake. A sample hook to show how to prevent a topic branch that has already been merged into publish branch. Signed-off-by: Junio C Hamano <>
2005-12-15Bugfixes for git-rebaseLukas Sandström
Fix bugs in git-rebase wrt rebasing another branch than the current HEAD, rebasing with a dirty working dir, and rebasing a proper decendant of the target branch. [jc: with a bit of hand-merging] Signed-off-by: Lukas Sandström <> Signed-off-by: Junio C Hamano <>
2005-12-14rebase: do not get confused in fast-forward situation.Junio C Hamano
When switching to another branch and rebasing it in a one-go, it failed to update the variable that holds the branch head, and did not detect fast-forward situation correctly. Signed-off-by: Junio C Hamano <>
2005-12-14git-rebase: Usage string clean-up, emit usage string at incorrect
Signed-off-by: Fredrik Kuivinen <> Signed-off-by: Junio C Hamano <>
2005-11-28rebase: one safety net, one bugfix and one optimization.Junio C Hamano
When a .dotest from a previously failed rebase or patch application exists, rebase got confused and tried to apply mixture of what was already there and what is being rebased. Check the existence of the directory and barf. It failed with an mysterious "fatal: cannot read mbox" message if the branch being rebased is fully in sync with the base. Also if the branch is a proper descendant of the base, there is no need to run rebase logic. Prevent these from happening by checking where the merge-base is. Signed-off-by: Junio C Hamano <>
2005-11-25git-sh-setup: die if outside git repository.Junio C Hamano
Now all the users of this script detect its exit status and die, complaining that it is outside git repository. So move the code that dies from all callers to git-sh-setup script. Signed-off-by: Junio C Hamano <>
2005-11-18Rewrite rebase to use git-format-patch piped to git-am.Junio C Hamano
The current rebase implementation finds commits in our tree but not in the upstream tree using git-cherry, and tries to apply them using git-cherry-pick (i.e. always use 3-way) one by one. Which is fine, but when some of the changes do not apply cleanly, it punts, and punts badly. Suppose you have commits A-B-C-D-E since you forked from the upstream and submitted the changes for inclusion. You fetch from upstream head U and find that B has been picked up. You run git-rebase to update your branch, which tries to apply changes contained in A-C-D-E, in this order, but replaying of C fails, because the upstream got changes that touch the same area from elsewhere. Now what? It notes that fact, and goes ahead to apply D and E, and at the very end tells you to deal with C by hand. Even if you somehow managed to replay C on top of the result, you would now end up with ...-B-...-U-A-D-E-C. Breaking the order between B and others was the conscious decision made by the upstream, so we would not worry about it, and even if it were worrisome, it is too late for us to fix now. What D and E do may well depend on having C applied before them, which is a problem for us. This rewrites rebase to use git-format-patch piped to git-am, and when the patch does not apply, have git-am fall back on 3-way merge. The updated diff/patch pair knows how to apply trivial binary patches as long as the pre- and post-images are locally available, so this should work on a repository with binary files as well. The primary benefit of this change is that it makes rebase easier to use when some of the changes do not replay cleanly. In the "unapplicable patch in the middle" case, this "rebase" works like this: - A series of patches in e-mail form is created that records what A-C-D-E do, and is fed to git-am. This is stored in .dotest/ directory, just like the case you tried to apply them from your mailbox. Your branch is rewound to the tip of upstream U, and the original head is kept in .git/ORIG_HEAD, so you could "git reset --hard ORIG_HEAD" in case the end result is really messy. - Patch A applies cleanly. This could either be a clean patch application on top of rewound head (i.e. same as upstream head), or git-am might have internally fell back on 3-way (i.e. it would have done the same thing as git-cherry-pick). In either case, a rebased commit A is made on top of U. - Patch C does not apply. git-am stops here, with conflicts to be resolved in the working tree. Yet-to-be-applied D and E are still kept in .dotest/ directory at this point. What the user does is exactly the same as fixing up unapplicable patch when running git-am: - Resolve conflict just like any merge conflicts. - "git am --resolved --3way" to continue applying the patches. - This applies the fixed-up patch so by definition it had better apply. "git am" knows the patch after the fixed-up one is D and then E; it applies them, and you will get the changes from A-C-D-E commits on top of U, in this order. I've been using this without noticing any problem, and as people may know I do a lot of rebases. Signed-off-by: Junio C Hamano <>
2005-09-28Use git-update-ref in scripts.Junio C Hamano
This uses the git-update-ref command in scripts for safer updates. Also places where we used to read HEAD ref by using "cat" were fixed to use git-rev-parse. This will matter when we start using symbolic references. Signed-off-by: Junio C Hamano <>
2005-09-08Big tool rename.Junio C Hamano
As promised, this is the "big tool rename" patch. The primary differences since 0.99.6 are: (1) git-*-script are no more. The commands installed do not have any such suffix so users do not have to remember if something is implemented as a shell script or not. (2) Many command names with 'cache' in them are renamed with 'index' if that is what they mean. There are backward compatibility symblic links so that you and Porcelains can keep using the old names, but the backward compatibility support is expected to be removed in the near future. Signed-off-by: Junio C Hamano <>