**New Developers Working Group**
====== Useful Git Commands ======
* ''git add myfile.txt'' --> stage a specific file
* ''git add -A'' --> stage all modified files in the current directory and subdirectories
* ''git add .'' --> (Note the period) stage all modified files in the current directory but not subdirectories
* ''git branch'' --> list existing local branches
* ''git branch mynewbranch'' --> create a new branch
* ''git branch -m oldbranchname newbranchname'' --> change name of branch
* ''git branch -D branchname'' --> delete a local branch (cannot delete a branch you currently have checked out, so switch to different branch first)
* ''git checkout mybranch'' --> check out an existing branch
* ''git checkout -b mynewbranch'' --> create a new branch based on your current branch and check it out at the same time
* ''git checkout -b mynewbranch origin/main'' --> create a new branch based on your main branch rather than on your currently checked out branch
* ''git checkout main'' --> switch to main branch
* ''git checkout -- docname.tt2'' --> resets a file you've changed back to its original state (like an undo / revert changes command)
* ''git cherry-pick '' --> apply a specific commit to your local branch
* ''git cherry-pick -s '' --> apply a specific commit to your local branch with your signoff
* ''git cherry-pick -s ^..'' --> apply a range of commits with your signoff to your local branch
* ''git clean -d -i'' --> interactively delete untracked files you do not want
* ''git clean -d -f'' --> delete untracked folders you do not want
* ''git clone git://git.evergreen-ils.org/Evergreen.git'' --> clones a remote repository
* ''git commit'' --> invoke the default text editor to add a commit message
* ''git commit -m "my commit message"'' --> add brief commit message instead of opening the text editor to add a commit message
* ''git commit --amend'' --> overwrite your last commit message
* ''git commit --amend --author='Jon Doe '' --> amend commit author
* ''git commit --amend --signoff'' --> view and amend your sign-off branch
* ''git commit --amend --signoff '' --> view and amend your signoff for a specific commit on your sign-off branch
* ''git commit -a'' --> combine the git add and git commit steps into a single step (does //not// include newly created files)
* ''git config --global -l'' --> list all global configuration values
* ''git config --global keyname "value"'' --> create a global value
* ''git config --global user.email "you@example.com"'' --> set your email address
* ''git config --global user.name "FIRSTNAME LASTNAME"'' --> set your name
* ''git fetch --all'' --> refresh your local cache from the remote branches (does not download new branches); equivalent to git remote update
* ''git config -e'' --> show git configuration file
* ''git fetch working'' --> fetches all new branches in the working directory
* ''git help'' --> access the built-in Git help documentation
* ''git log'' --> lists most recent commits with details
* ''git log --name-only lists first line only of most recent commits
* ''git log --oneline'' --> lists id plus first line only of most recent commits
* ''git pull'' --> imports all updates from your default remote repo to your default local repo (usually, this is equivalent to 'git pull origin main'); pull is equivalent to doing a fetch followed by a merge
* ''git pull origin main'' --> import all updates from remote origin repo to local main repo
* ''git pull --rebase origin main'' --> rebases (rather than merges) new remote changes to your local repository
* ''git push working mybranchname'' --> push changes to the remote working directory
* ''git push working --delete mybranchname'' --> delete a remote branch
* ''git push working --force mybranchname'' --> forces an overwrite on your previous branch
* ''git remote -v'' --> display remote directories
* ''git remote show origin'' --> display remote directories
* ''git remote update'' --> refresh your local cache from the remote branches (does not download new branches); equivalent to git fetch --all
* ''git reset HEAD myfile.txt'' --> unstage a file that has already been staged
* ''git reset --hard'' --> reset a current branch to its original state
*
* ''git reset --hard HEAD'' --> remove last commit
* ''git reset --hard HEAD~2'' --> remove last 2 commits (increment numeral as needed)
* ''git rm badfile.txt'' --> delete a file (if the file is being tracked, be sure to add a commit message indicating the file has been deleted)
* ''git show '' --> display the commit text and differences of the specified commmit
* ''git show --stat'' --> see what your commit will look like before you push it
* ''git status'' --> display status of current branch
* ''git version'' --> displays the installed version of Git
* ''gitk'' --> use this after committing changes but before pushing them to see what will be pushed
===== Rebase =====
If your patch is behind current main, you'll need to rebase it.
- Open the git branch
- Type: git rebase origin/main --> rebases the current branch to main (you can do this when you have your branch checked out and changes committed, but have not yet pushed it)
- If there are merge conflict errors, type: git status
- Open the file with the problem in your preferred text editor (notepad++, vim, nano, etc.)
- Look for merge conflict markers in the file (>>>) and correct the problems
- Type: git add (problem file name)
- Repeat steps 4-6 for each additional problem file
- Type: git rebase --continue
You can also use the interactive rebase mode to look at a series of commits:
- Open the git branch
- Type: ''git rebase -i origin/main''
- (Optional but recommended) Save this pick list to a separate file, for recovery later if things go wrong
- Choose what to do with each line using the commands listed in the comment block (pick, edit, drop, fixup, squash)
- Save and close the "to do" file
- Follow the prompts to complete each step you specified
If you need to start over, just rebase again and paste in your original pick list.
===== Squash Commits =====
If you have multiple commits in your local branch that you'd like to combine:
- Use 'git log' to verify that the commits you want to combine are the most recent
- Type ''git rebase -i HEAD~2'' (where 2 is the number of commits you wish to combine)
- Your text editor will open and should show both of the commits, for example:
* pick 014e59c579 LP#1839359 Select element on login not accessible
* pick 9de92lsi9a LP#1839359 Select element on login not accessible
- Change the word "pick" in the second line to either "fixup" or "squash" then save and close the file
* squash --> merges commits, then allows amendment of commit message
* fixup --> merges commits like squash does, but discards previous commit message
- Use "git commit --amend" if you need to edit the final commit message
- Push the changes up to your remote working directory as normal
* ''git push working user/jdoe/lp1839359_login_select''
If you've already pushed multiple commits up to your remote working git repository, you can still combine them:
- Follow the steps above, but when pushing, use "--force"
* ''git push --force working user/jdoe/lp1839359_login_select''
===== Aliases =====
Shortens normal commands so you type less:
$ git config alias.co checkout
$ git config alias.cp cherry-pick
$ git config alias.br branch
$ git config alias.ci commit
$ git config alias.st status