]> git.phdru.name Git - git-wiki.git/blobdiff - pep-git.txt
Fix autosetuprebase argument
[git-wiki.git] / pep-git.txt
index 7d84cba6990aa24b68c2e3834b1368fc05011b7d..a96594d85db8378e88a126151e47c3b307776a9d 100644 (file)
@@ -85,9 +85,8 @@ MacOS X: use git installed with `XCode
 <http://sourceforge.net/projects/git-osx-installer/files/>`_ or
 install git with `Homebrew <http://brew.sh/>`_: ``brew install git``.
 
-`git-cola <https://git-cola.github.io/index.html>`_ is a sleek and
-powerful Git GUI written in Python and GPL licensed. Linux, Windows,
-MacOS X.
+`git-cola <https://git-cola.github.io/index.html>`_ is a Git GUI
+written in Python and GPL licensed. Linux, Windows, MacOS X.
 
 `TortoiseGit <https://tortoisegit.org/>`_ is a Windows Shell Interface
 to Git based on TortoiseSVN; open source.
@@ -150,8 +149,8 @@ Labels, on the other hand, can be created, moved, renamed and deleted
 freely.
 
 
-Remote repository and remote branches
-=====================================
+Remote repositories and remote branches
+=======================================
 
 Another example of slightly misleading terminology. Remote
 repositories are really remote, you access them via network (well, a
@@ -174,9 +173,10 @@ To see local and remote branches (and tags) pointing to commits::
 
 You never do your own development on remote branches. You create a
 local branch that has a remote branch as upstream and do development
-on that local branch. On push git updates remote branches, and on pull
-git updates remote branches and fast-forwards, merges or rebases local
-branches.
+on that local branch. On push git pushes commits to the remote repo
+and updates remote branches, on pull git fetches commits from the
+remote repo, updates remote branches and fast-forwards, merges or
+rebases local branches.
 
 When you do an initial clone like this::
 
@@ -394,7 +394,24 @@ i.e. ``git checkout README`` restores README to the latest commit.
 (Do not use ``git checkout`` to view a content of a file in a commit,
 use ``git cat-file -p``; e.g. ``git cat-file -p HEAD~:path/to/README``).
 
-TODO: describe undo strategies: git reset, git reflog, git revert.
+``git reset`` moves the head of the current branch. The head can be
+moved to point to any commit but it's often used to remove a commit or
+a few (preferably, non-pushed ones) from the top of the branch - that
+is, to move the branch backward in order to undo a few non-pushed
+commits.
+
+``git reset`` has three modes of operation - soft, hard and mixed.
+Default is mixed. ProGit `explains
+<https://git-scm.com/book/en/Git-Tools-Reset-Demystified>`_ the
+difference very clearly. Bare repositories don't have indices or
+working trees so in a bare repo only soft reset is possible.
+
+Mixed mode reset with a path or paths can be used to unstage changes -
+that is, to remove changes added with ``git add`` for committing. See
+`The Book <https://git-scm.com/book/en/v2/Git-Basics-Undoing-Things>`_
+for details about unstaging and other undo tricks.
+
+TODO: describe undo strategies: git reflog, git revert.
 "Commit early, commit often".
 
 How to undo a merge
@@ -418,7 +435,7 @@ recommends to use rebase when pulling, i.e. always do ``git pull
 --rebase`` or even configure automatic setup of rebase for every new
 branch::
 
-    $ git config branch.autosetuprebase true
+    $ git config branch.autosetuprebase always
 
 and configure rebase for existing branches::
 
@@ -463,7 +480,7 @@ feature was implemented should be in the commit messages.
 Null-merges
 ===========
 
-Git has a builtin strategy for what Python core developers call
+Git has a builtin merge strategy for what Python core developers call
 "null-merge"::
 
     $ git merge -s ours v1  # null-merge v1 into v2