1. 25 8月, 2005 26 次提交
  2. 24 8月, 2005 8 次提交
  3. 23 8月, 2005 6 次提交
    • J
      Add placeholders for missing documents. · 7fc9d69f
      Junio C Hamano 提交于
      The text does not say anything interesting, but at least the
      author list should reflect something close to reality.
      Signed-off-by: NJunio C Hamano <junkio@cox.net>
      7fc9d69f
    • J
      Merge refs/heads/master from . · 89305da8
      Junio C Hamano 提交于
      89305da8
    • J
      Introduce "reset type" flag to "git reset" · 45d197a4
      Junio C Hamano 提交于
      I have been feeling that the current behaviour of "git reset" is
      not quite optimal, but so far could not express exactly what I
      felt was wrong with it.  This patch clarifies it.
      
      There are at least two situations you may want to "reset" your
      working tree.
      
      1. You made a mess in your working tree.  You want to switch
         back to a known good state and start over.  This mess may be
         a result of your own editing, a merge that had too many
         conflicting changes that you do not feel like to resolve by
         hand at this moment, or a botched application of a patch you
         received from somewhere.
      
         In this case, you would want to have "git reset HEAD" reset
         the index file to the tree read from the HEAD commit and the
         files in the working tree to match index (i.e. "git status"
         should say "Nothing to commit", without any "unrecorded
         changes").
      
         The current behaviour leaves the files in the working tree
         intact, which requires you to run "git checkout -f".  Also
         you need to remember "rm -f" any files that the botched patch
         may have left in the working tree if the purpose of this
         "reset" is to attempt to apply it again; most likely the
         patch would fail if such a file is left behind.
      
      2. You have discovered that commits you made earlier need to be
         reorganized.  The simplest example is to undo the last
         commit, re-edit some files, and redo the commit.  Another
         simple eample is to undo the last two commits, and commit the
         changes in those two commits as a single commit.
      
         In this case, you would want to have "git reset HEAD^" reset
         the $GIT_DIR/HEAD to the commit object name of the parent
         commit of the current commit (i.e. rewinding one commit),
         leave the index file and the files in the working tree in a
         state where you can easily make a commit that records a tree
         that resembles what you have in the current index file and
         the working tree.
      
         The current behaviour is almost OK for this purpose, except
         that you need to find which files you need to manually run
         "git add" yourself.  They are files that are in the original
         HEAD commit and not in the commit you are resetting to.
      
      The default without the type flag is to do "--mixed", which is
      the current behaviour.
      
          $ git reset [ --hard | --soft | --mixed ] [ <commit-ish> ]
      
      A hard reset would be used for 1 and works in this way:
      
          (1) remember the set of paths that appear in the current
              index file (which may even have unmerged entries) and
      	the current $GIT_DIR/HEAD commit.
      
          (2) "read-tree --reset" the specified <commit-ish> (default
              to HEAD), followed by "checkout-cache -f -u -a".
      
          (3) remove any files that appear in (1) but not in
              <commit-ish> from the working tree.
      
          (4) backup $GIT_DIR/HEAD to $GIT_DIR/ORIG_HEAD and update
              $GIT_DIR/HEAD with the specified <commit-ish>.
      
          (5) remove leftover $GIT_DIR/MERGE_HEAD
      
      A soft reset would be used for 2 and works in this way:
      
          (1) Make sure that the index file is merged and we do not
              have MERGE_HEAD; otherwise it does not make sense to do
              soft reset.
      
          (2) backup $GIT_DIR/HEAD to $GIT_DIR/ORIG_HEAD and update
              $GIT_DIR/HEAD with the specified <commit-ish>.
      
      Note that with the current behaviour, "git diff" is the way to
      see what could be committed immediately after "git reset".  With
      the "soft reset" described here you would need to say "git diff
      HEAD" to find that out.
      
      I am not sure what mixed reset (the current behaviour) is good
      for.  If nobody comes up with a good use case it may not be a
      bad idea to remove it.
      Signed-off-by: NJunio C Hamano <junkio@cox.net>
      45d197a4
    • J
      Clean-up output from "git show-branch" and document it. · f5e375c9
      Junio C Hamano 提交于
      When showing only one branch a lot of default output becomes redundant,
      so clean it up a bit, and document what is shown.  Retire the earlier
      implementation "git-show-branches-script".
      Signed-off-by: NJunio C Hamano <junkio@cox.net>
      f5e375c9
    • J
      [PATCH] Add 'git show-branch'. · f76412ed
      Junio C Hamano 提交于
      The 'git show-branches' command turns out to be reasonably useful,
      but painfully slow.  So rewrite it in C, using ideas from merge-base
      while enhancing it a bit more.
      
       - Unlike show-branches, it can take --heads (show me all my
         heads), --tags (show me all my tags), or --all (both).
      
       - It can take --more=<number> to show beyond the merge-base.
      
       - It shows the short name for each commit in the extended SHA1
         syntax.
      
       - It can find merge-base for more than two heads.
      
      Examples:
      
          $ git show-branch --more=6 HEAD
      
          is almost the same as "git log --pretty=oneline --max-count=6".
      
          $ git show-branch --merge-base master mhf misc
      
          finds the merge base of the three given heads.
      
          $ git show-branch master mhf misc
      
          shows logs from the top of these three branch heads, up to their
          common ancestor commit is shown.
      
          $ git show-branch --all --more=10
      
          is poor-man's gitk, showing all the tags and heads, and
          going back 10 commits beyond the merge base of those refs.
      Signed-off-by: NJunio C Hamano <junkio@cox.net>
      f76412ed
    • J
      [PATCH] Add a new extended SHA1 syntax <name>~<num> · 4f7599ac
      Junio C Hamano 提交于
      The new notation is a short-hand for <name> followed by <num>
      caret ('^') characters.  E.g. "master~4" is the fourth
      generation ancestor of the current "master" branch head,
      following the first parents; same as "master^^^^" but a bit
      more readable.
      
      This will be used in the updated "git show-branch" command.
      Signed-off-by: NJunio C Hamano <junkio@cox.net>
      4f7599ac