For instructions on using the git-based Fedora package maintenance system, see Package maintenance guide.
Basic Operations
Configure your global git settings
Running these commands will setup your global git settings. You should obviously use your own contact details.
git config --global user.name "John Q. Public" git config --global user.email "john.public@example.com" git config --global color.ui auto
Should you wish to change your details later on, you can manually edit the ~/.gitconfig
file for global settings, or edit .git/config
to change settings on a particular repo. Alternatively, you can simply run the above commands again with new details.
See the git-config documentation for many more configuration options.
Display current branch in bash
If you work with branches, and you should, this setting helps you keep track of which branch you are in at a given time. If you are in a git working directory, it shows the current branch as part of the prompt:
[user@host directory-name (master)]$
To enable this, you can take advantage of the __git_ps1
function, provided by /usr/share/git-core/contrib/completion/git-prompt.sh
file in the git package. Add this line to your ~/.bashrc
:
export PS1='[\u@\h \W$(declare -F __git_ps1 &>/dev/null && __git_ps1 " (%s)")]\$ '
If you do not have the bash-completion
package installed, you must manually source the git completion script prior to using __git_ps1()
. To do this, add this line to your ~/.bashrc
:
. /usr/share/git-core/contrib/completion/git-prompt.sh
To activate bash configuration changes, run:
. ~/.bashrc
In addition to displaying the current branch, this will show when you are in the middle of a merge or rebase.
You might also want to display when there are changes in your work tree or the git index:
[user@host directory-name (master*)]$ [user@host directory-name (master+)]$ [user@host directory-name (master%)]$
- On the first line, a tracked file was modified
- On the second line, a tracked file was modified and staged (with
git add
) - On the third line, you have untracked files in your tree
Of course, those can combine themselves...
To do so, simply add these lines in your ~/.bashrc
, right before the line modifying your prompt:
export GIT_PS1_SHOWDIRTYSTATE=true export GIT_PS1_SHOWUNTRACKEDFILES=true
See the comments at the beginning of /etc/bash_completion.d/git
for more details.
Initialize a new repo
mkdir repo && cd repo && git init
Once you've created a repo, you'll find a .git
folder inside it. What you essentially have at this point is a bare repo, which is a repository with the git configs, but no actual files contained in the repository. Now, let's create a file and tell git that we want it to be part of our repo. From the repo directory (not the .git
directory), type:
echo "Blah" > test.txt git add test.txt
We can then commit the changes by typing:
git commit test.txt
Another way of committing all the changes (without having to specify all the files that have changed) is to type:
git commit -a
Either way, it will bring up whichever editor you have defined in your $EDITOR
environment variable and allow you to write a commit message explaining the changes you've made. A commit message usually consists of:
- A one-line summary of your changes
- A blank line
- One or more additional lines with more detail. These lines are optional.
You can always check the status of your current repo by typing:
git status
Developer Operations
Create a new local branch
git checkout -b <branch>
Push and create a new remote branch from an existing local branch of the same name
git push origin <branch>
Switch to a branch that was pushed remotely
Run the following command to determine the name of the upstream branch you want to work on.:
git branch -r
Then run this to switch to it:
git checkout --track origin/<branch>
This creates a local branch named <branch>
and tells git that it came from origin/<branch>
. Using git status
will show you whether your local branch is ahead, behind, or otherwise different than the upstream branch.
If you want to use a different name for your local branch, you can use:
git checkout --track --branch <some-other-name> origin/<branch>
Maintainer Operations
Remove a remote branch
Assuming you had a branch named blah
on the remote server, you could remove it by typing:
git push origin :blah
Apply mailed git patch
git am <file>