There are some excellent gui for git like Sourcetree and Github Desktop which work on Mac/Windows. There are programs for Linux also but I do not have experience with them.
It is recommended to use git via ssh instead of https. To save yourself the trouble of entering your password everytime, copy your ssh public key into your git account. The public key is in $HOME/.ssh/id_rsa.pub
file; if you dont have it, then generate it by typing this in terminal
ssh-keygen
and press enter to all the questions. Now log in to your git account in your browser, go to settings page where you will find a place to copy the ssh key.
When you are collaborating with me on some project, we have to share code via git. When I update the code in my repository, you must get a notification that there is an update. For this to happen, you must watch the repository.
git diff --word-diff filename git diff --color-words filename
To add all modified files which are already tracked
git add -u
Suppose you have not pushed your commit to remote. Then undo last commit while keeping changes from it (unstaged)
git reset HEAD^
An equivalent command is
git reset --soft HEAD~1
If you want to undo last commit and throw away the changes
git reset --hard HEAD~1
If we want to merge last 6 commits into a single one
git reset --soft HEAD~6 git commit # add message git push --force # force needed if commit is already pushed to remote
To remove all untracked files in the current directory
git clean . -fx
To remove all untracked files and directories in the current directory
git clean . -fxd
If you want to use an old version of the code, then find the SHA checksum of the commit using git log
and then do
git checkout <checksum>
The HEAD is now set to the selected commit and you can see this by doing git branch
. If you now want to go back to master, do
git checkout master
Create a new branch
git branch my_branch
Checkout your new branch
git checkout my_branch
Make changes in this branch, add files and commit them to your branch. Then push them to remote
git push origin my_branch
To merge your branch into master
git checkout master git merge my_branch
You can now push master to your origin and then create a pull request.
git checkout master git remote add upstream git@github.com:upstreamname/projectname.git
Now you can get updates from upstream
git fetch upstream git merge upstream/master
To send these changes to your own remote
git push origin master
git checkout master git pull origin master git pull upstream master git checkout my_branch git rebase master
The last step might indicate some conflicts which have to be resolved.
If your master has changed, you can update your branch. You may also want to squash several commits into one before creating a pull request.
git checkout yourbranchname
git rebase -i master
git push -f origin yourbranchname
git branch -D my_branch git push origin :my_branch
git checkout master git remote add contributor git://github.com/contributor/projectname git fetch contributor git merge contributor/newfeature git push origin master
git archive --remote=ssh://git@bitbucket.org/USERNAME/REPO.git --format=zip \ --output="FILENAME.zip" master
cd DIRECTORY git archive -o latest.zip HEAD
git describe --abbrev=16 --dirty --always
To test the commits in a pull request, you can fetch the pull, create a branch and then test it.
git fetch origin pull/9874/head:9874 git checkout 9874
On some servers ssh may not be allowed but https is allowed. In this case we can use git+ssh over https by adding following lines to your ~/.ssh/config
file.
Host github.com HostName ssh.github.com Port 443 Host bitbucket.org HostName altssh.bitbucket.org Port 443 Host gitlab.com HostName altssh.gitlab.com Port 443
[user] name = Praveen C email = praveen@gmail.com [alias] co = checkout cm = commit br = branch [color] diff = auto status = auto branch = auto interactive = auto ui = true pager = true