{"id":4433,"date":"2019-04-11T19:26:38","date_gmt":"2019-04-11T17:26:38","guid":{"rendered":"http:\/\/blog.via-internet.de\/?p=4433"},"modified":"2021-11-23T18:52:58","modified_gmt":"2021-11-23T17:52:58","slug":"github-cookbook-2","status":"publish","type":"post","link":"https:\/\/via-internet.de\/blog\/2019\/04\/11\/github-cookbook-2\/","title":{"rendered":"Git | Cookbook"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\" id=\"github-hints\">Github hints<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"repository-quick-setup\">Repository \u2014  <strong>Quick setup<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Clone repository<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">.. or create a new repository on the command line<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">echo \"# Init \" >> README.md\ngit init\ngit add README.md\ngit commit -m \"first commit\"\ngit remote add origin &lt;url>\ngit push -u origin master<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u2026or push an existing repository from the command line<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">git remote add origin git@github.com:&lt;username>\/&lt;repository>.git\ngit push -u origin master<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"merge-branch-with-master\">Merge branch with master<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"merging-via-command-line\">Merging via command line<\/h4>\n\n\n\n<div class=\"wp-block-columns has-2-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>Step 1:<\/strong> From your project repository, bring in the changes and test. <\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">git fetch origin\ngit checkout -b develop origin\/develop\ngit merge master<\/pre>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-columns has-2-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>Step 2:<\/strong> Merge the changes and update on GitHub.  <\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">git checkout master\ngit merge --no-ff develop\ngit push origin master<\/pre>\n<\/div>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"usefull-commands\">Useful commands<\/h2>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"to-show-information-about-a-remote-for-example-if-tracked-branches-are-up-to-date\">To show information about a remote, for example if tracked branches are up-to-date:<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"false\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">git remote show origin\ngit remote -v\ngit remote add &lt;shortname> &lt;url>\ngit fetch &lt;remote>\ngit push &lt;remote> &lt;branch>\ngit remote show &lt;remote>\ngit remote rename &lt;old> &lt;new>\ngit remote remove &lt;name><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"to-show-log-messages-of-the-changes-between-branches\">To show log messages of the changes between branches:<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"false\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">git log origin\/master ^master<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"show-log-graph\">Show log graph<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">git log --pretty=format:\"\n\n\n\n<h4 class=\"wp-block-heading\" id=\"to-show-differences-between-branches\">To show differences between branches:<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$ git diff master origin\/master<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"show-what-git-pull-will-doing\">Show , what git pull will doing<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$ git fetch &amp;&amp; git diff HEAD..@{u}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Or add the command to  ~\/.gitconfig file:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">[alias]\n        diffpull=!git fetch &amp;&amp; git diff HEAD..@{u}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"run-this-to-see-how-git-diff-resolution-works\">Run this to see how git diff resolution works<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">git rev-parse origin<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"delete-remote-branch\">Delete remote branch<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">git clone &lt;repository> master\ncd master\ngit push origin --delete feature-2.01.03<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"show-log\">Show log<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">git log --oneline --graph --all --decorate<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"undo-commit\">Undo commit<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">git commit --amend<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"unstaging-a-staged-file\">Unstaging a staged file<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">git reset HEAD &lt;filename><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"unmodifying-a-modified-file\">Unmodifying a Modified File<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$ git checkout -- &lt;filename><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"retrieve-last-modification-date\">Retrieve last modification date <\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"false\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">git ls-files -z | xargs -0 -n1 -I{} -- git log -1 --format=\"\n\n\n\n<h2 class=\"wp-block-heading\" id=\"git-configuration\">Git Configuration<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"show-location-of-configuration-files\">Show location of configuration files<\/h3>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">git config --list --show-origin<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This dows not work, if you have set the environment var GIT_CONFIG. In this case, do<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">unset GIT_CONFIG\ngit config --global --list<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"edit-config-files\">Edit config files<\/h2>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">git config --edit --global<\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">git config --edit --system<\/pre>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>DESCRIPTION<\/th><th>GIT COMMAND<\/th><\/tr><\/thead><tbody><tr><td>Configure the author name to be used with your commits.<\/td><td><code>git config --global user.name \"XXX\"<\/code><\/td><\/tr><tr><td>Configure the author email address to be used with your commits<\/td><td><code>git config --global user.email xxx@example.com<\/code><\/td><\/tr><tr><td>Will remove user credential details from the repository<\/td><td><code>git config --local credential.helper \"\"<\/code><\/td><\/tr><tr><td><\/td><td>git config \u2014show-origin <\/td><\/tr><tr><td>List all currently configured remote repository URLs<\/td><td><code>git remote -v<\/code><\/td><\/tr><tr><td>If you haven&#8217;t connected your local repository to a remote server, To add a remote server to a local repository<\/td><td><code>git remote add origin &lt;repo_url&gt;<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"git-commit-and-push\">Git Commit and Push<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>DESCRIPTION<\/th><th>GIT COMMAND<\/th><\/tr><\/thead><tbody><tr><td>Create a file name&nbsp;<code>README.md<\/code>&nbsp;with&nbsp;<code>Readme content<\/code>&nbsp;content<\/td><td><code>echo \"Readme content\" &gt;&gt; README.md<\/code><\/td><\/tr><tr><td>List the files you&#8217;ve changed and those you still need to add or commit<\/td><td><code>git status<\/code><\/td><\/tr><tr><td>Add all or one file to staging<\/td><td><code>git add .<\/code>&nbsp;OR&nbsp;<code>git add file_name<\/code><\/td><\/tr><tr><td>Commit changes to head with message<\/td><td><code>git commit -m 'message'<\/code><\/td><\/tr><tr><td>Commit any files you&#8217;ve added with&nbsp;<code>git add<\/code>, and also commit any files you&#8217;ve changed since then<\/td><td><code>git commit -a<\/code><\/td><\/tr><tr><td>Send all commits from local repository to remote repository<\/td><td><code>git push<\/code><\/td><\/tr><tr><td>Do a&nbsp;<code>git push<\/code>&nbsp;and sets the default remote branch for the current local branch. So any future&nbsp;<code>git pull<\/code>&nbsp;command will attempt to bring in commits from the&nbsp;<code>&lt;remote-branch&gt;<\/code>into the current local branch<\/td><td><code>git push -u &lt;remote-branch&gt;<\/code><\/td><\/tr><tr><td>Send changes to the master branch of your remote repository<\/td><td><code>git push origin master<\/code><\/td><\/tr><tr><td>Push a specific branch to your remote repository<\/td><td><code>git push origin &lt;branch_name&gt;<\/code><\/td><\/tr><tr><td>Push all branches to your remote repository<\/td><td><code>git push --all origin<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"working-with-the-git-workflow\">Working with the Git Workflow<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The following steps are based on a branching model,  described <a href=\"https:\/\/nvie.com\/posts\/a-successful-git-branching-model\/\">here<\/a>.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><th>Name<\/th><th>&nbsp;Beschreibung<\/th><\/tr><tr><td>master<\/td><td><\/td><\/tr><tr><td>hotfixes<\/td><\/tr><tr><td>release<\/td><\/tr><tr><td>develop<\/td><\/tr><tr><td>feature<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"Workflow-MitBranchesarbeiten\">Working with branches<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"Workflow-Brancheserstellen\">Create branch &#8216;develop&#8217;<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$ git clone git@github.com:&lt;USER>\/&lt;REPO>.git develop\n$ cd develop\n$ git checkout -b develop\n$ git push --set-upstream origin develop<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"create-branch-feature-xxx\">Create branch &#8216;feature-xxx&#8217;<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">We dont&#8217;t want do clone the whole repository, but only the files needed for the feature<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$ git clone -b develop -n --depth 1 git@github.com:&lt;USER>\/&lt;REPO>.git feature-2.2.0\n$ cd feature-2.2.0\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"Workflow-Branchl\u00f6schen\">Branch l\u00f6schen<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$ git push origin -delete hotfix-1.2.1-compress-data<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"Workflow-Workflow-Cheatsheet\">Workflow &#8211; Cheatsheet<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"working-with-branches\">Working with branches<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>How to rename git local and remote branches<\/strong><\/p>\n\n\n\n<div class=\"wp-block-columns has-2-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Check out branch with old name<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">git checkout feature-2.1.2<\/pre>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-columns has-2-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Rename branch<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">git branch -m feature-2.01.02<\/pre>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-columns has-2-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Checkin branch with new name<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">git push origin :feature-2.1.2 feature-2.01.02<\/pre>\n<\/div>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>1. Rename your local branch.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you have named a branch incorrectly AND pushed this to the remote repository follow these steps before any other developers get a chance to jump on you and give you shit for not correctly following naming conventions.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you are on the branch you want to rename:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">git branch -m new-name<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">If you are on a different branch:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">git branch -m old-name new-name<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>2. Delete the old-name remote branch and push the new-name local branch.<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">git push origin :old-name new-name<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>3. Reset the upstream branch for the new-name local branch.<\/strong>Switch to the branch and then:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">git push origin -u new-name<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Or you as a fast way to do that, you can use these 3 steps: command in your terminal<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">git branch -m old_branch new_branch         # Rename branch locally    \ngit push origin :old_branch                 # Delete old branch    \ngit push --set-upstream origin new_branch   # Push new branch, set local branch to track new remote<\/pre>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><th>Neues Feature erstellen<\/th><\/tr><tr><td>Repository clonen<\/td><td>$ git checkout -b feature-1.2.2 develop<\/td><\/tr><tr><td>\u00c4nderungen durchf\u00fchren<\/td><\/tr><tr><td>\u00c4nderungen einchecken<\/td><td>$ git checkout develop<br>$ git merge &#8211;no-ff feature-1.2.2 <br>$ git branch -d feature-1.2.2 <br>$ git push origin develop <\/td><\/tr><tr><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><th>Neuen Hotfix erstelllen<\/th><\/tr><tr><td>Repository auschecken<\/td><td>$ git checkout -b hotfix-1.2.1 master<\/td><\/tr><tr><td>\u00c4nderungen durchf\u00fchren<\/td><\/tr><tr><td>\u00c4nderungen einchecken<\/td><td>$ git commit -a -m &#8220;hotfix: hotfix-1.2.1| compress mart&#8221;<\/td><\/tr><tr><td>Hotfix beenden<\/td><td>$ git checkout master<br>$ git merge &#8211;no-ff hotfix-1.2.1 <br>$ git tag -a 1.2.1<\/td><\/tr><tr><td>Hotfix in Master einchecken<\/td><td>$ git checkout develop<br>$ git merge &#8211;no-ff hotfix-1.2.1  &nbsp;<\/td><\/tr><tr><td>Hotfix Branch entfernen<\/td><td>$ git branch -d hotfix-1.2.1<\/td><\/tr><tr><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><th>Neues Release erstellen:<\/th><\/tr><tr><td>Repository clonen<\/td><td>$ git checkout -b release-1.2 develop<\/td><\/tr><tr><td>\u00c4nderungen durchf\u00fchren<\/td><\/tr><tr><td>\u00c4nderungen einchecken<\/td><td>$ git commit -a -m &#8220;release: changes for release 1.2&#8221;<\/td><\/tr><tr><td>Release beenden<\/td><td>$ git checkout master<br>$ git merge &#8211;no-ff release-1.2<br>$ git tag -a 1.2<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"git-flow\">Git Flow<\/h2>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"initialize\">Initialize<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Start using git-flow by initializing it inside an existing git repository:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$ git flow init<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"start-a-new-feature\">Start a new feature<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Development of new features starting from the &#8216;develop&#8217; branch.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">git flow feature start MYFEATURE<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"finish-up-a-feature\">Finish up a feature<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Finish the development of a feature. This action performs the following<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">git flow feature finish MYFEATURE<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"publish-a-feature\">Publish a feature<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Publish a feature to the remote server so it can be used by other users.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">git flow feature publish MYFEATURE<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"getting-a-published-feature\">Getting a published feature<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Get a feature published by another user.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">git flow feature pull origin MYFEATURE<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">You can track a feature on origin by using<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">git flow feature track MYFEATURE<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"start-a-release\">Start a release<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">git flow release start RELEASE [BASE]<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">It&#8217;s wise to publish the release branch after creating it to allow release commits by other developers. Do it similar to feature publishing with the command:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">git flow release publish RELEASE<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">(You can track a remote release with the&nbsp;<br><code>git flow release track RELEASE<\/code>command)<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"finish-up-a-release\">Finish up a release<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">git flow release finish RELEASE<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Don&#8217;t forget to push your tags with&nbsp;<code>git push origin --tags<\/code><\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"hotfixes\">Hotfixes<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">git flow hotfix start VERSION [BASENAME]<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"finish-a-hotfix\">Finish a hotfix<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">git flow hotfix finish VERSION<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"usefull-commands\">Usefull commands<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><th>basic commands<\/th><th>description<\/th><\/tr><tr><td>git init<\/td><\/tr><tr><td>git status&nbsp; [ -s ]<\/td><td>status of files and local repo<\/td><\/tr><tr><td>git ls-files<\/td><td>show files which are tracked by git<\/td><\/tr><tr><td>git log [ &#8211;oneline ]<br>git log [&#8211;oneline &#8211;graph &#8211;decorate &#8211;all]<\/td><td>shows commit history<\/td><\/tr><tr><td>git add &lt;changed file&gt;<br>git add .git add -u<\/td><td>add single file to indexadd all files from the workspace to indexstage current workspace into index to cleanup inconsistencies<\/td><\/tr><tr><td>git commit [ -m &#8216;message&#8217; ]<\/td><td>commit into local repo only<\/td><\/tr><tr><td>git push -u origin master<\/td><td>push the repo from local to remote repo<\/td><\/tr><tr><td>git help [option]<\/td><td>get help page for specific options<\/td><\/tr><tr><td>git config &#8211;global alias.bla &#8220;command&#8221;<br>git bla [&#8211; &lt;filename&gt;]<\/td><td>set alias bla to a specific commandexec alias (for specific file)<\/td><\/tr><tr><td>git mv fileA fileB<br>git commit -m &#8220;&#8230;..&#8221;<\/td><td>rename fileA to fileBand commit<\/td><\/tr><tr><td>git rm fileC<br>git commit -m &#8220;&#8230;..&#8221;<\/td><td>delete fileCand commit<\/td><\/tr><tr><\/tr><tr><th>advanced commands<\/th><th>description<\/th><\/tr><tr><td>git reset HEAD &lt;filename&gt;<\/td><td>undo changes from index back to workspace<\/td><\/tr><tr><td>git checkout &lt;filename&gt;<br>git checkout master<br>git checkout &lt;branchname&gt;<\/td><td>checkout single file from local repo to workspacecheckout\/switch to the master branchcheckout\/switch to another branch<\/td><\/tr><tr><td>git checkout -b &lt;new branchname&gt;<br>git branch &lt;new branchname&gt;<\/td><td>create new branch and switch to it immediatelycreate new branch in the background, doesn&#8217;t switch to it<\/td><\/tr><tr><td>git branch<\/td><td>shows all available branches<\/td><\/tr><tr><td>git diff<br>git difftool<\/td><td>show differences of local and committed file<br>shows diff in vimdiff<\/td><\/tr><tr><td>git merge &lt;other branch&gt;<br>git mergetool<\/td><td>merge other branch into master (current branch)manage the different files in vimdiff<\/td><\/tr><tr><td>git branch -d &lt;branchname&gt;<\/td><td>delete branch (does NOT include merge)<\/td><\/tr><tr><td>git branch -m &lt;new name&gt;<\/td><td>rename a <\/td><\/tr><tr><td>$ git diff master..development <\/td><td>compare two branches<\/td><\/tr><tr><td>git tag &lt;mytag&gt;<br>git tag -a v1.0 -m &#8220;description&#8221;<br>git show v1.0<\/td><td>add an additional label\/tag to a branchannotation tag with release informationshows details of tag v1.0<\/td><\/tr><tr><td>git stash<\/td><\/tr><tr><td>git reset &lt;ID&gt;&nbsp;[&#8211;soft | &#8211;mixed | &#8211;hard]<br>git reflog &#8230;.<\/td><\/tr><tr><td>git fetch &#8230;.<\/td><td>update local repo with changes from remote repo. (non destructive)<\/td><\/tr><tr><td>git pull &#8230;<\/td><td>update local repo with changes from remote repo. it does effectively a fetch and merge in one command<\/td><\/tr><tr><td>git clone https:\/\/&lt;<em>username<\/em>&gt;:&lt;<em>token<\/em>&gt;@github.com\/&lt;<em>organisation-space<\/em>&gt;\/&lt;<em>repository<\/em>&gt;<br><\/td><td>download the remote repo into local workspace<\/td><\/tr><tr><td>git remote -v<br>git remote show origin<\/td><td>shows url of remote reposhows detail infos of a remote repo<\/td><\/tr><tr><\/tr><tr><td>.gitignore<\/td><td>contains filename to exclude from git<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"git-workflow\">Git Workflow<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"release\">Release<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"creating-a-release-branch\">Creating a release branch<\/h4>\n\n\n\n<div class=\"wp-block-columns has-2-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\n\nRelease branches are created from the&nbsp;<code>develop<\/code>&nbsp;branch. For example, say version 1.1.5 is the current production release and we have a big release coming up. The state of&nbsp;<code>develop<\/code>is ready for the \u201cnext release\u201d and we have decided that this will become version 1.2 (rather than 1.1.6 or 2.0). So we branch off and give the release branch a name reflecting the new version number:\n\n<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$ git checkout -b release-1.2 develop<\/pre>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-columns has-2-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p class=\"wp-block-paragraph\">After creating a new branch and switching to it, we bump the version number. Here,&nbsp;<code>bump-version.sh<\/code>&nbsp;is a&nbsp;fictional&nbsp;shell script that changes some files in the working copy to reflect the new version. (This can of course be a manual change\u2014the point being that&nbsp;<em>some<\/em>&nbsp;files change.) Then, the bumped version number is committed.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This new branch may exist there for a while, until the release may be rolled out definitely. During that time, bug fixes may be applied in this branch (rather than on the&nbsp;<code>develop<\/code>branch). Adding large new features here is strictly prohibited. They must be merged into&nbsp;<code>develop<\/code>, and therefore, wait for the next big release.<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$ .\/bump-version.sh 1.2&lt;br>\n$ git commit -a -m \"Version 1.2\"<\/pre>\n<\/div>\n<\/div>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"finishing-a-release-branch\"> Finishing a release branch&nbsp; <\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$ git checkout master\n$ git merge --no-ff release-1.2\n$ git tag -a 1.2\n$ git checkout develop\n$ git merge --no-ff release-1.2\n$ git branch -d release-1.2<\/pre>\n\n\n\n<div class=\"wp-block-columns has-2-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p class=\"wp-block-paragraph\">When the state of the release branch is ready to become a real release, some actions need to be carried out.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">First, the release branch is merged into <code>master<\/code> (since every commit on <code>master<\/code>&nbsp;is a new release&nbsp;<em>by definition<\/em>, remember).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Next, that commit on <code>master<\/code>&nbsp;must be tagged for easy future reference to this historical version. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Finally, the changes made on the release branch need to be merged back into&nbsp;<code>develop<\/code>, so that future releases also contain these bug fixes. <\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$ git checkout master\n$ git merge --no-ff release-1.2\n$ git tag -a 1.2<\/pre>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-columns has-2-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p class=\"wp-block-paragraph\">The release is now done, and tagged for future reference.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To keep the changes made in the release branch, we need to merge those back into&nbsp;<code>develop<\/code>, though. In Git:<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$ git checkout develop\n$ git merge --no-ff release-1.2<\/pre>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-columns has-2-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p class=\"wp-block-paragraph\">This step may well lead to a merge conflict (probably even, since we have changed the version number). If so, fix it and commit.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Now we are really done and the release branch may be removed, since we don\u2019t need it anymore:<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$ git branch -d release-1.2<\/pre>\n<\/div>\n<\/div>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"feature\">Feature<\/h3>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"http:\/\/blog.via-internet.de\/wp-content\/uploads\/2019\/03\/fb@2x-e1554287024987-700x261.png\" alt=\"\" class=\"wp-image-4387\"\/><\/figure>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$ git checkout -b myfeature develop\n$ .. do changes...\n\n$ git checkout develop\n$ git merge --no-ff myfeature\n$ git branch -d myfeature\n$ git push origin develop<\/pre>\n\n\n\n<div class=\"wp-block-columns has-2-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<h4 class=\"wp-block-heading\" id=\"creating-a-feature-branch\">Creating a feature branch&nbsp;<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">When starting work on a new feature, branch off from the&nbsp;<code>develop<\/code>&nbsp;branch.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$ git checkout -b myfeature develop\nSwitched to a new branch \"myfeature\"\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"incorporating-a-finished-feature-on-develop\">Incorporating a finished feature on develop&nbsp;<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Finished features may be merged into the&nbsp;<code>develop<\/code>&nbsp;branch to definitely add them to the upcoming release:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$ git checkout develop&lt;\n$ git merge --no-ff myfeature\n$ git branch -d myfeature\n$ git push origin develop <\/pre>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\"><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-columns has-2-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p class=\"wp-block-paragraph\"> The&nbsp;<code>--no-ff<\/code> flag causes the merge to always create a new commit object, even if the merge could be performed with a fast-forward. This avoids losing information about the historical existence of a feature branch and groups together all commits that together added the feature.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In the latter case, it is impossible to see from the Git history which of the commit objects together have implemented a feature\u2014you would have to manually read all the log messages. Reverting a whole feature (i.e. a group of commits), is a true headache in the latter situation, whereas it is easily done if the <code>--no-ff<\/code>&nbsp;flag was used. <\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/nvie.com\/img\/merge-without-ff@2x.png\" alt=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n<\/div>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"hotfix\">Hotfix<\/h2>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"http:\/\/blog.via-internet.de\/wp-content\/uploads\/2019\/03\/hotfix-branches@2x-e1554287153961-700x519.png\" alt=\"\" class=\"wp-image-4394\"\/><\/figure>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$ git checkout -b hotfix-1.2.1 master\n$ ... do changes ... \n$ git commit -a -m \"Hotfix Version 1.2.1\"\n$ .. fix bug\n$ git commit -m \"Fixed severe production problem\"\n\n$ git checkout master\n$ git merge --no-ff hotfix-1.2.1\n$ git tag -a 1.2.1\n\n# incude hotfix into develop\n$ git checkout develop\n$ git merge --no-ff hotfix-1.2.1\n\n# finally, remove hotfix branch\n$ git branch -d hotfix-1.2.1<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"troubleshooting\">Troubleshooting<\/h2>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"debugging-github-errors\">Debugging Github Errors<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">export GIT_TRACE_PACKET=1\nexport GIT_TRACE=1\nexport GIT_CURL_VERBOSE=1<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"error-message-your-local-changes-to-the-following-files-would-be-overwritten-by-merge\">Error Message:  Your local changes to the following files would be overwritten by merge: <\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">error: Your local changes to the following files would be overwritten by merge:&lt;br>\n        README.md&lt;br>\nPlease commit your changes or stash them before you merge.<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"solution\">Solution:<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$ git fetch origin master\n$ git diff origin\/master -- [local-path]<\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$ git add [local-path]\n$ gt commit -m \"change: in file [local-path]\"<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"fatal-sha1-file-stdout-write-error-broken-pipe\">fatal: sha1 file &#8216;&lt;stdout&gt;&#8217; write error: Broken Pipe <\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">When using ssh to connect to the repositoriy, sometime, you got a timeout if you push to many files or if the files are to big<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"one-possible-solution\">One possible Solution<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Configure ssh to use the following value<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">~\/.ssh\/config<\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"ini\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Host *\n     ServerAliveInterval 30\n     ServerAliveCountMax 4<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"git-clone-file-name-to-long-on-windows\">git clone: file name to long on windows<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">git config --system core.longpaths true<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"git-config-global-user-email-some-email-com-throws-error-only-one-config-file-at-a-time\">git config &#8211;global user.email \u201csome@email.com\u201d throws \u201cerror: only one config file at a time.<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Try to unset GIT_CONFIG and then list your global config with<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">unset GIT_CONFIG\ngit config --global --list<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Other Links<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/medium.com\/flawless-app-stories\/useful-git-commands-for-everyday-use-e1a4de64037d\">Useful Git commands for everyday use<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/medium.com\/android-bits\/10-useful-git-commands-you-always-need-b0d0a50b81e6\">10 useful Git commands you always need<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/orga.cat\/posts\/most-useful-git-commands\">Most useful Git commands<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/artandlogic.com\/2014\/01\/git-cheat-sheet\/\">Git Cheat Sheet<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/dzone.com\/articles\/useful-git-commands\">Useful Git commands<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"using-local-filesystem-as-respository-master\">Using local Filesystem as Respository-Master<\/h2>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"preparation\">Preparation<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Set environment variables for easy typing<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"false\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$ REPOS=$HOME\/repos<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"create-repository\">Create Repository<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"false\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$ mkdir $REPOS\n$ cd    $REPOS<\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"false\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$ git init --bare src<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"create-src-folder\">Create src folder<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"false\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$ mkdir $HOME\/entw\n$ cd    $HOME\/entw\n$ mkdir src\n$ cd    src\n$ git init<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"create-some-content\">Create some content<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"false\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$ touch README.md<\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"false\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$ git add -A<\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"false\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$ git commit -m \"initial commit\"<\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"false\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$ git remote add origin $REPOS\/src\n$ git remote -v\n$ git push --set-upstream origin master\n$ git push origin master<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"create-clone\">Create clone<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"false\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$ mkdir $HOME\/test\n$ cd    $HOME\/test<\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"false\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$ git clone $HOME\/repos\/src<\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"false\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$ cd src\n$ ls -al\ntotal 0\ndrwxr-xr-x   4 user  wheel  128 19 M\u00e4r 18:48 .\ndrwxr-xr-x   3 user  wheel   96 19 M\u00e4r 18:48 ..\ndrwxr-xr-x  12 user  wheel  384 19 M\u00e4r 18:48 .git\n-rw-r--r--   1 user  wheel    0 19 M\u00e4r 18:48 README.md<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">You will notice, that the file README.md is empty. Because it was ony created with touch.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"add-some-content-to-source-repository\">Add some content to source repository<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"false\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$ cd $HOME\/entw\/src\n$ echo \"# This is the README.md from ENTW\" >README.md\n$ touch git_update\n$ touch git_push<\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"false\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$ ls -al\ntotal 16\ndrwxr-xr-x   6 user  wheel  192 19 M\u00e4r 18:53 .\ndrwxr-xr-x   3 user  wheel   96 19 M\u00e4r 18:43 ..\ndrwxr-xr-x  12 user  wheel  384 19 M\u00e4r 18:47 .git\n-rw-r--r--   1 user  wheel   34 19 M\u00e4r 18:52 README.md\n-rw-r--r--   1 user  wheel    0 19 M\u00e4r 18:53 git_push\n-rw-r--r--   1 user  wheel    0 19 M\u00e4r 18:53 git_update<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"add-changes-to-repository\">Add changes to repository<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$ git add -A\n$ git commit -m \"-\"\n[master 106b27a] -\n 3 files changed, 1 insertion(+)\n create mode 100644 git_push\n create mode 100644 git_update<\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"false\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$ git push --set-upstream origin master\nObjekte aufz\u00e4hlen: 5, Fertig.\nZ\u00e4hle Objekte: 100\nDelta-Kompression verwendet bis zu 8 Threads.\nKomprimiere Objekte: 100\nSchreibe Objekte: 100\nGesamt 3 (Delta 0), Wiederverwendet 0 (Delta 0)\nTo ....\/repos\/src\n   7ed6d3b..106b27a  master -> master\nBranch 'master' folgt nun Remote-Branch 'master' von 'origin'.<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"update-clone\">Update clone<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"false\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$ cd $OME\/test\/src\n$ git pull\n# git fetch   # This updates 'remote' portion of local repo. \n# git reset --hard origin\/&lt;your-working-branch>\nremote: Objekte aufz\u00e4hlen: 5, Fertig.\nremote: Z\u00e4hle Objekte: 100\nremote: Komprimiere Objekte: 100\nremote: Gesamt 3 (Delta 0), Wiederverwendet 0 (Delta 0)\nEntpacke Objekte: 100\nVon ...\/repos\/src\n   7ed6d3b..106b27a  master     -> origin\/master<\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"false\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$ git merge origin\/master\nAktualisiere 7ed6d3b..106b27a\nFast-forward\n README.md  | 1 +\n git_push   | 0\n git_update | 0\n 3 files changed, 1 insertion(+)\n create mode 100644 git_push\n create mode 100644 git_update<\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"false\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$ ls -al\ntotal 16\ndrwxr-xr-x   6 user  wheel  192 19 M\u00e4r 19:02 .\ndrwxr-xr-x   3 user  wheel   96 19 M\u00e4r 18:48 ..\ndrwxr-xr-x  14 user  wheel  448 19 M\u00e4r 19:02 .git\n-rw-r--r--   1 user  wheel   34 19 M\u00e4r 19:02 README.md\n-rw-r--r--   1 user  wheel    0 19 M\u00e4r 19:02 git_push\n-rw-r--r--   1 user  wheel    0 19 M\u00e4r 19:02 git_update<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"todo\">TODO<\/h2>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"see-changes-before-pulling-from-remote-git-repositoryf\">See changes before pulling from remote git repository<a href=\"https:\/\/gist.github.com\/jtdp\/5443297#file-gistfile1-sh\"><strong>f<\/strong><\/a><\/h4>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td># fetch the changes from the remote<\/td><\/tr><tr><td>git fetch origin<\/td><\/tr><tr><\/tr><tr><td># show commit logs of changes<\/td><\/tr><tr><td>git log master..origin\/master<\/td><\/tr><tr><\/tr><tr><td># show diffs of changes<\/td><\/tr><tr><td>git diff master..origin\/master<\/td><\/tr><tr><\/tr><tr><td># apply the changes by merge..<\/td><\/tr><tr><td>git merge origin\/master<\/td><\/tr><tr><\/tr><tr><td># .. or just pull the changes<\/td><\/tr><tr><td>git pull<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"you-want-to-push-your-local-files-to-remote-files\">You want to push your local files to remote files<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">git push -f &lt;remote> &lt;branch><\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">git push -f origin master<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"configure-hooks\">Configure Hooks<\/h3>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">git config --global core.hooksPath .githooks\nmkdir .githooks\ncp .git\/hooks\/* .githooks<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"prepare-commit\">commit-msg<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#!\/bin\/sh\n#\n\nNAME=$(git rev-parse --abbrev-ref HEAD) \nDESCRIPTION=$(git config branch.\"$NAME\".description)\n\necho \"$NAME\"': '$(cat \"$1\") > \"$1\"\nif [ -n \"$DESCRIPTION\" ] \nthen\n   echo \"\" >> \"$1\"\n   echo $DESCRIPTION >> \"$1\"\nfi<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"prepare-commit\">prepare-commit<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#!\/bin\/sh\n#\n\nCOMMIT_MSG_FILE=$1\nCOMMIT_SOURCE=$2\nSHA1=$3\n\nbranchPath=$(git symbolic-ref -q HEAD)\nbranchName=${branchPath##*\/}\n\n\nif [ -n \"$branchName\" ]; then\n    echo \"$branchName | $(cat $1)\" > $1\nfi<\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">file=$(git config hooks.versionfilename)\nif [[ -z $file ]]\nthen\n  file=\".version\"\nfi\n\n# Version number\necho \"$(git rev-parse --abbrev-ref HEAD): $(git describe --tags --long)\" >$file\n\nexec git add $file<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"pre-commit\">pre-commit<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#!\/bin\/sh\n\n_BRANCHPATH=$(git symbolic-ref -q HEAD)\n_BRANCHNAME=${_BRANCHPATH##*\/}\n\n_TIMESTAMP=\"$(date '+\n\necho \"HOOK      : $0\"\necho \"PARAMETER : '$*''\"\necho \"BRANCHPATH: $_BRANCHPATH\"\necho \"BRANCHNAME: $_BRANCHNAME\"\n\nLOG() {\n    [[ \"$GIT_COMMIT_DETAILED_LOGGING\" == \"YES\" ]] &amp;&amp; echo \"LOG: $*\"\n}\n\nREPLACE()\n{\n   local _TYP;   _TYP=\"$1\"; shift\n   local _TAG;   _TAG=\"$1\"; shift\n   local _WITH; _WITH=\"$1\"; shift\n   local _FILE; _FILE=\"$1\"; shift\n\n   case \"$_TYP\" in\n      PYTHON)   perl -pi -e 's\/(\\s*)(__DEPLOY_'${_TAG}'\\s*=\\s*)(\".+\")\/${1}${2}\"'\"${_WITH}\"'\"\/' \"${_FILE}\"\n                ;;\n      *)        LOG \"Undefined typ '$TYP' for file $_FILE\"\n                ;;\n   esac\n\n   rm -f \"${_FILE}.bak\"\n}\n\nLOG \"working on branch $_BRANCH\"\n\nfor _FILE in $(git diff-index --name-status --cached HEAD | grep -v ^D | cut -c3-)\ndo\n    LOG \"checking: $_FILE\"\n\n    # Only examine known text files\n    if [[ \"$_FILE\" =~ [.](py)$ ]]; then\n        LOG \"patching: $_FILE\"\n\n        REPLACE PYTHON TAG       \"$_BRANCHNAME\" \"$_FILE\"\n        REPLACE PYTHON TIMESTAMP \"$_TIMESTAMP\"  \"$_FILE\"\n    fi\ndone\n<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"get-information\">Get Information<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>git rev-parse &#8211;abbrev-ref HEAD<\/td><td>get branch name<\/td><td>feature\/add-new-content<\/td><\/tr><tr><td>git symbolic-ref -q HEAD<\/td><td><\/td><td>refs\/heads\/<meta charset=\"utf-8\">feature\/add-new-content<\/td><\/tr><tr><td><meta charset=\"utf-8\">git rev-parse &#8211;show-toplevel<\/td><td><meta charset=\"utf-8\">show current path of git repository<\/td><td><\/td><\/tr><tr><td><\/td><td><\/td><td><\/td><\/tr><tr><td><\/td><td><\/td><td><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"config\">Config<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"change-github-repository-for-local-clone\">Change Github repository for local clone<\/h3>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">cd &lt;original repository>\ngit remote set-url origin https:\/\/github.com\/&lt;new git user>\/&lt;new project name>\ngit push -u origin master\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"cr-lf-mapping\">CR\/LF Mapping<\/h3>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">git config core.autocrlf true\ngit config --global core.safecrlf false<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"create-release\">Create Release<\/h2>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#!\/bin\/bash\n\nif [ $# -ne 1 ]; then\n  echo \"Syntax: release [VERSION]\"\n  exit 1\nfi\n\nVERSION=$1\n\n# Create release\ngit flow release start $VERSION || exit 1\nGIT_MERGE_AUTOEDIT=no git flow release finish -m $VERSION $VERSION\n\n# Publish release\ngit push origin HEAD --tags\n\n# Merge release into develop\ngit checkout develop\ngit merge master<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Github hints Repository \u2014 Quick setup Clone repository .. or create a new repository on the command line \u2026or push an existing repository from the command line Merge branch with master Merging via command line Step 1: From your project repository, bring in the changes and test. Step 2: Merge the changes and update on GitHub. Useful commands To show information about a remote, for example if tracked branches are up-to-date: To show log messages of the changes between branches: Show log graph To show differences between branches: Show , what git pull will doing Or add the command to ~\/.gitconfig [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":4300,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_crdt_document":"","_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[16,28],"tags":[],"class_list":["post-4433","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cookbook","category-git_github"],"jetpack_featured_media_url":"https:\/\/via-internet.de\/blog\/wp-content\/uploads\/2019\/03\/Logo-Github.png","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/via-internet.de\/blog\/wp-json\/wp\/v2\/posts\/4433","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/via-internet.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/via-internet.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/via-internet.de\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/via-internet.de\/blog\/wp-json\/wp\/v2\/comments?post=4433"}],"version-history":[{"count":4,"href":"https:\/\/via-internet.de\/blog\/wp-json\/wp\/v2\/posts\/4433\/revisions"}],"predecessor-version":[{"id":9010,"href":"https:\/\/via-internet.de\/blog\/wp-json\/wp\/v2\/posts\/4433\/revisions\/9010"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/via-internet.de\/blog\/wp-json\/wp\/v2\/media\/4300"}],"wp:attachment":[{"href":"https:\/\/via-internet.de\/blog\/wp-json\/wp\/v2\/media?parent=4433"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/via-internet.de\/blog\/wp-json\/wp\/v2\/categories?post=4433"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/via-internet.de\/blog\/wp-json\/wp\/v2\/tags?post=4433"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}