user-manual: miscellaneous editing
I cherry-picked some additional miscellaneous fixes from those suggested by Santi Béjar, including fixes to: - correct discussion of repository/HEAD->repository shortcut - add mention of git-mergetool - add mention of --track - mention "-f" as well as "+" for fetch Cc: Santi Béjar <sbejar@gmail.com> Signed-off-by: "J. Bruce Fields" <bfields@citi.umich.edu>
This commit is contained in:
parent
58c19d1f95
commit
c64415e29e
@ -57,7 +57,7 @@ Managing branches
|
|||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
-----------------------------------------------
|
-----------------------------------------------
|
||||||
$ git branch # list all branches in this repo
|
$ git branch # list all local branches in this repo
|
||||||
$ git checkout test # switch working directory to branch "test"
|
$ git checkout test # switch working directory to branch "test"
|
||||||
$ git branch new # create branch "new" starting at current HEAD
|
$ git branch new # create branch "new" starting at current HEAD
|
||||||
$ git branch -d new # delete branch "new"
|
$ git branch -d new # delete branch "new"
|
||||||
@ -496,8 +496,8 @@ git branch <branch> <start-point>::
|
|||||||
including using a branch name or a tag name
|
including using a branch name or a tag name
|
||||||
git branch -d <branch>::
|
git branch -d <branch>::
|
||||||
delete the branch <branch>; if the branch you are deleting
|
delete the branch <branch>; if the branch you are deleting
|
||||||
points to a commit which is not reachable from this branch,
|
points to a commit which is not reachable from the current
|
||||||
this command will fail with a warning.
|
branch, this command will fail with a warning.
|
||||||
git branch -D <branch>::
|
git branch -D <branch>::
|
||||||
even if the branch points to a commit not reachable
|
even if the branch points to a commit not reachable
|
||||||
from the current branch, you may know that that commit
|
from the current branch, you may know that that commit
|
||||||
@ -602,13 +602,9 @@ shorthand:
|
|||||||
The full name is occasionally useful if, for example, there ever
|
The full name is occasionally useful if, for example, there ever
|
||||||
exists a tag and a branch with the same name.
|
exists a tag and a branch with the same name.
|
||||||
|
|
||||||
As another useful shortcut, if the repository "origin" posesses only
|
As another useful shortcut, the "HEAD" of a repository can be referred
|
||||||
a single branch, you can refer to that branch as just "origin".
|
to just using the name of that repository. So, for example, "origin"
|
||||||
|
is usually a shortcut for the HEAD branch in the repository "origin".
|
||||||
More generally, if you have defined a remote repository named
|
|
||||||
"example", you can refer to the branch in that repository as
|
|
||||||
"example". And for a repository with multiple branches, this will
|
|
||||||
refer to the branch designated as the "HEAD" branch.
|
|
||||||
|
|
||||||
For the complete list of paths which git checks for references, and
|
For the complete list of paths which git checks for references, and
|
||||||
the order it uses to decide which to choose when there are multiple
|
the order it uses to decide which to choose when there are multiple
|
||||||
@ -832,10 +828,10 @@ $ git tag stable-1 1b2e1d63ff
|
|||||||
|
|
||||||
You can use stable-1 to refer to the commit 1b2e1d63ff.
|
You can use stable-1 to refer to the commit 1b2e1d63ff.
|
||||||
|
|
||||||
This creates a "lightweight" tag. If the tag is a tag you wish to
|
This creates a "lightweight" tag. If you would also like to include a
|
||||||
share with others, and possibly sign cryptographically, then you
|
comment with the tag, and possibly sign it cryptographically, then you
|
||||||
should create a tag object instead; see the gitlink:git-tag[1] man
|
should create a tag object instead; see the gitlink:git-tag[1] man page
|
||||||
page for details.
|
for details.
|
||||||
|
|
||||||
[[browsing-revisions]]
|
[[browsing-revisions]]
|
||||||
Browsing revisions
|
Browsing revisions
|
||||||
@ -1176,6 +1172,8 @@ $ git diff --cached # difference between HEAD and the index; what
|
|||||||
$ git diff # difference between the index file and your
|
$ git diff # difference between the index file and your
|
||||||
# working directory; changes that would not
|
# working directory; changes that would not
|
||||||
# be included if you ran "commit" now.
|
# be included if you ran "commit" now.
|
||||||
|
$ git diff HEAD # difference between HEAD and working tree; what
|
||||||
|
# would be committed if you ran "commit -a" now.
|
||||||
$ git status # a brief per-file summary of the above.
|
$ git status # a brief per-file summary of the above.
|
||||||
-------------------------------------------------
|
-------------------------------------------------
|
||||||
|
|
||||||
@ -1223,8 +1221,6 @@ If you examine the resulting commit using gitk, you will see that it
|
|||||||
has two parents, one pointing to the top of the current branch, and
|
has two parents, one pointing to the top of the current branch, and
|
||||||
one to the top of the other branch.
|
one to the top of the other branch.
|
||||||
|
|
||||||
In more detail:
|
|
||||||
|
|
||||||
[[resolving-a-merge]]
|
[[resolving-a-merge]]
|
||||||
Resolving a merge
|
Resolving a merge
|
||||||
-----------------
|
-----------------
|
||||||
@ -1361,6 +1357,9 @@ $ gitk --merge
|
|||||||
These will display all commits which exist only on HEAD or on
|
These will display all commits which exist only on HEAD or on
|
||||||
MERGE_HEAD, and which touch an unmerged file.
|
MERGE_HEAD, and which touch an unmerged file.
|
||||||
|
|
||||||
|
You may also use gitlink:git-mergetool, which lets you merge the
|
||||||
|
unmerged files using external tools such as emacs or kdiff3.
|
||||||
|
|
||||||
Each time you resolve the conflicts in a file and update the index:
|
Each time you resolve the conflicts in a file and update the index:
|
||||||
|
|
||||||
-------------------------------------------------
|
-------------------------------------------------
|
||||||
@ -1705,9 +1704,16 @@ so often you can accomplish the above with just
|
|||||||
$ git pull
|
$ git pull
|
||||||
-------------------------------------------------
|
-------------------------------------------------
|
||||||
|
|
||||||
See the descriptions of the branch.<name>.remote and
|
See the descriptions of the branch.<name>.remote and branch.<name>.merge
|
||||||
branch.<name>.merge options in gitlink:git-config[1] to learn
|
options in gitlink:git-config[1] to learn how to control these defaults
|
||||||
how to control these defaults depending on the current branch.
|
depending on the current branch. Also note that the --track option to
|
||||||
|
gitlink:git-branch[1] and gitlink:git-checkout[1] can be used to
|
||||||
|
automatically set the default remote branch to pull from at the time
|
||||||
|
that a branch is created:
|
||||||
|
|
||||||
|
-------------------------------------------------
|
||||||
|
$ git checkout --track -b origin/maint maint
|
||||||
|
-------------------------------------------------
|
||||||
|
|
||||||
In addition to saving you keystrokes, "git pull" also helps you by
|
In addition to saving you keystrokes, "git pull" also helps you by
|
||||||
producing a default commit message documenting the branch and
|
producing a default commit message documenting the branch and
|
||||||
@ -1830,14 +1836,14 @@ Now, assume your personal repository is in the directory ~/proj. We
|
|||||||
first create a new clone of the repository:
|
first create a new clone of the repository:
|
||||||
|
|
||||||
-------------------------------------------------
|
-------------------------------------------------
|
||||||
$ git clone --bare proj-clone.git
|
$ git clone --bare proj.git
|
||||||
-------------------------------------------------
|
-------------------------------------------------
|
||||||
|
|
||||||
The resulting directory proj-clone.git will contains a "bare" git
|
The resulting directory proj.git will contains a "bare" git
|
||||||
repository--it is just the contents of the ".git" directory, without
|
repository--it is just the contents of the ".git" directory, without
|
||||||
a checked-out copy of a working directory.
|
a checked-out copy of a working directory.
|
||||||
|
|
||||||
Next, copy proj-clone.git to the server where you plan to host the
|
Next, copy proj.git to the server where you plan to host the
|
||||||
public repository. You can use scp, rsync, or whatever is most
|
public repository. You can use scp, rsync, or whatever is most
|
||||||
convenient.
|
convenient.
|
||||||
|
|
||||||
@ -1863,7 +1869,7 @@ adjustments to give web clients some extra information they need:
|
|||||||
-------------------------------------------------
|
-------------------------------------------------
|
||||||
$ mv proj.git /home/you/public_html/proj.git
|
$ mv proj.git /home/you/public_html/proj.git
|
||||||
$ cd proj.git
|
$ cd proj.git
|
||||||
$ git update-server-info
|
$ git --bare update-server-info
|
||||||
$ chmod a+x hooks/post-update
|
$ chmod a+x hooks/post-update
|
||||||
-------------------------------------------------
|
-------------------------------------------------
|
||||||
|
|
||||||
@ -1930,7 +1936,7 @@ As with git-fetch, you may also set up configuration options to
|
|||||||
save typing; so, for example, after
|
save typing; so, for example, after
|
||||||
|
|
||||||
-------------------------------------------------
|
-------------------------------------------------
|
||||||
$ cat >.git/config <<EOF
|
$ cat >>.git/config <<EOF
|
||||||
[remote "public-repo"]
|
[remote "public-repo"]
|
||||||
url = ssh://yourserver.com/~you/proj.git
|
url = ssh://yourserver.com/~you/proj.git
|
||||||
EOF
|
EOF
|
||||||
@ -2312,9 +2318,15 @@ descendant of the old head, you may force the update with:
|
|||||||
$ git fetch git://example.com/proj.git +master:refs/remotes/example/master
|
$ git fetch git://example.com/proj.git +master:refs/remotes/example/master
|
||||||
-------------------------------------------------
|
-------------------------------------------------
|
||||||
|
|
||||||
Note the addition of the "+" sign. Be aware that commits that the
|
Note the addition of the "+" sign. Alternatively, you can use the "-f"
|
||||||
old version of example/master pointed at may be lost, as we saw in
|
flag to force updates of all the fetched branches, as in:
|
||||||
the previous section.
|
|
||||||
|
-------------------------------------------------
|
||||||
|
$ git fetch -f origin
|
||||||
|
-------------------------------------------------
|
||||||
|
|
||||||
|
Be aware that commits that the old version of example/master pointed at
|
||||||
|
may be lost, as we saw in the previous section.
|
||||||
|
|
||||||
[[remote-branch-configuration]]
|
[[remote-branch-configuration]]
|
||||||
Configuring remote branches
|
Configuring remote branches
|
||||||
@ -2400,7 +2412,7 @@ approximated by the SHA1 hash of the object itself. Objects may refer
|
|||||||
to other objects (by referencing their SHA1 hash), and so you can
|
to other objects (by referencing their SHA1 hash), and so you can
|
||||||
build up a hierarchy of objects.
|
build up a hierarchy of objects.
|
||||||
|
|
||||||
All objects have a statically determined "type" aka "tag", which is
|
All objects have a statically determined "type" which is
|
||||||
determined at object creation time, and which identifies the format of
|
determined at object creation time, and which identifies the format of
|
||||||
the object (i.e. how it is used, and how it can refer to other
|
the object (i.e. how it is used, and how it can refer to other
|
||||||
objects). There are currently four different object types: "blob",
|
objects). There are currently four different object types: "blob",
|
||||||
@ -2423,7 +2435,7 @@ the time of the commit). In addition, a "commit" refers to one or more
|
|||||||
that directory hierarchy.
|
that directory hierarchy.
|
||||||
|
|
||||||
As a special case, a commit object with no parents is called the "root"
|
As a special case, a commit object with no parents is called the "root"
|
||||||
object, and is the point of an initial project commit. Each project
|
commit, and is the point of an initial project commit. Each project
|
||||||
must have at least one root, and while you can tie several different
|
must have at least one root, and while you can tie several different
|
||||||
root objects together into one project by creating a commit object which
|
root objects together into one project by creating a commit object which
|
||||||
has two or more separate roots as its ultimate parents, that's probably
|
has two or more separate roots as its ultimate parents, that's probably
|
||||||
@ -2542,7 +2554,7 @@ that the tree is "good" or that the merge information makes sense.
|
|||||||
The parents do not have to actually have any relationship with the
|
The parents do not have to actually have any relationship with the
|
||||||
result, for example.
|
result, for example.
|
||||||
|
|
||||||
Note on commits: unlike real SCM's, commits do not contain
|
Note on commits: unlike some SCM's, commits do not contain
|
||||||
rename information or file mode change information. All of that is
|
rename information or file mode change information. All of that is
|
||||||
implicit in the trees involved (the result tree, and the result trees
|
implicit in the trees involved (the result tree, and the result trees
|
||||||
of the parents), and describing that makes no sense in this idiotic
|
of the parents), and describing that makes no sense in this idiotic
|
||||||
@ -2609,7 +2621,7 @@ The "index" aka "Current Directory Cache"
|
|||||||
-----------------------------------------
|
-----------------------------------------
|
||||||
|
|
||||||
The index is a simple binary file, which contains an efficient
|
The index is a simple binary file, which contains an efficient
|
||||||
representation of a virtual directory content at some random time. It
|
representation of the contents of a virtual directory. It
|
||||||
does so by a simple array that associates a set of names, dates,
|
does so by a simple array that associates a set of names, dates,
|
||||||
permissions and content (aka "blob") objects together. The cache is
|
permissions and content (aka "blob") objects together. The cache is
|
||||||
always kept ordered by name, and names are unique (with a few very
|
always kept ordered by name, and names are unique (with a few very
|
||||||
@ -2912,7 +2924,7 @@ since the tree object information is always the first line in a commit
|
|||||||
object.
|
object.
|
||||||
|
|
||||||
Once you know the three trees you are going to merge (the one "original"
|
Once you know the three trees you are going to merge (the one "original"
|
||||||
tree, aka the common case, and the two "result" trees, aka the branches
|
tree, aka the common tree, and the two "result" trees, aka the branches
|
||||||
you want to merge), you do a "merge" read into the index. This will
|
you want to merge), you do a "merge" read into the index. This will
|
||||||
complain if it has to throw away your old index contents, so you should
|
complain if it has to throw away your old index contents, so you should
|
||||||
make sure that you've committed those - in fact you would normally
|
make sure that you've committed those - in fact you would normally
|
||||||
@ -2966,14 +2978,14 @@ obviously the final outcome is what is in `HEAD`. What the
|
|||||||
above example shows is that file `hello.c` was changed from
|
above example shows is that file `hello.c` was changed from
|
||||||
`$orig` to `HEAD` and `$orig` to `$target` in a different way.
|
`$orig` to `HEAD` and `$orig` to `$target` in a different way.
|
||||||
You could resolve this by running your favorite 3-way merge
|
You could resolve this by running your favorite 3-way merge
|
||||||
program, e.g. `diff3` or `merge`, on the blob objects from
|
program, e.g. `diff3`, `merge`, or git's own merge-file, on
|
||||||
these three stages yourself, like this:
|
the blob objects from these three stages yourself, like this:
|
||||||
|
|
||||||
------------------------------------------------
|
------------------------------------------------
|
||||||
$ git-cat-file blob 263414f... >hello.c~1
|
$ git-cat-file blob 263414f... >hello.c~1
|
||||||
$ git-cat-file blob 06fa6a2... >hello.c~2
|
$ git-cat-file blob 06fa6a2... >hello.c~2
|
||||||
$ git-cat-file blob cc44c73... >hello.c~3
|
$ git-cat-file blob cc44c73... >hello.c~3
|
||||||
$ merge hello.c~2 hello.c~1 hello.c~3
|
$ git merge-file hello.c~2 hello.c~1 hello.c~3
|
||||||
------------------------------------------------
|
------------------------------------------------
|
||||||
|
|
||||||
This would leave the merge result in `hello.c~2` file, along
|
This would leave the merge result in `hello.c~2` file, along
|
||||||
|
Loading…
Reference in New Issue
Block a user