1597 lines
67 KiB
Plaintext
1597 lines
67 KiB
Plaintext
This is magit.info, produced by makeinfo version 4.13 from magit.texi.
|
||
|
||
Magit is an interface to the version control system Git, implemented as
|
||
an Emacs package.
|
||
|
||
Unlike Emacs's native Version Control package which strives to
|
||
provide a unified interface to various version control systems, Magit
|
||
only supports Git and can therefor better take advantage of its native
|
||
features.
|
||
|
||
You are looking at the manual for the `1.4.0' release.
|
||
|
||
Magit supports GNU Emacs 23.2 or later; 24.1 or later is recommended.
|
||
Magit supports Git 1.7.2.5 or later; 1.8.2 or later is recommended.
|
||
|
||
When something breaks please see the curated list of known issues
|
||
(https://github.com/magit/magit/wiki/Known-Issues) and the FAQ
|
||
(https://github.com/magit/magit/wiki/FAQ). If that doesn't help check
|
||
the list of all open issues issues
|
||
(https://github.com/magit/magit/issues).
|
||
|
||
If everything else fails please open a new issue or ask for help on
|
||
the mailing list
|
||
(https://groups.google.com/forum/?fromgroups#!forum/magit).
|
||
|
||
Copyright (C) 2008-2015 The Magit Project Developers
|
||
|
||
Permission is granted to copy, distribute and/or modify this
|
||
document under the terms of the GNU Free Documentation License,
|
||
Version 1.2 or any later version published by the Free Software
|
||
Foundation; with no Invariant Sections, with no Front-Cover Texts,
|
||
and with no Back-Cover Texts. A copy of the license is included
|
||
in the section entitled "GNU Free Documentation License".
|
||
|
||
INFO-DIR-SECTION Emacs
|
||
START-INFO-DIR-ENTRY
|
||
* Magit (1.4.0): (magit). Using Git from Emacs with Magit. (1.4.0)
|
||
END-INFO-DIR-ENTRY
|
||
|
||
|
||
File: magit.info, Node: Top, Next: Introduction, Up: (dir)
|
||
|
||
Magit User Manual (1.4.0)
|
||
*************************
|
||
|
||
Magit is an interface to the version control system Git, implemented as
|
||
an Emacs package.
|
||
|
||
Unlike Emacs's native Version Control package which strives to
|
||
provide a unified interface to various version control systems, Magit
|
||
only supports Git and can therefor better take advantage of its native
|
||
features.
|
||
|
||
You are looking at the manual for the `1.4.0' release.
|
||
|
||
Magit supports GNU Emacs 23.2 or later; 24.1 or later is recommended.
|
||
Magit supports Git 1.7.2.5 or later; 1.8.2 or later is recommended.
|
||
|
||
When something breaks please see the curated list of known issues
|
||
(https://github.com/magit/magit/wiki/Known-Issues) and the FAQ
|
||
(https://github.com/magit/magit/wiki/FAQ). If that doesn't help check
|
||
the list of all open issues issues
|
||
(https://github.com/magit/magit/issues).
|
||
|
||
If everything else fails please open a new issue or ask for help on
|
||
the mailing list
|
||
(https://groups.google.com/forum/?fromgroups#!forum/magit).
|
||
|
||
Copyright (C) 2008-2015 The Magit Project Developers
|
||
|
||
Permission is granted to copy, distribute and/or modify this
|
||
document under the terms of the GNU Free Documentation License,
|
||
Version 1.2 or any later version published by the Free Software
|
||
Foundation; with no Invariant Sections, with no Front-Cover Texts,
|
||
and with no Back-Cover Texts. A copy of the license is included
|
||
in the section entitled "GNU Free Documentation License".
|
||
|
||
* Menu:
|
||
|
||
* Introduction::
|
||
* Acknowledgments::
|
||
* Sections::
|
||
* Status::
|
||
* Untracked files::
|
||
* Staging and Committing::
|
||
* History::
|
||
* Reflogs::
|
||
* Commit Buffer::
|
||
* Diffing::
|
||
* Tagging::
|
||
* Resetting::
|
||
* Stashing::
|
||
* Branches and Remotes::
|
||
* Wazzup::
|
||
* Merging::
|
||
* Rebasing::
|
||
* Interactive Rebasing::
|
||
* Rewriting::
|
||
* Pushing and Pulling::
|
||
* Submodules::
|
||
* Bisecting::
|
||
* Finding commits not merged upstream::
|
||
* Using Magit Extensions::
|
||
* Using Git Directly::
|
||
* GNU Free Documentation License::
|
||
|
||
|
||
File: magit.info, Node: Introduction, Next: Acknowledgments, Prev: Top, Up: Top
|
||
|
||
1 Introduction
|
||
**************
|
||
|
||
With Magit, you can inspect and modify your Git repositories with
|
||
Emacs. You can review and commit the changes you have made to the
|
||
tracked files, for example, and you can browse the history of past
|
||
changes. There is support for cherry picking, reverting, merging,
|
||
rebasing, and other common Git operations.
|
||
|
||
Magit is not a complete interface to Git; it just aims to make the
|
||
most common Git operations convenient. Thus, Magit will likely not
|
||
save you from learning Git itself.
|
||
|
||
This manual provides a tour of many Magit features. It isn't an
|
||
introduction to version control in general, or to Git in particular.
|
||
|
||
The main entry point to Magit is `M-x magit-status', which puts you
|
||
in Magit's status buffer. You will be using it frequently, so it is
|
||
probably a good idea to globally bind `magit-status' to a key of your
|
||
choice.
|
||
|
||
In addition to the status buffer, Magit will also create buffers that
|
||
show lists of commits, buffers with diffs, and other kinds of buffers.
|
||
All these buffers are in a mode derived from `magit-mode' and have the
|
||
similar key bindings. Not all commands make sense in all contexts, but
|
||
a given key will do the same thing in different Magit buffers.
|
||
|
||
Naturally, Magit runs the `git' command to do most of the work. The
|
||
`*magit-process*' buffer contains the transcript of the most recent
|
||
command. You can switch to it with `$'.
|
||
|
||
|
||
File: magit.info, Node: Acknowledgments, Next: Sections, Prev: Introduction, Up: Top
|
||
|
||
2 Acknowledgments
|
||
*****************
|
||
|
||
Our thank goes to all current and past contributors, Marius Vollmer who
|
||
started the project, and all retired and current maintainers, Phil
|
||
Jackson, Peter J. Weisberg, Rémi Vanicat, Nicolas Dudebout, Yann
|
||
Hodique, and Jonas Bernoulli.
|
||
|
||
For a full list of contributors, see the AUTHORS.md file at the
|
||
top-level directory of this distribution or at AUTHORS.md
|
||
(https://github.com/magit/magit/tree/master/AUTHORS.md).
|
||
|
||
|
||
File: magit.info, Node: Sections, Next: Status, Prev: Acknowledgments, Up: Top
|
||
|
||
3 Sections
|
||
**********
|
||
|
||
All Magit buffers are structured into nested 'sections'. These
|
||
sections can be hidden and shown individually. When a section is
|
||
hidden, only its first line is shown and all its children are
|
||
completely invisible.
|
||
|
||
The most fine-grained way to control the visibility of sections is
|
||
the `TAB' key. It will to toggle the current section (the section that
|
||
contains point) between being hidden and being shown.
|
||
|
||
Typing `S-TAB' toggles the visibility of the children of the current
|
||
section. When all of them are shown, they will all be hidden.
|
||
Otherwise, when some or all are hidden, they will all be shown.
|
||
|
||
The digit keys `1', `2', `3', and `4' control the visibility of
|
||
sections based on levels. Hitting `2', for example, will show sections
|
||
on levels one and two, and will hide sections on level 3. However,
|
||
only sections that are a parent or child of the current section are
|
||
affected.
|
||
|
||
For example, when the current section is on level 3 and you hit `1',
|
||
the grand-parent of the current section (which is on level one) will be
|
||
shown, and the parent of the current section (level 2) will be hidden.
|
||
The visibility of no other section will be changed.
|
||
|
||
This sounds a bit complicated, but you'll figure it out.
|
||
|
||
Using `M-1', `M-2', `M-3', and `M-4' is similar to the unmodified
|
||
digits, but now all sections on the respective level are affected,
|
||
regardless of whether or not they are related to the current section.
|
||
|
||
For example, `M-1' will only show the first lines of the top-level
|
||
sections and will hide everything else. Typing `M-4' on the other hand
|
||
will show everything.
|
||
|
||
Because of the way the status buffer is set up, some changes to
|
||
section visibility are more common than others. Files are on level 2
|
||
and diff hunks are on level 4. Thus, you can type `2' to collapse the
|
||
diff of the current file, and `M-2' to collapse all files. This
|
||
returns the status buffer to its default setup and is a quick way to
|
||
unclutter it after drilling down into the modified files.
|
||
|
||
Because `2' and `M-2' are so common in the status buffer, they are
|
||
bound to additional, more mnemonic keys: `M-h' (hide) and `M-H' (hide
|
||
all). Likewise `4' and `M-4' are also available as `M-s' (show) and
|
||
`M-S' (show all).
|
||
|
||
In other buffers than the status buffer, `M-h', `M-H', `M-s', and
|
||
`M-S' might work on different levels than on 2 and 4, but they keep
|
||
their general meaning: `M-H' hides all detail, and `M-S' shows
|
||
everything.
|
||
|
||
|
||
File: magit.info, Node: Status, Next: Untracked files, Prev: Sections, Up: Top
|
||
|
||
4 Status
|
||
********
|
||
|
||
Running `M-x magit-status' displays the main interface of Magit, the
|
||
status buffer. You can have multiple status buffers active at the same
|
||
time, each associated with its own Git repository.
|
||
|
||
When invoking `M-x magit-status' from within a Git repository, it
|
||
will switch to the status buffer of that repository. Otherwise, it
|
||
will prompt for a directory. With a prefix argument, it will always
|
||
prompt.
|
||
|
||
You can set `magit-repo-dirs' to customize how `magit-status' asks
|
||
for the repository to work on. When `magit-repo-dirs' is nil,
|
||
`magit-status' will simply ask for a directory.
|
||
|
||
If you specify a directory that is not a Git repository, `M-x
|
||
magit-status' will offer to initialize it as one.
|
||
|
||
When `magit-repo-dirs' is not nil, it is treated as a list of
|
||
directory names, and `magit-status' will find all Git repositories in
|
||
those directories and offer them for completion. (Magit will only look
|
||
`magit-repo-dirs-depth' levels deep, however.)
|
||
|
||
With two prefix arguments, `magit-status' will always prompt for a
|
||
raw directory.
|
||
|
||
Thus, you would normally set `magit-repo-dirs' to the places where
|
||
you keep most of your Git repositories and switch between them with
|
||
`C-u M-x magit-status'. If you want to go to a repository outside of
|
||
your normal working areas, or if you want to create a new repository,
|
||
you would use `C-u C-u M-x magit-status'.
|
||
|
||
You need to explicitly refresh the status buffer when you have made
|
||
changes to the repository from outside of Emacs. You can type `g' in
|
||
the status buffer itself, or just use `M-x magit-status' instead of
|
||
`C-x b' when switching to it. You also need to refresh the status
|
||
buffer in this way after saving a file in Emacs.
|
||
|
||
The header at the top of the status buffer shows a short summary of
|
||
the repository state: where it is located, which branch is checked out,
|
||
etc. Below the header are a number of sections that show details about
|
||
the working tree and the staging area. You can hide and show them as
|
||
described in the previous section.
|
||
|
||
The first section shows _Untracked files_, if there are any. See
|
||
*note Untracked files:: for more details.
|
||
|
||
The next two sections show your local changes. They are explained
|
||
fully in the next chapter, *note Staging and Committing::.
|
||
|
||
If the current branch is associated with a remote tracking branch,
|
||
the status buffer shows the differences between the current branch and
|
||
the tracking branch. See *note Pushing and Pulling:: for more
|
||
information.
|
||
|
||
During a history rewriting session, the status buffer shows the
|
||
_Pending changes_ and _Pending commits_ sections. See *note
|
||
Rewriting:: for more details.
|
||
|
||
|
||
File: magit.info, Node: Untracked files, Next: Staging and Committing, Prev: Status, Up: Top
|
||
|
||
5 Untracked files
|
||
*****************
|
||
|
||
Untracked files are shown in the _Untracked files_ section.
|
||
|
||
You can add an untracked file to the staging area with `s'. If
|
||
point is on the _Untracked files_ section title when you hit `s', all
|
||
untracked files are staged.
|
||
|
||
Typing `C-u S' anywhere will also stage all untracked files,
|
||
together with all changes to the tracked files.
|
||
|
||
You can instruct Git to ignore them by typing `i'. This will add
|
||
the filename to the `.gitignore' file. Typing `C-u i' will ask you for
|
||
the name of the file to ignore. This is useful to ignore whole
|
||
directories, for example. In this case, the minibuffer's future history
|
||
(accessible with `M-n') contains predefined values (such as wildcards)
|
||
that might be of interest. If prefix argument is negative (for example
|
||
after typing `C-- i'), the prompt proposes wildcard by default. The
|
||
`I' command is similar to `i' but will add the file to
|
||
`.git/info/exclude' instead.
|
||
|
||
To delete an untracked file forever, use `k'. If point is on the
|
||
_Untracked files_ section title when you hit `k', all untracked files
|
||
are deleted.
|
||
|
||
|
||
File: magit.info, Node: Staging and Committing, Next: History, Prev: Untracked files, Up: Top
|
||
|
||
6 Staging and Committing
|
||
************************
|
||
|
||
Committing with Git is a two step process: first you add the changes
|
||
you want to commit to a 'staging area' or 'index', and then you commit
|
||
them to the repository. This allows you to only commit a subset of the
|
||
changes in the working tree. If you are not familiar with this concept
|
||
yet, then you should change that as soon as possible using one of the
|
||
fine Git tutorials. If you don't, then Git and by extension Magit will
|
||
seem rather strange.
|
||
|
||
Magit shows uncommitted changes in two sections, depending on whether
|
||
the changes have been staged yet. The _Staged changes_ section shows
|
||
the changes that will be included in the next commit, while the
|
||
_Unstaged changes_ section shows the changes that will be left out.
|
||
|
||
To move an unstaged hunk into the staging area, move point into the
|
||
hunk and type `s'. Likewise, to unstage a hunk, move point into it and
|
||
type `u'. If point is in a diff header when you type `s' or `u', all
|
||
hunks belonging to that diff are moved at the same time.
|
||
|
||
Currently it is only possible to stage from the status buffer.
|
||
Staging and unstaging from diff buffers that show unstaged and staged
|
||
changes is not possible yet.
|
||
|
||
If the region is active when you type `s' or `u', only the changes
|
||
in the region are staged or unstaged. (This works line by line: if the
|
||
beginning of a line is in the region it is included in the changes,
|
||
otherwise it is not.)
|
||
|
||
To change the size of the hunks, you can type `+' or `-' to increase
|
||
and decrease, respectively. Typing `0' will reset the hunk size to the
|
||
default.
|
||
|
||
Typing `C-u s' will ask you for a name of a file to be staged, for
|
||
example to stage files that are hidden.
|
||
|
||
To move all hunks of all diffs into the staging area in one go, type
|
||
`S'. To unstage everything, type `U'.
|
||
|
||
Typing `C-u S' will stage all untracked files in addition to the
|
||
changes to tracked files.
|
||
|
||
You can discard uncommitted changes by moving point into a hunk and
|
||
typing `k'. The changes to discard are selected as with `s' and `u'.
|
||
|
||
Before committing, you should write a short description of the
|
||
changes.
|
||
|
||
Type `c c' to pop up a buffer where you can write your change
|
||
description. Once you are happy with the description, type `C-c C-c'
|
||
in that buffer to perform the commit.
|
||
|
||
If you want to write changes in a `ChangeLog' file, you can use `C-x
|
||
4 a' on a diff hunk.
|
||
|
||
Typing `c c' when the staging area is unused is a special situation.
|
||
Normally, the next commit would be empty, but you can configure Magit
|
||
to do something more useful by customizing the
|
||
`magit-commit-all-when-nothing-staged' variable. One choice is to
|
||
instruct the subsequent `C-c C-c' to commit all changes. Another
|
||
choice is stage everything at the time of hitting `c c'.
|
||
|
||
Typing `M-n' or `M-p' will cycle through the
|
||
`log-edit-comment-ring', which will have your previous log messages.
|
||
This is particularly useful if you have a hook that occasionally causes
|
||
git to refuse your commit.
|
||
|
||
To abort a commit use `C-c C-k'. The commit message is saved and
|
||
can later be retrieved in the commit message buffer using `M-n' and
|
||
`M-p'.
|
||
|
||
Typing `C' will also pop up the change description buffer, but in
|
||
addition, it will try to insert a ChangeLog-style entry for the change
|
||
that point is in.
|
||
|
||
|
||
File: magit.info, Node: History, Next: Reflogs, Prev: Staging and Committing, Up: Top
|
||
|
||
7 History
|
||
*********
|
||
|
||
To show the repository history of your current head, type `l l'. A new
|
||
buffer will be shown that displays the history in a terse form. The
|
||
first paragraph of each commit message is displayed, next to a
|
||
representation of the relationships between commits.
|
||
|
||
To show the repository history between two branches or between any
|
||
two points of the history, type `l r l'. You will be prompted to enter
|
||
references for starting point and ending point of the history range; you
|
||
can use auto-completion to specify them. A typical use case for ranged
|
||
history log display would be `l r l master RET new-feature RET' that
|
||
will display commits on the new-feature branch that are not in master;
|
||
these commits can then be inspected and cherry-picked, for example.
|
||
|
||
More thorough filtering can be done by supplying `l' with one or
|
||
more suffix arguments, as displayed in its popup. `=g' ('Grep') for
|
||
example, limits the output to commits of which the log message matches
|
||
a specific string/regex.
|
||
|
||
Typing `l L' (or `l C-u L') will show the log in a more verbose form.
|
||
|
||
Magit will show only `magit-log-cutoff-length' entries. `e' will
|
||
show twice as many entries. `C-u e' will show all entries, and given a
|
||
numeric prefix argument, `e' will add this number of entries.
|
||
|
||
You can move point to a commit and then cause various things to
|
||
happen with it. (The following commands work in any list of commits,
|
||
such as the one shown in the _Unpushed commits_ section.)
|
||
|
||
Typing `RET' will pop up more information about the current commit
|
||
and move point into the new buffer. *Note Commit Buffer::. Typing
|
||
`SPC' and `DEL' will also show the information, but will scroll the new
|
||
buffer up or down (respectively) when typed again.
|
||
|
||
Typing `a' will apply the current commit to your current branch.
|
||
This is useful when you are browsing the history of some other branch
|
||
and you want to `cherry-pick' some changes from it. A typical
|
||
situation is applying selected bug fixes from the development version
|
||
of a program to a release branch. The cherry-picked changes will not
|
||
be committed automatically; you need to do that explicitly.
|
||
|
||
Typing `A' will cherry-pick the current commit and will also commit
|
||
the changes automatically when there have not been any conflicts.
|
||
|
||
Typing `v' will revert the current commit. Thus, it will apply the
|
||
changes made by that commit in reverse. This is obviously useful to
|
||
cleanly undo changes that turned out to be wrong. As with `a', you
|
||
need to commit the changes explicitly.
|
||
|
||
Typing `C-w' will copy the sha1 of the current commit into the kill
|
||
ring.
|
||
|
||
Typing `=' will show the differences from the current commit to the
|
||
"marked" commit.
|
||
|
||
You can mark the current commit by typing `.'. When the current
|
||
commit is already marked, typing `.' will unmark it. To unmark the
|
||
marked commit no matter where point is, use `C-u .'.
|
||
|
||
Some commands, such as `=', will use the current commit and the
|
||
marked commit as implicit arguments. Other commands will offer the
|
||
marked commit as a default when prompting for their arguments.
|
||
|
||
|
||
File: magit.info, Node: Reflogs, Next: Commit Buffer, Prev: History, Up: Top
|
||
|
||
8 Reflogs
|
||
*********
|
||
|
||
You can use `l h' and `l H' to browse your _reflog_, the local history
|
||
of changes made to your repository heads. Typing `H' will ask for a
|
||
head, while `l h' will show the reflog of `HEAD'.
|
||
|
||
The resulting buffer is just like the buffer produced by `l l' and
|
||
`l L' that shows the commit history.
|
||
|
||
|
||
File: magit.info, Node: Commit Buffer, Next: Diffing, Prev: Reflogs, Up: Top
|
||
|
||
9 Commit Buffer
|
||
***************
|
||
|
||
When you view a commit (perhaps by selecting it in the log buffer,
|
||
*note History::), the "commit buffer" is displayed, showing you
|
||
information about the commit and letting you interact with it.
|
||
|
||
By placing your cursor within the diff or hunk and typing `a', you
|
||
can apply the same patch to your working copy. This is useful when you
|
||
want to copy a change from another branch, but don't necessarily want
|
||
to cherry-pick the whole commit.
|
||
|
||
By typing `v' you can apply the patch in reverse, removing all the
|
||
lines that were added and adding all the lines that were removed. This
|
||
is a convenient way to remove a change after determining that it
|
||
introduced a bug.
|
||
|
||
If the commit message refers to any other commits in the repository
|
||
by their unique hash, the hash will be highlighted and you will be able
|
||
to visit the referenced commit either by clicking on it or by moving
|
||
your cursor onto it and pressing `RET'.
|
||
|
||
The commit buffer maintains a history of the commits it has shown.
|
||
After visiting a referenced commit you can type `C-c C-b' to get back
|
||
to where you came from. To go forward in the history, type `C-c C-f'.
|
||
There are also `[back]' and `[forward]' buttons at the bottom of the
|
||
buffer.
|
||
|
||
|
||
File: magit.info, Node: Diffing, Next: Tagging, Prev: Commit Buffer, Up: Top
|
||
|
||
10 Diffing
|
||
**********
|
||
|
||
Magit typically shows diffs in the "unified" format.
|
||
|
||
In any buffer that shows a diff, you can type `e' anywhere within
|
||
the diff to show the two versions of the file in Ediff. If the diff is
|
||
of a file in the status buffer that needs to be merged, you will be
|
||
able to use Ediff as an interactive merge tool. Otherwise, Ediff will
|
||
simply show the two versions of the file.
|
||
|
||
To show the changes from your working tree to another revision, type
|
||
`d'. To show the changes between two arbitrary revisions, type `D'.
|
||
|
||
You can use `a' within the diff output to apply the changes to your
|
||
working tree. As usual when point is in a diff header for a file, all
|
||
changes for that file are applied, and when it is in a hunk, only that
|
||
hunk is. When the region is active, the applied changes are restricted
|
||
to that region.
|
||
|
||
Typing `v' will apply the selected changes in reverse.
|
||
|
||
|
||
File: magit.info, Node: Tagging, Next: Resetting, Prev: Diffing, Up: Top
|
||
|
||
11 Tagging
|
||
**********
|
||
|
||
Typing `t t' will make a lightweight tag. Typing `t a' will make an
|
||
annotated tag. It will put you in the normal `*magit-log-edit' buffer
|
||
for writing commit messages, but typing `C-c C-c' in it will make the
|
||
tag instead. This is controlled by the `Tag' field that will be added
|
||
to the `*magit-log-edit*' buffer. You can edit it, if you like.
|
||
|
||
|
||
File: magit.info, Node: Resetting, Next: Stashing, Prev: Tagging, Up: Top
|
||
|
||
12 Resetting
|
||
************
|
||
|
||
Once you have added a commit to your local repository, you can not
|
||
change that commit anymore in any way. But you can reset your current
|
||
head to an earlier commit and start over.
|
||
|
||
If you have published your history already, rewriting it in this way
|
||
can be confusing and should be avoided. However, rewriting your local
|
||
history is fine and it is often cleaner to fix mistakes this way than
|
||
by reverting commits (with `v', for example).
|
||
|
||
Typing `x' will ask for a revision and reset your current head to
|
||
it. No changes will be made to your working tree and staging area.
|
||
Thus, the _Staged changes_ section in the status buffer will show the
|
||
changes that you have removed from your commit history. You can commit
|
||
the changes again as if you had just made them, thus rewriting history.
|
||
|
||
Typing `x' while point is in a line that describes a commit will
|
||
offer this commit as the default revision to reset to. Thus, you can
|
||
move point to one of the commits in the _Unpushed commits_ section and
|
||
hit `x RET' to reset your current head to it.
|
||
|
||
Type `X' to reset your working tree and staging area to the most
|
||
recently committed state. This will discard your local modifications,
|
||
so be careful.
|
||
|
||
You can give a prefix to `x' if you want to reset both the current
|
||
head and your working tree to a given commit. This is the same as
|
||
first using an unprefixed `x' to reset only the head, and then using
|
||
`X'.
|
||
|
||
|
||
File: magit.info, Node: Stashing, Next: Branches and Remotes, Prev: Resetting, Up: Top
|
||
|
||
13 Stashing
|
||
***********
|
||
|
||
You can create a new stash with `z z'. Your stashes will be listed in
|
||
the status buffer, and you can apply them with `a' and pop them with
|
||
`A'. To drop a stash, use `k'.
|
||
|
||
With a prefix argument, both `a' and `A' will attempt to reinstate
|
||
the index as well as the working tree from the stash.
|
||
|
||
Typing `z -k z' will create a stash just like `z z', but will leave
|
||
the changes in your working tree and index. This makes it easier to,
|
||
for example, test multiple variations of the same change.
|
||
|
||
If you just want to make quick snapshots in between edits, you can
|
||
use `z s', which automatically enters a timestamp as description, and
|
||
keeps your working tree and index intact by default.
|
||
|
||
You can visit and show stashes in the usual way: Typing `SPC' and
|
||
`DEL' will pop up a buffer with the description of the stash and scroll
|
||
it, typing `RET' will move point into that buffer. Using `C-u RET'
|
||
will move point into that buffer in other window.
|
||
|
||
|
||
File: magit.info, Node: Branches and Remotes, Next: Wazzup, Prev: Stashing, Up: Top
|
||
|
||
14 Branches and Remotes
|
||
***********************
|
||
|
||
The current branch is indicated in the header of the status buffer. If
|
||
this branch is tracking a remote branch, the latter is also indicated.
|
||
|
||
Branches and remotes can be manipulated directly with a popup menu or
|
||
through the branch manager. Using the popup menu allows you to quickly
|
||
make changes from any magit buffer. The branch manager is a separate
|
||
buffer called `*magit-branches*'. It displays information about
|
||
branches and remotes and offers a local key map for shorter key
|
||
bindings. The two interaction methods are described in more details
|
||
below.
|
||
|
||
* Menu:
|
||
|
||
* Branches Popup::
|
||
* Remotes Popup::
|
||
* Branches in the Branch Manager::
|
||
* Remotes in the Branch Manager::
|
||
|
||
|
||
File: magit.info, Node: Branches Popup, Next: Remotes Popup, Up: Branches and Remotes
|
||
|
||
14.1 Branches Popup
|
||
===================
|
||
|
||
Typing `b' will display a popup menu to manipulate branches.
|
||
|
||
You can switch to a different branch by typing `b b'. This will
|
||
immediately checkout the branch into your working copy, so you
|
||
shouldn't have any local modifications when switching branches.
|
||
|
||
If you try to switch to a remote branch, Magit will offer to create a
|
||
local tracking branch for it instead. This way, you can easily start
|
||
working on new branches that have appeared in a remote repository.
|
||
|
||
Typing `b b' while point is at a commit description will offer that
|
||
commit as the default to switch to. This will result in a detached
|
||
head.
|
||
|
||
To create a new branch and switch to it immediately, type `b c'.
|
||
|
||
To delete a branch, type `b k'. If you're currently on that branch,
|
||
Magit will offer to switch to the 'master' branch.
|
||
|
||
Typing `b r' will let you rename a branch. Unless a branch with
|
||
the same name already exists, obviously...
|
||
|
||
Deleting a branch is only possible if it's already fully merged into
|
||
HEAD or its upstream branch. Unless you type `b C-u k', that is. Here
|
||
be dragons...
|
||
|
||
Typing `b v' will launch the branch manager.
|
||
|
||
|
||
File: magit.info, Node: Remotes Popup, Next: Branches in the Branch Manager, Prev: Branches Popup, Up: Branches and Remotes
|
||
|
||
14.2 Remotes Popup
|
||
==================
|
||
|
||
Typing `M' will display a popup menu to manipulate remotes.
|
||
|
||
To add a new remote, type `M a'.
|
||
|
||
To delete a remote type `M k'.
|
||
|
||
Typing `M r' will let you rename a remote.
|
||
|
||
|
||
File: magit.info, Node: Branches in the Branch Manager, Next: Remotes in the Branch Manager, Prev: Remotes Popup, Up: Branches and Remotes
|
||
|
||
14.3 Branches in the Branch Manager
|
||
===================================
|
||
|
||
In the branch manager, each branch is displayed on a separate line. The
|
||
current local branch is marked by a "*" in front of the name. Remote
|
||
branches are grouped by the remote they come from.
|
||
|
||
If a local branch tracks a remote branch some extra information is
|
||
printed on the branch line. The format is the following: "<branch>
|
||
[<remote-branch> <remote>: ahead <a>, behind <b>]". "<remote-branch>"
|
||
is omitted if it is identical to "<branch>". "ahead" and "behind"
|
||
information are only displayed if necessary.
|
||
|
||
To check out a branch, move your cursor to the desired branch and
|
||
press `RET'.
|
||
|
||
Typing `c' will create a new branch.
|
||
|
||
Typing `k' will delete the branch in the current line, and `C-u k'
|
||
deletes it even if it hasn't been merged into the current local branch.
|
||
Deleting works for both local and remote branches.
|
||
|
||
Typing `r' on a branch will rename it.
|
||
|
||
Typing `T' on a local branch, changes which remote branch it tracks.
|
||
|
||
|
||
File: magit.info, Node: Remotes in the Branch Manager, Prev: Branches in the Branch Manager, Up: Branches and Remotes
|
||
|
||
14.4 Remotes in the Branch Manager
|
||
==================================
|
||
|
||
In the branch manager, each remote is displayed on a separate line. The
|
||
format is the following "<remote> (<url>, <push-url>)". "<push-url>"
|
||
is omitted if it is not set. The associated branches are listed under
|
||
this line.
|
||
|
||
Typing `a' will add a new remote.
|
||
|
||
Typing `k' will delete the remote in the current line.
|
||
|
||
Typing `r' on a remote will rename it.
|
||
|
||
|
||
File: magit.info, Node: Wazzup, Next: Merging, Prev: Branches and Remotes, Up: Top
|
||
|
||
15 Wazzup
|
||
*********
|
||
|
||
Typing `w' will show a summary of how your other branches relate to the
|
||
current branch.
|
||
|
||
For each branch, you will get a section that lists the commits in
|
||
that branch that are not in the current branch. The sections are
|
||
initially collapsed; you need to explicitly open them with `TAB' (or
|
||
similar) to show the lists of commits.
|
||
|
||
When point is on a _N unmerged commits in ..._ title, the
|
||
corresponding branch will be offered as the default for a merge.
|
||
|
||
Hitting `i' on a branch title will ignore this branch in the wazzup
|
||
view. You can use `C-u w' to show all branches, including the ignored
|
||
ones. Hitting `i' on an already ignored branch in that view will
|
||
unignore it.
|
||
|
||
|
||
File: magit.info, Node: Merging, Next: Rebasing, Prev: Wazzup, Up: Top
|
||
|
||
16 Merging
|
||
**********
|
||
|
||
Magit offers two ways to merge branches: manual and automatic. A
|
||
manual merge will apply all changes to your working tree and staging
|
||
area, but will not commit them, while an automatic merge will go ahead
|
||
and commit them immediately.
|
||
|
||
Type `m m' to initiate merge.
|
||
|
||
After initiating a merge, the header of the status buffer might
|
||
remind you that the next commit will be a merge commit (with more than
|
||
one parent). If you want to abort a manual merge, just do a hard reset
|
||
to HEAD with `X'.
|
||
|
||
Merges can fail if the two branches you want to merge introduce
|
||
conflicting changes. In that case, the automatic merge stops before the
|
||
commit, essentially falling back to a manual merge. You need to resolve
|
||
the conflicts for example with `e' and stage the resolved files, for
|
||
example with `S'.
|
||
|
||
You can not stage individual hunks one by one as you resolve them,
|
||
you can only stage whole files once all conflicts in them have been
|
||
resolved.
|
||
|
||
|
||
File: magit.info, Node: Rebasing, Next: Interactive Rebasing, Prev: Merging, Up: Top
|
||
|
||
17 Rebasing
|
||
***********
|
||
|
||
Typing `R' in the status buffer will initiate a rebase or, if one is
|
||
already in progress, ask you how to continue.
|
||
|
||
When a rebase is stopped in the middle because of a conflict, the
|
||
header of the status buffer will indicate how far along you are in the
|
||
series of commits that are being replayed. When that happens, you
|
||
should resolve the conflicts and stage everything and hit `R c' to
|
||
continue the rebase. Alternatively, hitting `c' or `C' while in the
|
||
middle of a rebase will also ask you whether to continue the rebase.
|
||
|
||
Of course, you can initiate a rebase in any number of ways, by
|
||
configuring `git pull' to rebase instead of merge, for example. Such a
|
||
rebase can be finished with `R' as well.
|
||
|
||
|
||
File: magit.info, Node: Interactive Rebasing, Next: Rewriting, Prev: Rebasing, Up: Top
|
||
|
||
18 Interactive Rebasing
|
||
***********************
|
||
|
||
Typing `E' in the status buffer will initiate an interactive rebase.
|
||
This is equivalent to running `git rebase --interactive' at the command
|
||
line. The `git-rebase-todo' file will be opened in an Emacs buffer for
|
||
you to edit. This file is opened using `emacsclient', so just edit
|
||
this file as you normally would, then call the `server-edit' function
|
||
(typically bound to `C-x #') to tell Emacs you are finished editing,
|
||
and the rebase will proceed as usual.
|
||
|
||
If you have loaded `rebase-mode.el' (which is included in the Magit
|
||
distribution), the `git-rebase-todo' buffer will be in `rebase-mode'.
|
||
This mode disables normal text editing but instead provides single-key
|
||
commands (shown in the buffer) to perform all the edits that you would
|
||
normally do manually, including changing the operation to be performed
|
||
each commit ("pick", "squash", etc.), deleting (commenting out) commits
|
||
from the list, and reordering commits. You can finish editing the
|
||
buffer and proceed with the rebase by pressing `C-c C-c', which is
|
||
bound to `server-edit' in this mode, and you can abort the rebase with
|
||
`C-c C-k', just like when editing a commit message in Magit.
|
||
|
||
|
||
File: magit.info, Node: Rewriting, Next: Pushing and Pulling, Prev: Interactive Rebasing, Up: Top
|
||
|
||
19 Rewriting
|
||
************
|
||
|
||
As hinted at earlier, you can rewrite your commit history. For
|
||
example, you can reset the current head to an earlier commit with `x'.
|
||
This leaves the working tree unchanged, and the status buffer will show
|
||
all the changes that have been made since that new value of the current
|
||
head. You can commit these changes again, possibly splitting them into
|
||
multiple commits as you go along.
|
||
|
||
Amending your last commit is a common special case of rewriting
|
||
history like this.
|
||
|
||
Another common way to rewrite history is to reset the head to an
|
||
earlier commit, and then to cherry pick the previous commits in a
|
||
different order. You could pick them from the reflog, for example.
|
||
|
||
Magit has several commands that can simplify the book keeping
|
||
associated with rewriting. These commands all start with the `r'
|
||
prefix key.
|
||
|
||
(Unless you already do so, we recommend that you don't use the
|
||
functionality described here. It is semi-deprecated and will be
|
||
removed once its unique features have been ported to the `git rebase
|
||
--interactive' workflow. Even now the latter is almost always the
|
||
better option.)
|
||
|
||
Typing `r b' will start a rewrite operation. You will be prompted
|
||
for a _base_ commit. This commit and all subsequent commits up until
|
||
the current head are then put in a list of _Pending commits_, after
|
||
which the current head will be reset to the _parent_ of the base
|
||
commit. This can be configured to behave like `git rebase', i.e.
|
||
exclude the selected base commit from the rewrite operation, with the
|
||
`magit-rewrite-inclusive' variable.
|
||
|
||
You would then typically use `a' and `A' to cherry pick commits from
|
||
the list of pending commits in the desired order, until all have been
|
||
applied. Magit shows which commits have been applied by changing their
|
||
marker from `*' to `.'.
|
||
|
||
Using `A' will immediately commit the commit (as usual). If you
|
||
want to combine multiple previous commits into a single new one, use
|
||
`a' to apply them all to your working tree, and then commit them
|
||
together.
|
||
|
||
Magit has no explicit support for rewriting merge commits. It will
|
||
happily include merge commits in the list of pending commits, but there
|
||
is no way of replaying them automatically. You have to redo the merge
|
||
explicitly.
|
||
|
||
You can also use `v' to revert a commit when you have changed your
|
||
mind. This will change the `.' mark back to `*'.
|
||
|
||
Once you are done with the rewrite, type `r s' to remove the book
|
||
keeping information from the status buffer.
|
||
|
||
If you rather wish to start over, type `r a'. This will abort the
|
||
rewriting, resetting the current head back to the value it had before
|
||
the rewrite was started with `r b'.
|
||
|
||
Typing `r f' will _finish_ the rewrite: it will apply all unused
|
||
commits one after the other, as if you would use `A' with all of them.
|
||
|
||
You can change the `*' and `.' marks of a pending commit explicitly
|
||
with `r *' and `r .'.
|
||
|
||
In addition to a list of pending commits, the status buffer will show
|
||
the _Pending changes_. This section shows the diff between the
|
||
original head and the current head. You can use it to review the
|
||
changes that you still need to rewrite, and you can apply hunks from
|
||
it, like from any other diff.
|
||
|
||
|
||
File: magit.info, Node: Pushing and Pulling, Next: Submodules, Prev: Rewriting, Up: Top
|
||
|
||
20 Pushing and Pulling
|
||
**********************
|
||
|
||
Magit will run `git push' when you type `P P'. If you give a prefix
|
||
argument to `P P', you will be prompted for the repository to push to.
|
||
When no default remote repository has been configured yet for the
|
||
current branch, you will be prompted as well. Typing `P P' will only
|
||
push the current branch to the remote. In other words, it will run
|
||
`git push <remote> <branch>'. The branch will be created in the remote
|
||
if it doesn't exist already. The local branch will be configured so
|
||
that it pulls from the new remote branch. If you give a double prefix
|
||
argument to `P P', you will be prompted in addition for the target
|
||
branch to push to. In other words, it will run `git push <remote>
|
||
<branch>:<target>'.
|
||
|
||
Typing `f f' will run `git fetch'. It will prompt for the name of
|
||
the remote to update if there is no default one. Typing `f o' will
|
||
always prompt for the remote. Typing `F F' will run `git pull'. When
|
||
you don't have a default branch configured to be pulled into the
|
||
current one, you will be asked for it.
|
||
|
||
If there is a default remote repository for the current branch, Magit
|
||
will show that repository in the status buffer header.
|
||
|
||
In this case, the status buffer will also have a _Unpushed commits_
|
||
section that shows the commits on your current head that are not in the
|
||
branch named `<remote>/<branch>'. This section works just like the
|
||
history buffer: you can see details about a commit with `RET', compare
|
||
two of them with `.' and `=', and you can reset your current head to
|
||
one of them with `x', for example. If you want to push the changes
|
||
then type `P P'.
|
||
|
||
When the remote branch has changes that are not in the current
|
||
branch, Magit shows them in a section called _Unpulled changes_. Typing
|
||
`F F' will fetch and merge them into the current branch.
|
||
|
||
|
||
File: magit.info, Node: Submodules, Next: Bisecting, Prev: Pushing and Pulling, Up: Top
|
||
|
||
21 Submodules
|
||
*************
|
||
|
||
`o u'
|
||
Update the submodules, with a prefix argument it will also
|
||
initialize them.
|
||
|
||
`o i'
|
||
Initialize the submodules.
|
||
|
||
`o b'
|
||
Update and initialize the submodules in one go (same as C-u o u).
|
||
|
||
`o s'
|
||
Synchronizes submodules' remote URL configuration setting to the
|
||
value specified in .gitmodules.
|
||
|
||
|
||
File: magit.info, Node: Bisecting, Next: Finding commits not merged upstream, Prev: Submodules, Up: Top
|
||
|
||
22 Bisecting
|
||
************
|
||
|
||
Magit supports bisecting by showing how many revisions and steps are
|
||
left to be tested in the status buffer. You can control the bisect
|
||
session from both the status and from log buffers with the `B' key menu.
|
||
|
||
Typing `B s' will start a bisect session. You will be prompted for
|
||
a revision that is known to be bad (defaults to _HEAD_) and for a
|
||
revision that is known to be good (defaults to the revision at point if
|
||
there is one). git will select a revision for you to test, and Magit
|
||
will update its status buffer accordingly.
|
||
|
||
You can tell git that the current revision is good with `B g', that
|
||
it is bad with `B b' or that git should skip it with `B k'. You can
|
||
also tell git to go into full automatic mode by giving it the name of a
|
||
script to run for each revision to test with `B u'.
|
||
|
||
The current status can be shown as a log with `B l'. It contains
|
||
the revisions that have already been tested and your decisions about
|
||
their state.
|
||
|
||
The revisions left to test can be visualized in gitk with `B v'.
|
||
|
||
When you're finished bisecting you have to reset the session with `B
|
||
r'.
|
||
|
||
|
||
File: magit.info, Node: Finding commits not merged upstream, Next: Using Magit Extensions, Prev: Bisecting, Up: Top
|
||
|
||
23 Finding commits not merged upstream
|
||
**************************************
|
||
|
||
One of the comforts of git is that it can tell you which commits have
|
||
been merged upstream but not locally and vice versa. Git's sub-command
|
||
for this is `cherry' (not to be confused with `cherry-pick'). Magit
|
||
has support for this by invoking `magit-cherry' which is bound to `y'
|
||
by default.
|
||
|
||
Magit will then ask you first for the upstream revision (which
|
||
defaults to the currently tracked remote branch if any) and the head
|
||
revision (which defaults to the current branch) to use in the
|
||
comparison. You will then see a new buffer in which all commits are
|
||
listed with a directional marker, their revision and the commit
|
||
message's first line. The directional marker is either `+' indicating
|
||
a commit that's present in upstream but not in head or `-' which
|
||
indicates a commit present in head but not in upstream.
|
||
|
||
From this list you can use the usual key bindings for cherry-picking
|
||
individual commits (`a' for cherry-picking without committing and `A'
|
||
for the same plus the automatic commit). The buffer is refreshed
|
||
automatically after each cherry-pick.
|
||
|
||
|
||
File: magit.info, Node: Using Magit Extensions, Next: Using Git Directly, Prev: Finding commits not merged upstream, Up: Top
|
||
|
||
24 Magit Extensions
|
||
*******************
|
||
|
||
* Menu:
|
||
|
||
* Activating extensions::
|
||
* Interfacing with Subversion::
|
||
* Interfacing with Topgit::
|
||
* Interfacing with StGit::
|
||
|
||
|
||
File: magit.info, Node: Activating extensions, Next: Interfacing with Subversion, Up: Using Magit Extensions
|
||
|
||
24.1 Activating extensions
|
||
==========================
|
||
|
||
Magit comes with a couple of shipped extensions that allow interaction
|
||
with `git-svn', `topgit' and `stgit'. See following sections for
|
||
specific details on how to use them.
|
||
|
||
Extensions can be activated globally or on a per-repository basis.
|
||
Since those extensions are implemented as minor modes, one can use for
|
||
example `M-x magit-topgit-mode' to toggle the `topgit' extension,
|
||
making the corresponding section and commands (un)available.
|
||
|
||
In order to do that automatically (and for every repository), one can
|
||
use for example:
|
||
|
||
(add-hook 'magit-mode-hook 'turn-on-magit-topgit)
|
||
|
||
Magit also allows configuring different extensions, based on the git
|
||
repository configuration.
|
||
|
||
(add-hook 'magit-mode-hook 'magit-load-config-extensions)
|
||
|
||
This will read git configuration variables and activate the relevant
|
||
extensions.
|
||
|
||
For example, after running the following commands, the `topgit'
|
||
extension will be loaded for every repository, while the `svn' one will
|
||
be loaded only for the current one.
|
||
|
||
$ git config --global --add magit.extension topgit
|
||
$ git config --add magit.extension svn
|
||
|
||
Note the `--add' flag, which means that each extension gets its own
|
||
line in the `config' file.
|
||
|
||
|
||
File: magit.info, Node: Interfacing with Subversion, Next: Interfacing with Topgit, Prev: Activating extensions, Up: Using Magit Extensions
|
||
|
||
24.2 Interfacing with Subversion
|
||
================================
|
||
|
||
Typing `N r' runs `git svn rebase', typing `N c' runs `git svn dcommit'
|
||
and typing `N f' runs `git svn fetch'.
|
||
|
||
`N s' will prompt you for a (numeric, Subversion) revision and then
|
||
search for a corresponding Git sha1 for the commit. This is limited to
|
||
the path of the remote Subversion repository. With a prefix (`C-u N s'
|
||
the user will also be prompted for a branch to search in.
|
||
|
||
|
||
File: magit.info, Node: Interfacing with Topgit, Next: Interfacing with StGit, Prev: Interfacing with Subversion, Up: Using Magit Extensions
|
||
|
||
24.3 Interfacing with Topgit
|
||
============================
|
||
|
||
Topgit (http://repo.or.cz/r/topgit.git) is a patch queue manager that
|
||
aims at being close as possible to raw Git, which makes it easy to use
|
||
with Magit. In particular, it does not require to use a different set
|
||
of commands for "commit", "update", and other operations.
|
||
|
||
`magit-topgit.el' provides basic integration with Magit, mostly by
|
||
providing a "Topics" section.
|
||
|
||
Topgit branches can be created the regular way, by using a "t/"
|
||
prefix by convention. So, creating a "t/foo" branch will actually
|
||
populate the "Topics" section with one more branch after committing
|
||
`.topdeps' and `.topmsg'.
|
||
|
||
Also, the way we pull (see *note Pushing and Pulling::) such a
|
||
branch is slightly different, since it requires updating the various
|
||
dependencies of that branch. This should be mostly transparent, except
|
||
in case of conflicts.
|
||
|
||
|
||
File: magit.info, Node: Interfacing with StGit, Prev: Interfacing with Topgit, Up: Using Magit Extensions
|
||
|
||
24.4 Interfacing with StGit
|
||
===========================
|
||
|
||
StGit (http://www.procode.org/stgit) is a Python application providing
|
||
similar functionality to Quilt (i.e. pushing/popping patches to/from a
|
||
stack) on top of Git. These operations are performed using Git
|
||
commands and the patches are stored as Git commit objects, allowing
|
||
easy merging of the StGit patches into other repositories using
|
||
standard Git functionality.
|
||
|
||
`magit-stgit.el' provides basic integration with Magit, mostly by
|
||
providing a "Series" section, whose patches can be seen as regular
|
||
commits through the "visit" action.
|
||
|
||
You can change the current patch in a series with the "apply" action,
|
||
as well as you can delete them using the "discard" action.
|
||
|
||
Additionally, the `magit-stgit-refresh' and `magit-stgit-rebase'
|
||
commands let you perform the respective StGit operations.
|
||
|
||
|
||
File: magit.info, Node: Using Git Directly, Next: GNU Free Documentation License, Prev: Using Magit Extensions, Up: Top
|
||
|
||
25 Using Git Directly
|
||
*********************
|
||
|
||
For situations when Magit doesn't do everything you need, you can run
|
||
raw Git commands using `:'. This will prompt for a Git command, run
|
||
it, and refresh the status buffer. The output can be viewed by typing
|
||
`$'.
|
||
|
||
|
||
File: magit.info, Node: GNU Free Documentation License, Prev: Using Git Directly, Up: Top
|
||
|
||
Appendix A GNU Free Documentation License
|
||
*****************************************
|
||
|
||
Version 1.2, November 2002
|
||
|
||
Copyright (C) 2000,2001,2002 Free Software Foundation, Inc.
|
||
51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||
|
||
Everyone is permitted to copy and distribute verbatim copies
|
||
of this license document, but changing it is not allowed.
|
||
|
||
0. PREAMBLE
|
||
|
||
The purpose of this License is to make a manual, textbook, or other
|
||
functional and useful document "free" in the sense of freedom: to
|
||
assure everyone the effective freedom to copy and redistribute it,
|
||
with or without modifying it, either commercially or
|
||
noncommercially. Secondarily, this License preserves for the
|
||
author and publisher a way to get credit for their work, while not
|
||
being considered responsible for modifications made by others.
|
||
|
||
This License is a kind of "copyleft", which means that derivative
|
||
works of the document must themselves be free in the same sense.
|
||
It complements the GNU General Public License, which is a copyleft
|
||
license designed for free software.
|
||
|
||
We have designed this License in order to use it for manuals for
|
||
free software, because free software needs free documentation: a
|
||
free program should come with manuals providing the same freedoms
|
||
that the software does. But this License is not limited to
|
||
software manuals; it can be used for any textual work, regardless
|
||
of subject matter or whether it is published as a printed book.
|
||
We recommend this License principally for works whose purpose is
|
||
instruction or reference.
|
||
|
||
1. APPLICABILITY AND DEFINITIONS
|
||
|
||
This License applies to any manual or other work, in any medium,
|
||
that contains a notice placed by the copyright holder saying it
|
||
can be distributed under the terms of this License. Such a notice
|
||
grants a world-wide, royalty-free license, unlimited in duration,
|
||
to use that work under the conditions stated herein. The
|
||
"Document", below, refers to any such manual or work. Any member
|
||
of the public is a licensee, and is addressed as "you". You
|
||
accept the license if you copy, modify or distribute the work in a
|
||
way requiring permission under copyright law.
|
||
|
||
A "Modified Version" of the Document means any work containing the
|
||
Document or a portion of it, either copied verbatim, or with
|
||
modifications and/or translated into another language.
|
||
|
||
A "Secondary Section" is a named appendix or a front-matter section
|
||
of the Document that deals exclusively with the relationship of the
|
||
publishers or authors of the Document to the Document's overall
|
||
subject (or to related matters) and contains nothing that could
|
||
fall directly within that overall subject. (Thus, if the Document
|
||
is in part a textbook of mathematics, a Secondary Section may not
|
||
explain any mathematics.) The relationship could be a matter of
|
||
historical connection with the subject or with related matters, or
|
||
of legal, commercial, philosophical, ethical or political position
|
||
regarding them.
|
||
|
||
The "Invariant Sections" are certain Secondary Sections whose
|
||
titles are designated, as being those of Invariant Sections, in
|
||
the notice that says that the Document is released under this
|
||
License. If a section does not fit the above definition of
|
||
Secondary then it is not allowed to be designated as Invariant.
|
||
The Document may contain zero Invariant Sections. If the Document
|
||
does not identify any Invariant Sections then there are none.
|
||
|
||
The "Cover Texts" are certain short passages of text that are
|
||
listed, as Front-Cover Texts or Back-Cover Texts, in the notice
|
||
that says that the Document is released under this License. A
|
||
Front-Cover Text may be at most 5 words, and a Back-Cover Text may
|
||
be at most 25 words.
|
||
|
||
A "Transparent" copy of the Document means a machine-readable copy,
|
||
represented in a format whose specification is available to the
|
||
general public, that is suitable for revising the document
|
||
straightforwardly with generic text editors or (for images
|
||
composed of pixels) generic paint programs or (for drawings) some
|
||
widely available drawing editor, and that is suitable for input to
|
||
text formatters or for automatic translation to a variety of
|
||
formats suitable for input to text formatters. A copy made in an
|
||
otherwise Transparent file format whose markup, or absence of
|
||
markup, has been arranged to thwart or discourage subsequent
|
||
modification by readers is not Transparent. An image format is
|
||
not Transparent if used for any substantial amount of text. A
|
||
copy that is not "Transparent" is called "Opaque".
|
||
|
||
Examples of suitable formats for Transparent copies include plain
|
||
ASCII without markup, Texinfo input format, LaTeX input format,
|
||
SGML or XML using a publicly available DTD, and
|
||
standard-conforming simple HTML, PostScript or PDF designed for
|
||
human modification. Examples of transparent image formats include
|
||
PNG, XCF and JPG. Opaque formats include proprietary formats that
|
||
can be read and edited only by proprietary word processors, SGML or
|
||
XML for which the DTD and/or processing tools are not generally
|
||
available, and the machine-generated HTML, PostScript or PDF
|
||
produced by some word processors for output purposes only.
|
||
|
||
The "Title Page" means, for a printed book, the title page itself,
|
||
plus such following pages as are needed to hold, legibly, the
|
||
material this License requires to appear in the title page. For
|
||
works in formats which do not have any title page as such, "Title
|
||
Page" means the text near the most prominent appearance of the
|
||
work's title, preceding the beginning of the body of the text.
|
||
|
||
A section "Entitled XYZ" means a named subunit of the Document
|
||
whose title either is precisely XYZ or contains XYZ in parentheses
|
||
following text that translates XYZ in another language. (Here XYZ
|
||
stands for a specific section name mentioned below, such as
|
||
"Acknowledgements", "Dedications", "Endorsements", or "History".)
|
||
To "Preserve the Title" of such a section when you modify the
|
||
Document means that it remains a section "Entitled XYZ" according
|
||
to this definition.
|
||
|
||
The Document may include Warranty Disclaimers next to the notice
|
||
which states that this License applies to the Document. These
|
||
Warranty Disclaimers are considered to be included by reference in
|
||
this License, but only as regards disclaiming warranties: any other
|
||
implication that these Warranty Disclaimers may have is void and
|
||
has no effect on the meaning of this License.
|
||
|
||
2. VERBATIM COPYING
|
||
|
||
You may copy and distribute the Document in any medium, either
|
||
commercially or noncommercially, provided that this License, the
|
||
copyright notices, and the license notice saying this License
|
||
applies to the Document are reproduced in all copies, and that you
|
||
add no other conditions whatsoever to those of this License. You
|
||
may not use technical measures to obstruct or control the reading
|
||
or further copying of the copies you make or distribute. However,
|
||
you may accept compensation in exchange for copies. If you
|
||
distribute a large enough number of copies you must also follow
|
||
the conditions in section 3.
|
||
|
||
You may also lend copies, under the same conditions stated above,
|
||
and you may publicly display copies.
|
||
|
||
3. COPYING IN QUANTITY
|
||
|
||
If you publish printed copies (or copies in media that commonly
|
||
have printed covers) of the Document, numbering more than 100, and
|
||
the Document's license notice requires Cover Texts, you must
|
||
enclose the copies in covers that carry, clearly and legibly, all
|
||
these Cover Texts: Front-Cover Texts on the front cover, and
|
||
Back-Cover Texts on the back cover. Both covers must also clearly
|
||
and legibly identify you as the publisher of these copies. The
|
||
front cover must present the full title with all words of the
|
||
title equally prominent and visible. You may add other material
|
||
on the covers in addition. Copying with changes limited to the
|
||
covers, as long as they preserve the title of the Document and
|
||
satisfy these conditions, can be treated as verbatim copying in
|
||
other respects.
|
||
|
||
If the required texts for either cover are too voluminous to fit
|
||
legibly, you should put the first ones listed (as many as fit
|
||
reasonably) on the actual cover, and continue the rest onto
|
||
adjacent pages.
|
||
|
||
If you publish or distribute Opaque copies of the Document
|
||
numbering more than 100, you must either include a
|
||
machine-readable Transparent copy along with each Opaque copy, or
|
||
state in or with each Opaque copy a computer-network location from
|
||
which the general network-using public has access to download
|
||
using public-standard network protocols a complete Transparent
|
||
copy of the Document, free of added material. If you use the
|
||
latter option, you must take reasonably prudent steps, when you
|
||
begin distribution of Opaque copies in quantity, to ensure that
|
||
this Transparent copy will remain thus accessible at the stated
|
||
location until at least one year after the last time you
|
||
distribute an Opaque copy (directly or through your agents or
|
||
retailers) of that edition to the public.
|
||
|
||
It is requested, but not required, that you contact the authors of
|
||
the Document well before redistributing any large number of
|
||
copies, to give them a chance to provide you with an updated
|
||
version of the Document.
|
||
|
||
4. MODIFICATIONS
|
||
|
||
You may copy and distribute a Modified Version of the Document
|
||
under the conditions of sections 2 and 3 above, provided that you
|
||
release the Modified Version under precisely this License, with
|
||
the Modified Version filling the role of the Document, thus
|
||
licensing distribution and modification of the Modified Version to
|
||
whoever possesses a copy of it. In addition, you must do these
|
||
things in the Modified Version:
|
||
|
||
A. Use in the Title Page (and on the covers, if any) a title
|
||
distinct from that of the Document, and from those of
|
||
previous versions (which should, if there were any, be listed
|
||
in the History section of the Document). You may use the
|
||
same title as a previous version if the original publisher of
|
||
that version gives permission.
|
||
|
||
B. List on the Title Page, as authors, one or more persons or
|
||
entities responsible for authorship of the modifications in
|
||
the Modified Version, together with at least five of the
|
||
principal authors of the Document (all of its principal
|
||
authors, if it has fewer than five), unless they release you
|
||
from this requirement.
|
||
|
||
C. State on the Title page the name of the publisher of the
|
||
Modified Version, as the publisher.
|
||
|
||
D. Preserve all the copyright notices of the Document.
|
||
|
||
E. Add an appropriate copyright notice for your modifications
|
||
adjacent to the other copyright notices.
|
||
|
||
F. Include, immediately after the copyright notices, a license
|
||
notice giving the public permission to use the Modified
|
||
Version under the terms of this License, in the form shown in
|
||
the Addendum below.
|
||
|
||
G. Preserve in that license notice the full lists of Invariant
|
||
Sections and required Cover Texts given in the Document's
|
||
license notice.
|
||
|
||
H. Include an unaltered copy of this License.
|
||
|
||
I. Preserve the section Entitled "History", Preserve its Title,
|
||
and add to it an item stating at least the title, year, new
|
||
authors, and publisher of the Modified Version as given on
|
||
the Title Page. If there is no section Entitled "History" in
|
||
the Document, create one stating the title, year, authors,
|
||
and publisher of the Document as given on its Title Page,
|
||
then add an item describing the Modified Version as stated in
|
||
the previous sentence.
|
||
|
||
J. Preserve the network location, if any, given in the Document
|
||
for public access to a Transparent copy of the Document, and
|
||
likewise the network locations given in the Document for
|
||
previous versions it was based on. These may be placed in
|
||
the "History" section. You may omit a network location for a
|
||
work that was published at least four years before the
|
||
Document itself, or if the original publisher of the version
|
||
it refers to gives permission.
|
||
|
||
K. For any section Entitled "Acknowledgements" or "Dedications",
|
||
Preserve the Title of the section, and preserve in the
|
||
section all the substance and tone of each of the contributor
|
||
acknowledgements and/or dedications given therein.
|
||
|
||
L. Preserve all the Invariant Sections of the Document,
|
||
unaltered in their text and in their titles. Section numbers
|
||
or the equivalent are not considered part of the section
|
||
titles.
|
||
|
||
M. Delete any section Entitled "Endorsements". Such a section
|
||
may not be included in the Modified Version.
|
||
|
||
N. Do not retitle any existing section to be Entitled
|
||
"Endorsements" or to conflict in title with any Invariant
|
||
Section.
|
||
|
||
O. Preserve any Warranty Disclaimers.
|
||
|
||
If the Modified Version includes new front-matter sections or
|
||
appendices that qualify as Secondary Sections and contain no
|
||
material copied from the Document, you may at your option
|
||
designate some or all of these sections as invariant. To do this,
|
||
add their titles to the list of Invariant Sections in the Modified
|
||
Version's license notice. These titles must be distinct from any
|
||
other section titles.
|
||
|
||
You may add a section Entitled "Endorsements", provided it contains
|
||
nothing but endorsements of your Modified Version by various
|
||
parties--for example, statements of peer review or that the text
|
||
has been approved by an organization as the authoritative
|
||
definition of a standard.
|
||
|
||
You may add a passage of up to five words as a Front-Cover Text,
|
||
and a passage of up to 25 words as a Back-Cover Text, to the end
|
||
of the list of Cover Texts in the Modified Version. Only one
|
||
passage of Front-Cover Text and one of Back-Cover Text may be
|
||
added by (or through arrangements made by) any one entity. If the
|
||
Document already includes a cover text for the same cover,
|
||
previously added by you or by arrangement made by the same entity
|
||
you are acting on behalf of, you may not add another; but you may
|
||
replace the old one, on explicit permission from the previous
|
||
publisher that added the old one.
|
||
|
||
The author(s) and publisher(s) of the Document do not by this
|
||
License give permission to use their names for publicity for or to
|
||
assert or imply endorsement of any Modified Version.
|
||
|
||
5. COMBINING DOCUMENTS
|
||
|
||
You may combine the Document with other documents released under
|
||
this License, under the terms defined in section 4 above for
|
||
modified versions, provided that you include in the combination
|
||
all of the Invariant Sections of all of the original documents,
|
||
unmodified, and list them all as Invariant Sections of your
|
||
combined work in its license notice, and that you preserve all
|
||
their Warranty Disclaimers.
|
||
|
||
The combined work need only contain one copy of this License, and
|
||
multiple identical Invariant Sections may be replaced with a single
|
||
copy. If there are multiple Invariant Sections with the same name
|
||
but different contents, make the title of each such section unique
|
||
by adding at the end of it, in parentheses, the name of the
|
||
original author or publisher of that section if known, or else a
|
||
unique number. Make the same adjustment to the section titles in
|
||
the list of Invariant Sections in the license notice of the
|
||
combined work.
|
||
|
||
In the combination, you must combine any sections Entitled
|
||
"History" in the various original documents, forming one section
|
||
Entitled "History"; likewise combine any sections Entitled
|
||
"Acknowledgements", and any sections Entitled "Dedications". You
|
||
must delete all sections Entitled "Endorsements."
|
||
|
||
6. COLLECTIONS OF DOCUMENTS
|
||
|
||
You may make a collection consisting of the Document and other
|
||
documents released under this License, and replace the individual
|
||
copies of this License in the various documents with a single copy
|
||
that is included in the collection, provided that you follow the
|
||
rules of this License for verbatim copying of each of the
|
||
documents in all other respects.
|
||
|
||
You may extract a single document from such a collection, and
|
||
distribute it individually under this License, provided you insert
|
||
a copy of this License into the extracted document, and follow
|
||
this License in all other respects regarding verbatim copying of
|
||
that document.
|
||
|
||
7. AGGREGATION WITH INDEPENDENT WORKS
|
||
|
||
A compilation of the Document or its derivatives with other
|
||
separate and independent documents or works, in or on a volume of
|
||
a storage or distribution medium, is called an "aggregate" if the
|
||
copyright resulting from the compilation is not used to limit the
|
||
legal rights of the compilation's users beyond what the individual
|
||
works permit. When the Document is included in an aggregate, this
|
||
License does not apply to the other works in the aggregate which
|
||
are not themselves derivative works of the Document.
|
||
|
||
If the Cover Text requirement of section 3 is applicable to these
|
||
copies of the Document, then if the Document is less than one half
|
||
of the entire aggregate, the Document's Cover Texts may be placed
|
||
on covers that bracket the Document within the aggregate, or the
|
||
electronic equivalent of covers if the Document is in electronic
|
||
form. Otherwise they must appear on printed covers that bracket
|
||
the whole aggregate.
|
||
|
||
8. TRANSLATION
|
||
|
||
Translation is considered a kind of modification, so you may
|
||
distribute translations of the Document under the terms of section
|
||
4. Replacing Invariant Sections with translations requires special
|
||
permission from their copyright holders, but you may include
|
||
translations of some or all Invariant Sections in addition to the
|
||
original versions of these Invariant Sections. You may include a
|
||
translation of this License, and all the license notices in the
|
||
Document, and any Warranty Disclaimers, provided that you also
|
||
include the original English version of this License and the
|
||
original versions of those notices and disclaimers. In case of a
|
||
disagreement between the translation and the original version of
|
||
this License or a notice or disclaimer, the original version will
|
||
prevail.
|
||
|
||
If a section in the Document is Entitled "Acknowledgements",
|
||
"Dedications", or "History", the requirement (section 4) to
|
||
Preserve its Title (section 1) will typically require changing the
|
||
actual title.
|
||
|
||
9. TERMINATION
|
||
|
||
You may not copy, modify, sublicense, or distribute the Document
|
||
except as expressly provided for under this License. Any other
|
||
attempt to copy, modify, sublicense or distribute the Document is
|
||
void, and will automatically terminate your rights under this
|
||
License. However, parties who have received copies, or rights,
|
||
from you under this License will not have their licenses
|
||
terminated so long as such parties remain in full compliance.
|
||
|
||
10. FUTURE REVISIONS OF THIS LICENSE
|
||
|
||
The Free Software Foundation may publish new, revised versions of
|
||
the GNU Free Documentation License from time to time. Such new
|
||
versions will be similar in spirit to the present version, but may
|
||
differ in detail to address new problems or concerns. See
|
||
`http://www.gnu.org/copyleft/'.
|
||
|
||
Each version of the License is given a distinguishing version
|
||
number. If the Document specifies that a particular numbered
|
||
version of this License "or any later version" applies to it, you
|
||
have the option of following the terms and conditions either of
|
||
that specified version or of any later version that has been
|
||
published (not as a draft) by the Free Software Foundation. If
|
||
the Document does not specify a version number of this License,
|
||
you may choose any version ever published (not as a draft) by the
|
||
Free Software Foundation.
|
||
|
||
ADDENDUM: How to use this License for your documents
|
||
====================================================
|
||
|
||
To use this License in a document you have written, include a copy of
|
||
the License in the document and put the following copyright and license
|
||
notices just after the title page:
|
||
|
||
Copyright (C) YEAR YOUR NAME.
|
||
Permission is granted to copy, distribute and/or modify this document
|
||
under the terms of the GNU Free Documentation License, Version 1.2
|
||
or any later version published by the Free Software Foundation;
|
||
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
|
||
Texts. A copy of the license is included in the section entitled ``GNU
|
||
Free Documentation License''.
|
||
|
||
If you have Invariant Sections, Front-Cover Texts and Back-Cover
|
||
Texts, replace the "with...Texts." line with this:
|
||
|
||
with the Invariant Sections being LIST THEIR TITLES, with
|
||
the Front-Cover Texts being LIST, and with the Back-Cover Texts
|
||
being LIST.
|
||
|
||
If you have Invariant Sections without Cover Texts, or some other
|
||
combination of the three, merge those two alternatives to suit the
|
||
situation.
|
||
|
||
If your document contains nontrivial examples of program code, we
|
||
recommend releasing these examples in parallel under your choice of
|
||
free software license, such as the GNU General Public License, to
|
||
permit their use in free software.
|
||
|
||
|
||
|
||
Tag Table:
|
||
Node: Top1609
|
||
Node: Introduction3622
|
||
Node: Acknowledgments5115
|
||
Node: Sections5663
|
||
Node: Status8213
|
||
Node: Untracked files10952
|
||
Node: Staging and Committing12157
|
||
Node: History15562
|
||
Node: Reflogs18744
|
||
Node: Commit Buffer19148
|
||
Node: Diffing20474
|
||
Node: Tagging21461
|
||
Node: Resetting21911
|
||
Node: Stashing23435
|
||
Node: Branches and Remotes24506
|
||
Node: Branches Popup25327
|
||
Node: Remotes Popup26589
|
||
Node: Branches in the Branch Manager26940
|
||
Node: Remotes in the Branch Manager28112
|
||
Node: Wazzup28673
|
||
Node: Merging29466
|
||
Node: Rebasing30516
|
||
Node: Interactive Rebasing31342
|
||
Node: Rewriting32637
|
||
Node: Pushing and Pulling35947
|
||
Node: Submodules37877
|
||
Node: Bisecting38325
|
||
Node: Finding commits not merged upstream39560
|
||
Node: Using Magit Extensions40826
|
||
Node: Activating extensions41122
|
||
Node: Interfacing with Subversion42507
|
||
Node: Interfacing with Topgit43107
|
||
Node: Interfacing with StGit44145
|
||
Node: Using Git Directly45114
|
||
Node: GNU Free Documentation License45502
|
||
|
||
End Tag Table
|
||
|
||
|
||
Local Variables:
|
||
coding: utf-8
|
||
End:
|