Githandson: Difference between revisions
From Gridkaschool
Jump to navigationJump to search
(31 intermediate revisions by the same user not shown) | |||
Line 5: | Line 5: | ||
'''''Note that lines beginning with a $ sign implies a shell command!''''' |
'''''Note that lines beginning with a $ sign implies a shell command!''''' |
||
==Exercise 1 (Configuration) == |
==Exercise 1 (Configuration) == |
||
* |
*'''Login to gridkalogin01''' |
||
** ssh schoolx@gridkalogin01.desy.de |
|||
* '''Create project''' |
|||
* $ mkdir project |
* $ mkdir project |
||
* $ cd project |
* $ cd project |
||
* '''Configure git''' |
* '''Configure git''' |
||
** $ git config --global user.name "Your Name" |
** $ git config --global user.name "Your Name" |
||
** $ git config --global user.email you.email@domain |
** $ git config --global user.email you.email@domain |
||
* '''Examine the gitconfig file''' |
|||
* $ cat ~/.gitconfig |
* $ cat ~/.gitconfig |
||
* '''optional extras for config (and obviously editor is mutually exclusive)''' |
|||
* '''Optional extras for config (and obviously editor is mutually exclusive)''' |
|||
** $ git config --global color.ui auto # If you like colours! |
** $ git config --global color.ui auto # If you like colours! |
||
** $ git config --global alias.co checkout |
** $ git config --global alias.co checkout |
||
Line 25: | Line 33: | ||
'''Let's commit some stuff to git...''' |
'''Let's commit some stuff to git...''' |
||
* '''Ini new repo''' |
|||
** $ git init |
|||
** $ git status |
|||
* $ git init |
|||
* $ git status |
|||
* $ touch readme.txt |
|||
* $ echo "hello" > readme.txt |
|||
* $ git commit |
|||
* $ git add . |
|||
* $ git commit |
|||
* $ git "bye" >> readme.txt |
|||
* $ git status |
|||
* $ git reset |
|||
* '''Create new file and commit it''' |
|||
** $ touch readme.txt |
|||
** $ echo "hello" > readme.txt |
|||
** $ git commit |
|||
==Exercise 3 (Working with remote repository) == |
|||
* '''Can't commit? Submit file to staging area first''' |
|||
* $ git clone gitolite3@gridkapuppet01:test2.git |
|||
* $ git |
** $ git add . |
||
** $ git commit |
|||
* $ Add a new file to local repository and submit the changes to remote |
|||
* '''Avoid opening editor and submit the change directly to repo: ''' |
|||
** $ echo "some new change">> readme.txt |
|||
** $ git commit -am "fast commit to repo" |
|||
* '''Examine how to revert changes in working tree: ''' |
|||
* $ git clone git@naf-school04:gitlab |
|||
*'''Remove file from staging area:''' |
|||
* $ cd gitlab |
|||
** $ echo "bye" >> readme.txt |
|||
* $ git status |
|||
** $ git status |
|||
* $ vi ${USER}.txt |
|||
** $ git reset |
|||
** ''write something'' |
|||
*'''Remove file from staging area and and drop all changes, which were staged in working dir, take the last commit from local repo''' |
|||
* $ git status # ''what is updated? Working tree, Index or Repository?'' |
|||
** $ git |
** $ git reset --hard |
||
* '''Discards all history and changes back to the specified commit''' |
|||
** $ git diff HEAD |
|||
** $ git |
** $ git reset --hard [commit] |
||
*'''Drop all local changes staged and unstaged, take the last commit from repo:''' |
|||
* $ git add ${USER}.txt |
|||
** git clean -df ( -d Remove untracked directories in addition to untracked files) |
|||
** $ git status |
|||
** |
** git checkout -- . |
||
==Exercise 3 (Working with remote repository) == |
|||
* '''Clone the remote repository and examine the log ''' |
|||
** $ git clone gitolite3@gridkapuppet01:test2.git |
|||
** $ git log |
|||
*'''Look in .git directory at the config file''' |
|||
**edit config file and delete [remote "origin"] section |
|||
** add remote repository by doing: |
|||
** $ git remote add origin gitolite3@gridkapuppet01:test2.git |
|||
* '''Add a new file to local repository and submit the changes to remote: ''' |
|||
** $ git add <new file> |
|||
** $ git diff HEAD |
** $ git diff HEAD |
||
** $ git |
** $ git commit -am "some comment" |
||
* $ git |
** $ git push -u origin master ( -u - set-upstream ref) |
||
** $ git status |
|||
** $ git diff |
|||
* '''Drop all local changes and get the latest commit from remote repo:''' |
|||
** $ git diff HEAD |
|||
** $ git |
** $ git fetch origin |
||
* $ git |
** $ git reset --hard origin/master |
||
* '''try: ''' |
|||
**$ git fetch |
|||
** ''tip: what does “git pull --rebase” do?'' |
|||
**$ git rebase |
|||
* $ git checkout -b ${USER} master # specifying "master" here is just a good habit. Always beware of defaults. |
|||
* $ vi config.yaml |
|||
** ''Add a user to the list'' |
|||
* $ git add -p |
|||
* $ git commit -m "Adding ${USER} to users list" |
|||
* $ git push origin ${USER} |
|||
* $ git checkout master |
|||
* $ git merge ${USER} |
|||
* $ git push origin master |
|||
** ''What happens?'' |
|||
* $ git checkout -b newfeature_${USER} master |
|||
* $ vi config.yaml |
|||
** ''add a server'' |
|||
** ''commit the change (with a good message!)'' |
|||
** $ git log |
|||
* ''Oops! We mistyped the server, vi config.yaml again'' |
|||
** ''change the name of the server'' |
|||
** ''commit the change'' |
|||
** $ git rebase -i HEAD~2 |
|||
** ''use “fixup” or “squash” on the fix (make sure you understand the difference)'' |
|||
** $ git log # examine the differences |
|||
Line 124: | Line 129: | ||
<pre> |
<pre> |
||
git init - create new local repo |
git init - create new local repo |
||
git clone /path/to/repository - check out a repository |
git clone /path/to/repository - check out a repository. Clone creates a new git repository by copying an existing one located at the URI you specify. |
||
git clone https://github.com/ - clone repo from github |
git clone https://github.com/ - clone repo from github |
||
git status - List the files you've changed and those you still need to add |
|||
git add <filename> - add specified file to staging area |
git add <filename> - add specified file to staging area |
||
git add . - add all subdirectories and files recursivly |
git add . - add all subdirectories and files recursivly |
||
git |
git commit - commit the staged files |
||
git commit -am "some comment" - stage changes and commit in one step |
|||
git rm <filename> - remove deleted file |
|||
git reset - removes all added files from staging area, keeps the changes |
git reset - removes all added files from staging area, keeps the changes |
||
git reset --hard - removes all added files from staging area, drops the local changes after last commit |
git reset --hard - removes all added files from staging area, drops the local changes after last commit |
||
git reset HEAD^ - the changes a now only in working dir, HEAD and Index moved one step back |
|||
git reset --hard HEAD - deletes last commit as it were never happend |
|||
git checkout -- . - discards all local changes which are not staged |
|||
git status - List the files you've changed and those you still need to add |
|||
git help - Help for most commonly used git commands |
git help - Help for most commonly used git commands |
||
git help <command> - Detailed help for specified command |
git help <command> - Detailed help for specified command |
||
Line 140: | Line 151: | ||
git remote rm origin - removes added remote repository |
git remote rm origin - removes added remote repository |
||
git repo. This command can be used only after creation of local repo with git init or git clone. |
git repo. This command can be used only after creation of local repo with git init or git clone. |
||
git |
git remote -v - This should show you all of the push/fetch remotes for the project. |
||
git diff master origin/master - compare local branch with remote |
|||
git branch - list of all local branches |
|||
git branch -a - list of all branches including remote |
|||
git checkout -b <branchname> - creates new branch and switches to it |
|||
git checkout <branchname> - switch to another branch |
|||
git branch -d <branchname> - delete branch |
|||
git push --all origin - push all branches to remote repository |
|||
</pre> |
</pre> |
Latest revision as of 23:52, 30 August 2016
Git Hands-on
All of these exercises should be followed on naf-school03 using your school account
Note that lines beginning with a $ sign implies a shell command!
Exercise 1 (Configuration)
- Login to gridkalogin01
- ssh schoolx@gridkalogin01.desy.de
- Create project
- $ mkdir project
- $ cd project
- Configure git
- $ git config --global user.name "Your Name"
- $ git config --global user.email you.email@domain
- Examine the gitconfig file
- $ cat ~/.gitconfig
- Optional extras for config (and obviously editor is mutually exclusive)
- $ git config --global color.ui auto # If you like colours!
- $ git config --global alias.co checkout
- $ git config --global alias.st status
- $ git config --global alias.ci commit
- $ git config --global core.editor emacs # flame bait
- $ git config --global core.editor vim
Exercise 2 (Basics)
Let's commit some stuff to git...
- Ini new repo
- $ git init
- $ git status
- Create new file and commit it
- $ touch readme.txt
- $ echo "hello" > readme.txt
- $ git commit
- Can't commit? Submit file to staging area first
- $ git add .
- $ git commit
- Avoid opening editor and submit the change directly to repo:
- $ echo "some new change">> readme.txt
- $ git commit -am "fast commit to repo"
- Examine how to revert changes in working tree:
- Remove file from staging area:
- $ echo "bye" >> readme.txt
- $ git status
- $ git reset
- Remove file from staging area and and drop all changes, which were staged in working dir, take the last commit from local repo
- $ git reset --hard
- Discards all history and changes back to the specified commit
- $ git reset --hard [commit]
- Drop all local changes staged and unstaged, take the last commit from repo:
- git clean -df ( -d Remove untracked directories in addition to untracked files)
- git checkout -- .
Exercise 3 (Working with remote repository)
- Clone the remote repository and examine the log
- $ git clone gitolite3@gridkapuppet01:test2.git
- $ git log
- Look in .git directory at the config file
- edit config file and delete [remote "origin"] section
- add remote repository by doing:
- $ git remote add origin gitolite3@gridkapuppet01:test2.git
- Add a new file to local repository and submit the changes to remote:
- $ git add <new file>
- $ git diff HEAD
- $ git commit -am "some comment"
- $ git push -u origin master ( -u - set-upstream ref)
- Drop all local changes and get the latest commit from remote repo:
- $ git fetch origin
- $ git reset --hard origin/master
- try:
- $ git fetch
- $ git rebase
Git cheat sheet
Git configuration
- Git levels:
/etc/gitconfig - global git config for any user
~/.gitconfig -user specific
~/repo/.git/config -repo specific
each level ovewrites prevous.
git config --global user.name "Your Name"
git config --global user.email you.email@domain
git config --global color.ui auto # If you like colours!
git config --global alias.co checkout
git config --global alias.st status
git config --global alias.ci commit
git config --global core.editor emacs
Git basics
git init - create new local repo git clone /path/to/repository - check out a repository. Clone creates a new git repository by copying an existing one located at the URI you specify. git clone https://github.com/ - clone repo from github git status - List the files you've changed and those you still need to add git add <filename> - add specified file to staging area git add . - add all subdirectories and files recursivly git commit - commit the staged files git commit -am "some comment" - stage changes and commit in one step git rm <filename> - remove deleted file git reset - removes all added files from staging area, keeps the changes git reset --hard - removes all added files from staging area, drops the local changes after last commit git reset HEAD^ - the changes a now only in working dir, HEAD and Index moved one step back git reset --hard HEAD - deletes last commit as it were never happend git checkout -- . - discards all local changes which are not staged git help - Help for most commonly used git commands git help <command> - Detailed help for specified command git init --bare --shared - Creates empty repository meaning no working directory in it. git remote add origin REMOTEURL - git remote add creates an entry in your git config that specifies a name of a particular URL of the remote git remote rm origin - removes added remote repository git repo. This command can be used only after creation of local repo with git init or git clone. git remote -v - This should show you all of the push/fetch remotes for the project. git diff master origin/master - compare local branch with remote git branch - list of all local branches git branch -a - list of all branches including remote git checkout -b <branchname> - creates new branch and switches to it git checkout <branchname> - switch to another branch git branch -d <branchname> - delete branch git push --all origin - push all branches to remote repository