**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
==== 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''
==== Common Bash Commands ====
* ''cd'' --> move back to the home folder
* ''cd foldername'' --> move from the current folder to a child folder
* ''cd ..'' --> move up in the folder hierarchy one level
* ''clear'' --> clears your command window giving you a fresh screen to work with (also, Ctrl-l)
* ''cp myfile.txt myfile.bak'' --> copies file with new name
* ''diff myfile.txt otherfile.txt'' --> shows differences between files
* ''echo $ (tab tab)'' --> returns list of all variables
* ''echo $s (tab)'' --> returns list of all variables that begin with 's'
* ''echo (variable name)'' --> returns value of variable
* ''ls'' --> list visible folders and files in the current folder
* ''ls -a'' --> lists all of the files and folders in the current folder, including hidden files
* ''ls -l'' --> lists all of the folders and files in the current folder with additional detail such as last modified timestamp
* ''man (name of command)'' --> opens manual for that command
* ''mkdir newfoldername'' --> create a new folder
* ''mv myfile.txt myfolder'' --> moves file to folder
* ''notepad++ newdocname.txt'' --> create a new file and open it in notepad++
* ''notepad++ docname.txt'' --> edit an existing file in notepad++
* ''pwd'' --> see what folder you are currently in
* ''rmdir (myfoldername)'' --> deletes folder
==== Vim Text Editor ====
The vim text editor is built into the bash console (similar to notepad in Windows).
* ''vim'' --> opens vim text editor in command mode
* ''vim (filename)'' --> opens file in vim text editor
Vim opens in command mode, which allows a variety of functions, but does not allow direct editing.
* ''i'' --> puts you into edit mode
* ''esc'' --> puts you back into command mode from edit mode
* '':q'' --> takes you out of vim
* '':w'' --> saves your work
* '':wq'' --> saves & closes
* '':set number'' --> turns on line numbers
* ''?abc'' --> searches for occurrences of 'abc'