Git is a mechanism of sharing/keeping/tracking/updating/merging code/files/projects. It has a different feel than more traditional "Master/client" ways of thinking - and can cause some initial problems in understanding just how to approach Version Control/Project file management.
It's beauty is in the manner you can quickly fork a project for you own needs and then feedback the new project to it's parent. Which rather embodies the whole Open-Source philisophy.
Git task Notes Git commands Tell Git who you are Configure the author name and email address to be used with your commits.
Note that Git strips some characters (for example trailing periods) from user.name.
git config --global user.name "Sam Smith" git config --global user.email email@example.com
'''master''' is a local branch '''origin/master''' is a remote branch (which is a local copy of the branch named "master" on the remote named "origin")
origin is a remote
Create a new local repository
Check out a repository
- Create a working copy of a local repository:
- git clone /path/to/repository
For a remote server, use
git clone username@host:/path/to/repository
- Add one or more files to staging (index):
- git add <filename> git add * Commit
Commit changes to head (but not yet to the remote repository)
git commit -m "Commit message"
- Commit any files you've added with git add, and also commit any files you've changed since then:
- git commit -a Push
Send changes to the master branch of your remote repository
git push origin master
Status List the files you've changed and those you still need to add or commit
Connect to a remote repository
If you haven't connected your local repository to a remote server, add the server to be able to push to it:
git remote add origin <server>
List all currently configured remote repositories
git remote -v
Create a new branch and switch to it
git checkout -b <branchname>
Switch from one branch to another
git checkout <branchname>
List all the branches in your repo
and also tell you what branch you're currently in:
Delete the feature branch
git branch -d <branchname>
Push the branch to your remote repository, so others can use it
git push origin <branchname>
Push all branches to your remote repository
git push --all origin
Delete a branch on your remote repository
git push origin :<branchname>
Update from the remote repository
- Fetch and merge changes on the remote server to your working directory:
- git pull
To merge a different branch into your active branch
git merge <branchname>
View all the merge conflicts
View the conflicts against the base file:
Preview changes, before merging:
git diff git diff --base <filename> git diff <sourcebranch> <targetbranch>
After you have manually resolved any conflicts, you mark the changed file
git add <filename> Tags
You can use tagging to mark a significant changeset, such as a release
git tag 1.0.0 <commitID>
- CommitId is the leading characters of the changeset ID, up to 10, but must be unique. Get the ID using:
- git log
Undo local changes
If you mess up, you can replace the changes in your working tree with the last content in head:
Changes already added to the index, as well as new files, will be kept.
git checkout -- <filename>
Instead, to drop all your local changes and commits, fetch the latest history from the server and point your local master branch at it, do this:
git fetch origin git reset --hard origin/master
Search the working directory for foo()
git grep "foo()"
Create Remote Repo
TO create a remote Repo....
#ssh firstname.lastname@example.org #mkdir my_project.git #cd my_project.git #git init --bare #git update-server-info # If planning to serve via HTTP #exit
Check This worked
And you should have a copy of the Git Project
Git Bash Tweeks
Put these in ~.bashrc
2 Clients 1 Central repository
Assuming you have 2 developers working on a project. They Both '''git clone''' - modify a different file - and then 1 (Tim say) of them (it matters not which one) does 'git add main.py' and then 'git commit -a'.
At this point NOTHING will be updated as the changes are on the LOCAL repository.
To Update the "Central" Repository - you do this.
- Developed Tim
- git status
- Checks to see what is happening. It should say
- On branch master Your branch is ahead of 'origin/master' by 1 commit. (use "git push" to publish your local commits)
- So Developer Tim does
- git push
This has updated the "Central" copy.
- Developed Hamad - now want to see whats changed.
- git status
NO Changes. Why ? Because this is looking at his local Git.
- Hamad knows Tim Updated something. So he does
- git fetch
- Something like
- remote: Counting objects: 7, done. remote: Compressing objects: 100% (4/4), done. remote: Total 4 (delta 3), reused 0 (delta 0) Unpacking objects: 100% (4/4), done. From /media/tim/Git 483dcd7..5f4d9e8 master -> origin/master
- Then Hamad does a
- git status On branch master Your branch is behind 'origin/master' by 1 commit, and can be fast-forwarded. (use "git pull" to update your local branch)
- To fix this he does
- git pull
And gets the new code And sees