]> git.phdru.name Git - git-wiki.git/blobdiff - pep-git.txt
There are many different prompts out there
[git-wiki.git] / pep-git.txt
index 624efb152c4e89da7ab04a5993e0dacb81b19cc9..985ecc4e5a1fb102f45a5a6880d8c46b71de00de 100644 (file)
@@ -674,7 +674,31 @@ Wiki.
 ReReRe
 ======
 
-https://git-scm.com/book/en/Git-Tools-Rerere
+Rerere is a mechanism that helps to resolve repeated merge conflicts.
+The most frequent source of recurring merge conflicts are topic
+branches that are merged into mainline and then the merge commits are
+removed; that's often performed to test the topic branches and train
+rerere; merge commits are removed to have clean history and finish a
+topic branch with only one last merge commit.
+
+Rerere works by remembering the states of tree before and after a
+successful commit. That way rerere can automatically resolve conflicts
+if they appear in the same files.
+
+Rerere can be used manually with ``git rerere`` command but most often
+it's used automatically. Enable rerere with these commands in a
+working tree::
+
+    $ git config rerere.enabled true
+    $ git config rerere.autoupdate true
+
+You don't need to turn rerere on globally - you don't want rerere in
+bare repositories or repositories without branches; you only need
+rerere in repos where you often perform merges and resolve merge
+conflicts.
+
+See `Rerere <https://git-scm.com/book/en/Git-Tools-Rerere>`_ in The
+Book.
 
 
 Database maintenance
@@ -717,12 +741,59 @@ that's not an error, just a reminder to perform regular maintenance.
 Tips and tricks
 ===============
 
-TODO: sticky options; example: git grep -O.
-
-TODO: tricky options; example: git log -p3.
-
-TODO: bash/zsh completion, bash/zsh prompt.
-https://git.kernel.org/cgit/git/git.git/tree/contrib/completion
+Command-line options and arguments
+----------------------------------
+
+`git help cli
+<https://www.kernel.org/pub/software/scm/git/docs/gitcli.html>`_
+recommends not to combine short options/flags. Most of the times it
+works: ``git commit -av`` works perfectly, but there are situations
+when it doesn't. E.g., ``git log -p -5`` cannot be combined as ``git
+log -p5``.
+
+Some options have arguments, some even have default arguments. In that
+case the argument for such option must be spelled in sticky way:
+``-Oarg``, never ``-O arg`` because for an option that has a default
+argument the latter means "use default value for option ``-O`` and
+pass ``arg`` further to the option parser". For example, ``git grep``
+has an option ``-O`` that passes found files to a program; default
+program for ``-O`` is pager (usually ``less``), but you can use your
+editor::
+
+    $ git grep -Ovim # but not -O vim
+
+BTW, there is a difference between running ``git grep -O`` and ``git
+grep -Oless`` - in the latter case ``git grep`` passes ``+/pattern``
+option to less.
+
+bash/zsh completion
+-------------------
+
+It's a bit hard to type ``git rebase --interactive --preserve-merges
+HEAD~5`` manually even for those who are happy to use command-line,
+and this is where shell completion is of great help. Bash/zsh come
+with programmable completion, often automatically preinstalled and
+enabled, so if you have bash/zsh and git installed, chances are you
+are already done - just go and use it at the command-line.
+
+If you don't have necessary bits preinstalled, install and enable
+bash_completion package. If you want to upgrade your git completion to
+the latest and greatest download necessary file from `git contrib
+<https://git.kernel.org/cgit/git/git.git/tree/contrib/completion>`_.
+
+Git-for-windows comes with git-bash, bash completion is installed and
+enabled.
+
+bash/zsh prompt
+---------------
+
+For shell command-line lovers prompt can carry a lot of useful
+information. To include git information in the prompt use
+`git-prompt.sh
+<https://git.kernel.org/cgit/git/git.git/tree/contrib/completion/git-prompt.sh>`_.
+Read the detailed instructions in the file.
+
+Search the Net for "git prompt" to find other prompt variants.
 
 
 git on server