X-Git-Url: https://git.phdru.name/?a=blobdiff_plain;f=pep-103.txt;h=8b93ca4dd5986722eea42681d7343f9a722d4d67;hb=990c15d691a91dacb52ff014868cf27b1f26c743;hp=07831041b88393f091a25f68abfbba7372f3c348;hpb=fc844705b7c145d77a60baea7210c26f06cae76a;p=git-wiki.git diff --git a/pep-103.txt b/pep-103.txt index 0783104..8b93ca4 100644 --- a/pep-103.txt +++ b/pep-103.txt @@ -82,8 +82,7 @@ Unix users: `download and install using your package manager `_. Microsoft Windows: download `git-for-windows -`_ or `msysGit -`_. +`_. MacOS X: use git installed with `XCode `_ or download from @@ -532,11 +531,11 @@ For example, if you want to reset the branch ``master`` back to the original commit but preserve two commits created in the current branch do something like:: - $ git branch save-master # create a new branch saving master - $ git reflog # find the original place of master + $ git branch save-master # create a new branch saving master + $ git reflog # find the original place of master $ git reset $COMMIT_ID $ git cherry-pick save-master~ save-master - $ git branch -D save-master # remove temporary branch + $ git branch -D save-master # remove temporary branch git revert: revert a commit @@ -714,6 +713,25 @@ command. For example:: $ git check-attr -a -- \*.py +Useful assets +------------- + +`GitAlias `_ (`repository +`_) is a big collection of +aliases. A careful selection of aliases for frequently used commands +could save you a lot of keystrokes! + +`GitIgnore `_ and +https://github.com/github/gitignore are collections of ``.gitignore`` +files for all kinds of IDEs and programming languages. Python +included! + +`pre-commit `_ (`repositories +`_) is a framework for managing and +maintaining multi-language pre-commit hooks. The framework is written +in Python and has a lot of plugins for many programming languages. + + Advanced topics =============== @@ -753,8 +771,36 @@ See `WhatIsTheIndex Wiki. +Root +---- + +Git switches to the root (top-level directory of the project where +``.git`` subdirectory exists) before running any command. Git +remembers though the directory that was current before the switch. +Some programs take into account the current directory. E.g., ``git +status`` shows file paths of changed and unknown files relative to the +current directory; ``git grep`` searches below the current directory; +``git apply`` applies only those hunks from the patch that touch files +below the current directory. + +But most commands run from the root and ignore the current directory. +Imagine, for example, that you have two work trees, one for the branch +``v1`` and the other for ``master``. If you want to merge ``v1`` from +a subdirectory inside the second work tree you must write commands as +if you're in the top-level dir. Let take two work trees, +``project-v1`` and ``project``, for example:: + + $ cd project/subdirectory + $ git fetch ../project-v1 v1:v1 + $ git merge v1 + +Please note the path in ``git fetch ../project-v1 v1:v1`` is +``../project-v1`` and not ``../../project-v1`` despite the fact that +we run the commands from a subdirectory, not from the root. + + ReReRe -====== +------ Rerere is a mechanism that helps to resolve repeated merge conflicts. The most frequent source of recurring merge conflicts are topic @@ -783,7 +829,7 @@ Book. Database maintenance -==================== +-------------------- Git object database and other files/directories under ``.git`` require periodic maintenance and cleanup. For example, commit editing left @@ -841,7 +887,7 @@ has an option ``-O`` that passes a list of names of the found files to a program; default program for ``-O`` is a pager (usually ``less``), but you can use your editor:: - $ git grep -Ovim # but not -O vim + $ git grep -Ovim # but not -O vim BTW, if git is instructed to use ``less`` as the pager (i.e., if pager is not configured in git at all it uses ``less`` by default, or if it