**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'