summaryrefslogtreecommitdiffhomepage
path: root/git.html.markdown
diff options
context:
space:
mode:
Diffstat (limited to 'git.html.markdown')
-rw-r--r--git.html.markdown96
1 files changed, 58 insertions, 38 deletions
diff --git a/git.html.markdown b/git.html.markdown
index bf8fce0c..b1347309 100644
--- a/git.html.markdown
+++ b/git.html.markdown
@@ -8,17 +8,17 @@ contributors:
filename: LearnGit.txt
---
-Git is a distributed version control and source code management system.
+Git is a distributed version control and source code management system.
-It does this through a series of snapshots of your project, and it works
-with those snapshots to provide you with functionality to version and
+It does this through a series of snapshots of your project, and it works
+with those snapshots to provide you with functionality to version and
manage your source code.
## Versioning Concepts
### What is version control?
-Version control is a system that records changes to a file, or set of files, over time.
+Version control is a system that records changes to a file(s), over time.
### Centralized Versioning VS Distributed Versioning
@@ -42,8 +42,9 @@ Version control is a system that records changes to a file, or set of files, ove
### Repository
-A set of files, directories, historical records, commits, and heads. Imagine it as a source code data structure,
-with the attribute that each source code "element" gives you access to its revision history, among other things.
+A set of files, directories, historical records, commits, and heads. Imagine it
+as a source code data structure, with the attribute that each source code
+"element" gives you access to its revision history, among other things.
A git repository is comprised of the .git directory & working tree.
@@ -54,32 +55,33 @@ The .git directory contains all the configurations, logs, branches, HEAD, and mo
### Working Tree (component of repository)
-This is basically the directories and files in your repository. It is often referred to
-as your working directory.
+This is basically the directories and files in your repository. It is often
+referred to as your working directory.
### Index (component of .git dir)
The Index is the staging area in git. It's basically a layer that separates your working tree
-from the Git repository. This gives developers more power over what gets sent to the Git
-repository.
+from the Git repository. This gives developers more power over what gets sent
+to the Git repository.
### Commit
-A git commit is a snapshot of a set of changes, or manipulations to your Working Tree.
-For example, if you added 5 files, and removed 2 others, these changes will be contained
-in a commit (or snapshot). This commit can then be pushed to other repositories, or not!
+A git commit is a snapshot of a set of changes, or manipulations to your Working
+Tree. For example, if you added 5 files, and removed 2 others, these changes
+will be contained in a commit (or snapshot). This commit can then be pushed to
+other repositories, or not!
### Branch
-A branch is essentially a pointer that points to the last commit you made. As you commit,
-this pointer will automatically update and point to the latest commit.
+A branch is essentially a pointer to the last commit you made. As you go on
+committing, this pointer will automatically update to point the latest commit.
### HEAD and head (component of .git dir)
HEAD is a pointer that points to the current branch. A repository only has 1 *active* HEAD.
head is a pointer that points to any commit. A repository can have any number of heads.
-###Stages of Git
+### Stages of Git
* Modified - Changes have been made to a file but file has not been committed to Git Database yet
* Staged - Marks a modified file to go into your next commit snapshot
* Committed - Files have been committed to the Git Database
@@ -95,7 +97,7 @@ head is a pointer that points to any commit. A repository can have any number of
### init
-Create an empty Git repository. The Git repository's settings, stored information,
+Create an empty Git repository. The Git repository's settings, stored information,
and more is stored in a directory (a folder) named ".git".
```bash
@@ -104,15 +106,12 @@ $ git init
### config
-To configure settings. Whether it be for the repository, the system itself, or global
-configurations.
+To configure settings. Whether it be for the repository, the system itself,
+or global configurations ( global config file is `~/.gitconfig` ).
```bash
# Print & Set Some Basic Config Variables (Global)
-$ git config --global user.email
-$ git config --global user.name
-
$ git config --global user.email "MyEmail@Zoho.com"
$ git config --global user.name "My Name"
```
@@ -142,10 +141,20 @@ $ git commit --help
$ git init --help
```
+### ignore files
+
+To intentionally untrack file(s) & folder(s) from git. Typically meant for
+private & temp files which would otherwise be shared in the repository.
+```bash
+$ echo "temp/" >> .gitignore
+$ echo "private_key" >> .gitignore
+```
+
+
### status
-To show differences between the index file (basically your working copy/repo) and the current
-HEAD commit.
+To show differences between the index file (basically your working copy/repo)
+and the current HEAD commit.
```bash
@@ -172,7 +181,8 @@ $ git add /path/to/file/HelloWorld.c
$ git add ./*.java
```
-This only adds a file to the staging area/index, it doesn't commit it to the working directory/repo.
+This only adds a file to the staging area/index, it doesn't commit it to the
+working directory/repo.
### branch
@@ -205,7 +215,8 @@ Updates all files in the working tree to match the version in the index, or spec
$ git checkout
# Checkout a specified branch
$ git checkout branchName
-# Create a new branch & switch to it, like: "git branch <name>; git checkout <name>"
+# Create a new branch & switch to it
+# equivalent to "git branch <name>; git checkout <name>"
$ git checkout -b newBranch
```
@@ -218,6 +229,10 @@ to a remote branch.
```bash
# Clone learnxinyminutes-docs
$ git clone https://github.com/adambard/learnxinyminutes-docs.git
+# shallow clone - faster cloning that pulls only latest snapshot
+$ git clone --depth 1 https://github.com/adambard/learnxinyminutes-docs.git
+# clone only a specific branch
+$ git clone -b master-cn https://github.com/adambard/learnxinyminutes-docs.git --single-branch
```
### commit
@@ -231,6 +246,9 @@ $ git commit -m "Added multiplyNumbers() function to HelloWorld.c"
# automatically stage modified or deleted files, except new files, and then commit
$ git commit -a -m "Modified foo.php and removed bar.php"
+
+# change last commit (this deletes previous commit with a fresh commit)
+$ git commit --amend -m "Correct message"
```
### diff
@@ -268,7 +286,7 @@ $ git config --global alias.g "grep --break --heading --line-number"
$ git grep 'variableName' -- '*.java'
# Search for a line that contains "arrayListName" and, "add" or "remove"
-$ git grep -e 'arrayListName' --and \( -e add -e remove \)
+$ git grep -e 'arrayListName' --and \( -e add -e remove \)
```
Google is your friend; for more examples
@@ -282,8 +300,8 @@ Display commits to the repository.
# Show all commits
$ git log
-# Show X number of commits
-$ git log -n 10
+# Show only commit message & ref
+$ git log --oneline
# Show merge commits only
$ git log --merges
@@ -303,7 +321,7 @@ $ git merge --no-ff branchName
### mv
-Rename or move a file
+Rename or move a file
```bash
# Renaming a file
@@ -338,7 +356,7 @@ $ git pull origin master --rebase
Push and merge changes from a branch to a remote & branch.
```bash
-# Push and merge changes from a local repo to a
+# Push and merge changes from a local repo to a
# remote named "origin" and "master" branch.
# git push <remote> <branch>
# git push => implicitly defaults to => git push origin master
@@ -347,23 +365,25 @@ $ git push origin master
# To link up current local branch with a remote branch, add -u flag:
$ git push -u origin master
# Now, anytime you want to push from that same local branch, use shortcut:
-$ git push
+$ git push
```
### stash
-Stashing takes the dirty state of your working directory and saves it on a stack of unfinished changes that you can reapply at any time.
+Stashing takes the dirty state of your working directory and saves it on a stack
+of unfinished changes that you can reapply at any time.
-Let's say you've been doing some work in your git repo, but you want to pull from the remote.
-Since you have dirty (uncommited) changes to some files, you are not able to run `git pull`.
-Instead, you can run `git stash` to save your changes onto a stack!
+Let's say you've been doing some work in your git repo, but you want to pull
+from the remote. Since you have dirty (uncommited) changes to some files, you
+are not able to run `git pull`. Instead, you can run `git stash` to save your
+changes onto a stack!
```bash
$ git stash
Saved working directory and index state \
"WIP on master: 049d078 added the index file"
HEAD is now at 049d078 added the index file
- (To restore them type "git stash apply")
+ (To restore them type "git stash apply")
```
Now you can pull!
@@ -410,7 +430,7 @@ Now you're ready to get back to work on your stuff!
[Additional Reading.](http://git-scm.com/book/en/v1/Git-Tools-Stashing)
-### rebase (caution)
+### rebase (caution)
Take all changes that were committed on one branch, and replay them onto another branch.
*Do not rebase commits that you have pushed to a public repo*.