DevToPrd
  • Home
  • Knowledge Base
  • About Me
  1. Knowledge Base
  2. Articles
  3. Git Tips and Tricks
  • Knowledge Base
    • Articles
      • 3D Printing and CNC
      • 6502 Programming in C
      • Add Settings File to .NET Console Application
      • AMD Ryzen 3 3200G with Radeon Vega Graphics Keeps Freezing
      • Angular Cheat Sheet
      • Angular CLI
      • Arduino / Raspberry Pi Remote Sensor
      • Bad owner or permissions on ssh config file
      • Basic Arduino Uno Dev Setup in Linux (Debian-based)
      • Boilerplate Date Definitions for SQL
      • Boot Linux Mint from flash drive on a netbook
      • Boot Linux to text mode
      • Bundling a Multiple Module Python Project Into a Zip File
      • Cache Resources Exhausted in Imagemagick
      • Call Async Method from Non-Async Method
      • Check an XML file to see if it is well-formed
      • Clear Linux Cache
      • Command-Line Arduino
      • Complex Object Collections in C++
      • Component Not Found error in VirtualBox
      • Compress and Extract Entire Directory Tree With Tar
      • Conditions on aggregates in SQL
      • Configuration of hddtemp
      • Connect To MySQL From .NET
      • Create Code Behind File for Razor Page In Blazor Application
      • Create An ISO File From a CD or DVD-ROM Using the Terminal
      • Cross-Compile Rust, Targeting Windows from Linux
      • C# Language Versioning
      • Dependency Injection in .NET/C#
      • Determine path to web.config at runtime
      • Display GRUB Menu
      • Docker in Linux
      • .NET IoT
      • Entity Framework
      • Enumeration Scoping in C++
      • File Operations in Java
      • Find Duplicate Rows By Specific Columns
      • Find Unique Instances of Text in Bash
      • Flash Disk Image to SD Card
      • Flask
      • Force SSL On Domain
      • GDB and GPROF
      • Get Started With Laravel
      • Git Tips and Tricks
      • Graphical sudo
      • Hide website from search engines
      • Hostname On Linux
      • How to install a .bundle file in Ubuntu Linux
      • HP Laptop Keyboard Not Working At Boot Start
      • Install .NET From Microsoft Feed in Ubuntu
      • Install Node.js
      • Install php7-xml to avoid utf encode/decode issue
      • Install truetype fonts in Ubuntu Linux
      • Java Links
      • JCL and Programming On the MVS Turnkey System
      • List Hardware Information in Ubuntu and other Debian-based Linux
      • Mainframe Emulation on Raspberry Pi Zero
      • Making Colors in a GIF Transparent
      • Manually Install Firefox
      • Markup and Code-Behind Examples for reveal.js
      • Merge Images
      • MicroPython on ESP32
      • Microservice Notes
      • Migrating from Windows to Linux
      • MiniDLNA - A lightweight, simple media server
      • Modify Default Folders in Ubuntu Linux
      • Modify default Java runtime in Linux
      • MongoDB Quick Start in Docker
      • Mount local folder as drive C in DOSBox
      • MVS Turnkey in Docker
      • MySQL command line – quick tips
      • No Frameworks Were Found error
      • NPM Cheat Sheet
      • NT_STATUS_UNSUCCESSFUL error when browsing machines/shares in Ubuntu Linux
      • Online IoT/Embedded Simulators
      • Package and Publish To NuGet
      • Packaging Python Projects
      • Passing a value in the URL for use by PHP
      • PDF Conversion Policy Error
      • PHP Login Script Tutorial
      • Pip Behind a Corporate Proxy
      • Prevent Code Injection In PHP
      • Programming Arduino (AVR) and Raspberry Pi Pico (ARM) in C
      • Publish to Crates.io
      • Python Optimization and Language Binding
      • Python Tkinter Examples
      • Query Windows shares from the command line in Ubuntu Linux
      • RabbitMQ in Docker
      • React Cheat Sheet
      • Recursive File Search
      • Redirect in PHP
      • Remote Access for Raspberry Pi
      • Remove Duplicates From List Collection
      • Requirements Files for Python
      • Rhythmbox tray icon plugin
      • Rsync as a Backup Solution
      • Rust Books (online)
      • Rust/Cargo Behind a Corporate Proxy
      • Selective chmod for directories and files
      • Sense HAT
      • Side-by-Side .NET Core Installations
      • Simple Raspberry Pi Control With .NET IoT and Python
      • Simple Web Server, Using Python or PHP
      • Single-File / Multi-OS / Multi-Architecture Publishing in .NET
      • Slim Framework
      • SQL Server in Docker
      • SQL Server in Linux
      • SQL Transaction Template
      • Start an X Windows session in Cygwin
      • stdio.h: No such file or directory
      • Stream Media from Ubuntu/Mint Linux to XBox360
      • Supporting Material for ‘.NET and Linux’ tech talk
      • TUI Frameworks for .NET
      • Use a value from a posted form in PHP
      • Using Your Router As A Wireless Repeater
      • Verbose PHP Logging To Web Browser
      • Version Mismatch in Python Package
      • Vim Tips and Tricks
      • Virtual Environment for Python
      • Vue.js Cheat Sheet
      • WCF Export
      • Web API with ASP.NET
      • Web Frameworks, Libraries, and Plugins
    • Glossary
      • Initial Program Load (IPL)
      • Job Control Language (JCL)
      • Just-in-time compilation (JIT)
      • Model–View–Controller (MVC)
      • Multiple Virtual Storage (MVS)
      • Resource Access Control Facility (RACF)
      • Real-time locating system (RTLS)
      • Time Sharing Option (TSO)
    • Learning Paths
      • Embedded and IoT
      • Low-Level
      • Mainframe
    • Other
      • Job and Employment Tools
  • Pages
    • About Me
  • Posts
    • 2007
      • Fake Science Makes Me Angry
      • Genetic Material from T-Rex Decoded
      • Vacuum and the Nature of Mass
    • 2011
      • Unhitched
    • 2012
      • Chick-fil-A
      • Choosing a First Telescope
      • Interesting Fossil
      • Rigorous Logic and Amelia
      • Pale Blue Dot
      • Science and Youth
      • Steve Jobs: The Lost Interview
      • Theism and the Thinking Mind
    • 2013
      • Duck and Cover
      • Duct Tape
      • Firefox OS
      • Idiocracy is Upon Us
      • It’s Just a Theory
      • Ken Feder and the Myth of the Ancient Astronauts
      • Martian Exopaleontology
      • …from the Moon and Mars
      • SunWatch Video Podcast
      • Tech Generation… not?
    • 2014
      • ‘Andean Gold’ lecture at SunWatch
      • Chelyabinsk Meteor
      • Lunar Eclipse
      • A New Meteor Shower Is Coming
      • Sleep Well, Philae
      • Why do I not believe?
    • 2015
      • Early Humans in the Americas
      • SETI@Home
      • What is a fossil?
    • 2017
      • Cleaning Fossils
      • The Dating Game
      • How Firefox Got Its Groove Back
      • March For Science
      • Printing the Past
      • Who Ya Gonna Call?
    • 2018
      • 2018 AIA/SunWatch Lecture Series: Science vs. Pseudoscience
      • Coordinate Systems: Finding Your Way Around the Sky
      • Natural Selection At Work
      • Like Water For Gravity
    • 2019
      • ‘Astronomy for Beginners’ Program
      • Homeopathy
      • Scientific and Critical Thinking Omnibus
      • Show Me What You’re Made Of
      • Visitors From Space
    • 2020
      • A Dim View of Betelgeuse
      • Cleveland Archaeological Society Lecture Series
      • Going Viral
      • The Trinity Mineral
      • Venusians, Perchance
    • 2021
      • Create Extension for Visual Studio Code
      • Early .NET 6 Observations
      • The Upcoming Lunar Eclipse: Real-World Application of the Practical Astronomy .NET Library (+ Python!)
      • Enumeration Scoping in C++
      • Fossil Hunting in Central Kentucky
      • Fossil Sites Map in Leaflet.js
      • Geology of Jezero
      • Python and XML
      • Running a Mainframe Emulator on a Raspberry Pi Zero (Lunch-n-Learn)
      • Rust in the Android Platform
      • Rust Foundation
      • Speak with Elegance (or not)
      • Supporting Material for ‘.NET and Linux’ tech talk
      • Traditional Programming on Hobbyist Microcontroller Boards
      • ‘Visual Studio Code: The Swiss Army Knife of Editors’ (tech talk)
    • 2022
      • James Webb Space Telescope
      • Program Like It’s 1982
      • Rust In the Linux Kernel
    • 2023
      • .NET IoT and Terminal GUI
      • Modern .NET Tooling in VS Code
      • Perl: Is It Really That Bad?
      • Sci-Fi Recommendations
    • 2024
      • 6502 Programming in C
      • DuckDuckGo AI Chat
      • Modern Perl
      • My AI Chatbot Experience
      • Practical Astronomy Algorithms in Various Languages
      • Site Updates
      • Think Async

On this page

  • Git Setup
  • Initialization
    • Initialize a local Git repository
    • Initialize a local Git repository, based on a remote repository
  • Sync local repo with remote
  • Clone a copy of a remote repository
  • Adding new files to a repository
  • Commit changed files to a repository
  • Update remote repository
  • Branching
  • Security
  • Git Setup For Specific Hosting Sites
    • Git Setup for Bitbucket
    • Git Setup for GitHub (new)
    • Git Setup for GitHub (existing repository)
    • Automatic Authentication for GitHub, Bitbucket, and GitLab
  • More Git Tutorials and Reference
  1. Knowledge Base
  2. Articles
  3. Git Tips and Tricks

Git Tips and Tricks

Git Setup

The values you set here will be used as defaults when you set up local repositories and connect to remote repositories.

git config --global user.name "Your Name Here"
 
git config --global user.email "your_email@example.com"
 
git config --global init.defaultBranch main
 
git config --list

Set values for a specific repository (you must be in the root directory of the repository when you issue these commands):

git config --local user.name "Your Name Here"
 
git config --local user.email "your_email@example.com"

Initialization

Initialize a local Git repository

cd <directory to add to source control>
 
git init

Initialize a local Git repository, based on a remote repository

This uses Github as an example.

  1. Open terminal.
  2. Create directory: mkdir ~/test-repo (Change “test-repo” to whatever you want.)
  3. Change to the new directory: cd ~/test-repo
  4. Initialize a local Git repository: git init
  5. Point your local repository to the remote repository: git remote add origin https://github.com/yourUserNameHere/test-repo.git

Sync local repo with remote

To sync your local repository with its associated remote repository, issue this command:

git fetch origin

You may need to retrieve and approve remote changes to force them into your local copy:

git checkout master
 
git merge origin/master

You should also be able to use “pull” to combine the fetch and merge into a single operation:

git pull origin

Clone a copy of a remote repository

cd <local_directory>
 
git clone https://github.com/<username>/<repository_name.git>

(This example uses GitHub. Modify it to whatever remote hosting site you need.)

Adding new files to a repository

This should be done before committing.

Add a single file:

git add <filename>

Add all new files:

git add

Update tracking for files that changed names or were deleted:

git add -u

To do both, use this:

git add -A

Commit changed files to a repository

After files have been added, you can commit them to be saved as an intermediate version:

git commit -m "message"

…where “message” is a useful description of what you did.

This only updates your local repo. If your repo is associated with a remote repository, the remote repo is not updated in this step.

Update remote repository

If you have saved local commits and you would like to update an associated remote repository:

git push

Branching

If you are working on a project with a version being shared by many people, you may not want to edit that version.

You can create a branch (and switch to it) with this command:

git checkout -b branchname

List available branches:

git branch

List remote branches:

git branch -r

List all branches:

git branch -a

(The branch you are on is marked with an asterisk.)

Refresh local list of remote branches:

git remote update origin --prune

If you have a remote branch, and you need to create/sync with it locally, do the following.

First, list remote branches, and note the name of the branch you want to create locally:

git branch -a

If, for example, the remote branch is named ‘remotes/origin/dev’, you can then create it locally, sync it, and switch to it with the following command:

git checkout -t remotes/origin/dev

If you want control over the naming of the local tracking branch, you can specify it as follows:

git checkout -t -b dev remotes/origin/dev

If master (or main) changes while you’re making changes in a branch, you can merge them into the branch as follows:

git checkout main
 
git pull
 
git checkout <branch_name>
 
git merge main

To push the current branch to a remote repository, creating a new branch on the remote:

git push origin <remote_branch_name>

If you are currently in a local branch, and you know the branch also exists in a remote repository, but a git pull fails, you may need to link the local branch to the server branch. For example, if the local and server branches are both named “dev”, you’d link them as follows:

git branch --set-upstream-to=origin/dev dev

To switch back to the master branch:

git checkout master

Delete a local branch:

git branch -D <branch-name>

Delete a remote branch:

git branch -r -D <branch-name>

Security

To bypass SSL verification, add this entry to .bashrc:

alias git='git -c http.sslVerify=false'

Only use this if you know the network you’re using can be trusted. This setting leaves you open to man-in-the-middle attacks.

Git Setup For Specific Hosting Sites

Git Setup for Bitbucket

Set up your local directory:

mkdir /path/to/your/project
 
cd /path/to/your/project
 
git init
 
git remote add origin https://bitbucketid@bitbucket.org/bitbucketid/bitbucketproject.git

Create your first file, commit, and push:

echo "Your Name" >> contributors.txt
 
git add contributors.txt
 
git commit -m 'Initial commit with contributors'
 
git push -u origin master

Git Setup for GitHub (new)

mkdir -p ~/<projectname>
 
cd $_
 
echo "# <projectname>" >> README.md
 
git init
 
git add README.md
 
git commit -m "first commit"
 
git remote add origin https://github.com/<username>/<projectname>.git
 
git push -u origin master

Git Setup for GitHub (existing repository)

git remote add origin https://github.com/<username>/<projectname>.git
 
git push -u origin master

Automatic Authentication for GitHub, Bitbucket, and GitLab

Tired of being prompted for your userid and password every time you push local changes to your remote repository? Add the following to ~/.netrc.

For GitHub:

machine github.com
    login <username>
    password <password>

For Bitbucket:

machine bitbucket.org
    login <username>
    password <password>

For GitLab:

machine gitlab.com
    login <username>
    password <password>

(You can have all entries in the same file, if needed.)

More Git Tutorials and Reference

If you need more details, here are some comprehensive Git tutorials and references.

Official Tutorial – Hosted on the official Git site.

Pro Git – The entire book, hosted on the official Git site.

Vogella – A tutorial.

Atlassian Tutorials – A series of tutorials hosted on the Atlassian site. (These guys also host Bitbucket.)

 

Copyright 2024, Jim Carr

Cookie Preferences