Created
January 15, 2015 23:44
-
-
Save v6/78c2d4eba484d169773d to your computer and use it in GitHub Desktop.
Git Every Day
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Git Every Day - Individual Developer | |
------------------------------------------------------------------------ | |
A developer working as a participant in a group project needs to | |
learn how to communicate with others, and uses these commands in | |
addition to the ones needed by a standalone developer. | |
* linkgit:git-clone[1] from the upstream to prime your local | |
repository. | |
* linkgit:git-pull[1] and linkgit:git-fetch[1] from "origin" | |
to keep up-to-date with the upstream. | |
* linkgit:git-push[1] to shared repository, if you adopt CVS | |
style shared repository workflow. | |
* linkgit:git-format-patch[1] to prepare e-mail submission, if | |
you adopt Linux kernel-style public forum workflow. | |
Examples | |
~~~~~~~~ | |
Clone the upstream and work on it. Feed changes to upstream.:: | |
+ | |
------------ | |
$ git clone git://git.kernel.org/pub/scm/.../torvalds/linux-2.6 my2.6 | |
$ cd my2.6 | |
$ edit/compile/test; git commit -a -s <1> | |
$ git format-patch origin <2> | |
$ git pull <3> | |
$ git log -p ORIG_HEAD.. arch/i386 include/asm-i386 <4> | |
$ git pull git://git.kernel.org/pub/.../jgarzik/libata-dev.git ALL <5> | |
$ git reset --hard ORIG_HEAD <6> | |
$ git gc <7> | |
$ git fetch --tags <8> | |
------------ | |
+ | |
<1> repeat as needed. | |
<2> extract patches from your branch for e-mail submission. | |
<3> `git pull` fetches from `origin` by default and merges into the | |
current branch. | |
<4> immediately after pulling, look at the changes done upstream | |
since last time we checked, only in the | |
area we are interested in. | |
<5> fetch from a specific branch from a specific repository and merge. | |
<6> revert the pull. | |
<7> garbage collect leftover objects from reverted pull. | |
<8> from time to time, obtain official tags from the `origin` | |
and store them under `.git/refs/tags/`. | |
Push into another repository.:: | |
+ | |
------------ | |
satellite$ git clone mothership:frotz frotz <1> | |
satellite$ cd frotz | |
satellite$ git config --get-regexp '^(remote|branch)\.' <2> | |
remote.origin.url mothership:frotz | |
remote.origin.fetch refs/heads/*:refs/remotes/origin/* | |
branch.master.remote origin | |
branch.master.merge refs/heads/master | |
satellite$ git config remote.origin.push \ | |
master:refs/remotes/satellite/master <3> | |
satellite$ edit/compile/test/commit | |
satellite$ git push origin <4> | |
mothership$ cd frotz | |
mothership$ git checkout master | |
mothership$ git merge satellite/master <5> | |
------------ | |
+ | |
<1> mothership machine has a frotz repository under your home | |
directory; clone from it to start a repository on the satellite | |
machine. | |
<2> clone sets these configuration variables by default. | |
It arranges `git pull` to fetch and store the branches of mothership | |
machine to local `remotes/origin/*` tracking branches. | |
<3> arrange `git push` to push local `master` branch to | |
`remotes/satellite/master` branch of the mothership machine. | |
<4> push will stash our work away on `remotes/satellite/master` | |
tracking branch on the mothership machine. You could use this as | |
a back-up method. | |
<5> on mothership machine, merge the work done on the satellite | |
machine into the master branch. | |
Branch off of a specific tag.:: | |
+ | |
------------ | |
$ git checkout -b private2.6.14 v2.6.14 <1> | |
$ edit/compile/test; git commit -a | |
$ git checkout master | |
$ git format-patch -k -m --stdout v2.6.14..private2.6.14 | | |
git am -3 -k <2> | |
------------ | |
+ | |
<1> create a private branch based on a well known (but somewhat behind) | |
tag. | |
<2> forward port all changes in `private2.6.14` branch to `master` branch | |
without a formal "merging". |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment