<titledata-rh="true">Submitting merge requests | mf</title><metadata-rh="true"name="viewport"content="width=device-width,initial-scale=1"><metadata-rh="true"name="twitter:card"content="summary_large_image"><metadata-rh="true"property="og:url"content="https://blog.mfocko.xyz/c/mr/"><metadata-rh="true"property="og:locale"content="en"><metadata-rh="true"name="docusaurus_locale"content="en"><metadata-rh="true"name="docsearch:language"content="en"><metadata-rh="true"name="docusaurus_version"content="current"><metadata-rh="true"name="docusaurus_tag"content="docs-c-current"><metadata-rh="true"name="docsearch:version"content="current"><metadata-rh="true"name="docsearch:docusaurus_tag"content="docs-c-current"><metadata-rh="true"property="og:title"content="Submitting merge requests | mf"><metadata-rh="true"name="description"content="This tutorial aims to show you how to follow basic git workflow and submit changes"><metadata-rh="true"property="og:description"content="This tutorial aims to show you how to follow basic git workflow and submit changes"><linkdata-rh="true"rel="icon"href="/img/favicon.ico"><linkdata-rh="true"rel="canonical"href="https://blog.mfocko.xyz/c/mr/"><linkdata-rh="true"rel="alternate"href="https://blog.mfocko.xyz/c/mr/"hreflang="en"><linkdata-rh="true"rel="alternate"href="https://blog.mfocko.xyz/c/mr/"hreflang="x-default"><linkdata-rh="true"rel="preconnect"href="https://0VXRFPR4QF-dsn.algolia.net"crossorigin="anonymous"><linkrel="search"type="application/opensearchdescription+xml"title="mf"href="/opensearch.xml">
<script>!function(){functiont(t){document.documentElement.setAttribute("data-theme",t)}vare=function(){try{returnnewURLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{returnlocalStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{constc=newURLSearchParams(window.location.search).entries();for(var[t,e]ofc)if(t.startsWith("docusaurus-data-")){vara=t.replace("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><divid="__docusaurus"><divrole="region"aria-label="Skip to main content"><aclass="skipToContent_fXgn"href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><navaria-label="Main"class="navbar navbar--fixed-top"><divclass="navbar__inner"><divclass="navbar__items"><buttonaria-label="Toggle navigation bar"aria-expanded="false"class="navbar__toggle clean-btn"type="button"><svgwidth="30"height="30"viewBox="0 0 30 30"aria-hidden="true"><pathstroke="currentColor"stroke-linecap="round"stroke-miterlimit="10"stroke-width="2"d="M4 7h22M4 15h22M4 23h22"></path></svg></button><aclass="navbar__brand"href="/"><bclass="navbar__title text--truncate">mf</b></a><divclass="navbar__item dropdown dropdown--hoverable"><ahref="#"aria-haspopup="true"aria-expanded="false"role="button"class="navbar__link">Additional FI MU materials</a><ulclass="dropdown__menu"><li><aclass="dropdown__link"href="/algorithms/">Algorithms</a></li><li><aaria-current="page"class="dropdown__link dropdown__link--active"href="/c/">C</a></li><li><aclass="dropdown__link"href="/cpp/">C++</a></li></ul></div><aclass="navbar__item navbar__link"href="/contributions/">Contributions</a><aclass="navbar__item navbar__link"href="/talks/">Talks</a></div><divclass="navbar__items navbar__items--right"><aclass="navbar__item navbar__link"href="/blog/">Blog</a><divclass="toggle_vylO colorModeToggle_DEke"><buttonclass="clean-btn toggleButton_gllP toggleButtonDisabled_aARS"type="button"disabled=""title="Switch between dark and light mode (currently light mode)"aria-label="Switch between dark and light mode (currently light mode)"aria-live="polite"><svgviewBox="0 0 24 24"width="24"height="24"class="lightToggleIcon_pyhR"><pathfill="currentColor"d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svgviewBox="0 0 24 24"width="24"height="24"class="darkToggleIcon_wfgR"><pathfill="currentColor"d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><divclass="navbarSearchContainer_Bca1"><buttontype="button"class="DocSearch DocSearch-Button"aria-label="Search"><spanclass="DocSearch-Button-Container"><svgwidth="20"height="20"class="DocSearch-Search-Icon"viewBox="0 0 20 20"><pathd="M14.38614.386l4.08774.0877-4.0877-4.0877c-2.
<p>This tutorial aims to show you how to follow basic git workflow and submit changes
through <em>Merge Requests</em> for review.</p>
<p>The rudimentary idea behind aims for changes to be present on a separate branch
that is supposedly <em>merged</em> into the default branch. Till then changes can be reviewed
on <em>Merge Request</em> and additional changes may be made based on the reviews. Once
the changes satisfy requirements, the merge request is merged.</p>
<h2class="anchor anchorWithStickyNavbar_LWe7"id="tutorial">Tutorial<ahref="#tutorial"class="hash-link"aria-label="Direct link to Tutorial"title="Direct link to Tutorial"></a></h2>
<blockquote>
<p>Use this tutorial only for bonus assignments <strong>made by your tutors</strong> or in case
you need to make up for the absence.</p>
</blockquote>
<h3class="anchor anchorWithStickyNavbar_LWe7"id="step-1---starting-from-the-clean-repository">Step #1 - Starting from the clean repository<ahref="#step-1---starting-from-the-clean-repository"class="hash-link"aria-label="Direct link to Step #1 - Starting from the clean repository"title="Direct link to Step #1 - Starting from the clean repository"></a></h3>
<p>In your repository (either locally or on aisa) type <code>git status</code> and check if your
repository is clean and you are present on the main branch (<code>master</code>, <code>main</code> or
<code>trunk</code>). If you do not know what your default branch is, it is probably <code>master</code>
and you should not be on any other branch.</p>
<p>Output of the command should look like this:</p>
<divclass="codeBlockContainer_Ckt0 theme-code-block"style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><divclass="codeBlockContent_biex"><pretabindex="0"class="prism-code language-text codeBlock_bY9V thin-scrollbar"style="color:#393A34;background-color:#f6f8fa"><codeclass="codeBlockLines_e6Vv"><spanclass="token-line"style="color:#393A34"><spanclass="token plain">aisa$ git status</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain">On branch master # Or main or trunk.</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain">Your branch is up to date with 'origin/master'.</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"style="display:inline-block"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain">nothing to commit, working tree clean</span><br></span></code></pre><divclass="buttonGroup__atx"><buttontype="button"aria-label="Copy code to clipboard"title="Copy"class="clean-btn"><spanclass="copyButtonIcons_eSgA"aria-hidden="true"><svgviewBox="0 0 24 24"class="copyButtonIcon_y97N"><pathfill="currentColor"d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svgviewBox="0 0 24 24"class="copyButtonSuccessIcon_LjdS"><pathfill="currentColor"d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>In case you are on different branch or there are uncommitted changes,
<strong>do not continue!!!</strong> Clean your repository (commit the changes or discard
them), before you continue.</p>
</blockquote>
<h3class="anchor anchorWithStickyNavbar_LWe7"id="step-2---create-new-branch">Step #2 - Create new branch<ahref="#step-2---create-new-branch"class="hash-link"aria-label="Direct link to Step #2 - Create new branch"title="Direct link to Step #2 - Create new branch"></a></h3>
<p>Instead of <code>BRANCH</code> use some reasonable name for the branch. For example if you
are working on the seminar from 3rd week, name the branch <code>seminar-03</code>.</p>
<h3class="anchor anchorWithStickyNavbar_LWe7"id="step-3---do-the-assignment">Step #3 - Do the assignment<ahref="#step-3---do-the-assignment"class="hash-link"aria-label="Direct link to Step #3 - Do the assignment"title="Direct link to Step #3 - Do the assignment"></a></h3>
<p>Download the skeleton for the seminar assignment, extract and program. For example
if you are working on 3rd seminar, you can do so by:</p>
<divclass="codeBlockContainer_Ckt0 theme-code-block"style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><divclass="codeBlockContent_biex"><pretabindex="0"class="prism-code language-text codeBlock_bY9V thin-scrollbar"style="color:#393A34;background-color:#f6f8fa"><codeclass="codeBlockLines_e6Vv"><spanclass="token-line"style="color:#393A34"><spanclass="token plain">aisa$ wget https://www.fi.muni.cz/pb071/seminars/seminar-03/pb071-seminar-03.zip</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain">aisa$ unzip pb071-seminar-03.zip</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"># Now you should have directory 'seminar-03'.</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain">aisa$ rm pb071-seminar-03.zip</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain">aisa$ cd seminar-03</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"># You can work on the assignment.</span><br></span></code></pre><divclass="buttonGroup__atx"><buttontype="button"aria-label="Copy code to clipboard"title="Copy"class="clean-btn"><spanclass="copyButtonIcons_eSgA"aria-hidden="true"><svgviewBox="0 0 24 24"class="copyButtonIcon_y97N"><pathfill="currentColor"d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svgviewBox="0 0 24 24"class="copyButtonSuccessIcon_LjdS"><pathfill="currentColor"d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h3class="anchor anchorWithStickyNavbar_LWe7"id="step-4---commit-and-upload-the-changes-to-gitlab">Step #4 - Commit and upload the changes to GitLab<ahref="#step-4---commit-and-upload-the-changes-to-gitlab"class="hash-link"aria-label="Direct link to Step #4 - Commit and upload the changes to GitLab"title="Direct link to Step #4 - Commit and upload the changes to GitLab"></a></h3>
<p>The same way you <em>add</em> and <em>commit</em> files for the homework assignments, you do for
the seminar.</p>
<p>Now you can upload the changes to GitLab. <code>git push</code> is not enough, since repository
on GitLab does not know your new branch. You can solve this by adding arguments:</p>
<p>In the output you should have a link for creating a merge request. If you see this
link, open it and skip next step.</p>
<h3class="anchor anchorWithStickyNavbar_LWe7"id="step-5---creating-a-merge-request-manually">Step #5 - Creating a merge request manually<ahref="#step-5---creating-a-merge-request-manually"class="hash-link"aria-label="Direct link to Step #5 - Creating a merge request manually"title="Direct link to Step #5 - Creating a merge request manually"></a></h3>
<ol>
<li>Open your repository on GitLab.</li>
<li>On the left panel click on <em>Merge Requests</em>.</li>
<li>Click on <em>New Merge Request</em>.</li>
<li>In <em>Source branch</em> select <code>login/pb071</code> and <code>BRANCH</code>, which you created.</li>
<li>In <em>Target branch</em> select <code>login/pb071</code> and your default branch you have seen
in the output of the first command. (most likely <code>master</code>)</li>
<li>Click on <em>Compare branches and continue</em>.</li>
</ol>
<h3class="anchor anchorWithStickyNavbar_LWe7"id="step-6---set-assignees">Step #6 - Set assignees<ahref="#step-6---set-assignees"class="hash-link"aria-label="Direct link to Step #6 - Set assignees"title="Direct link to Step #6 - Set assignees"></a></h3>
<p>On the page that is opened, please check at the top that you are creating merge
request <strong>from</strong> your new branch <strong>to</strong> your default branch (one of <code>master</code>, <code>main</code>
or <code>trunk</code>).</p>
<p>Then in the field <em>Assignees</em> set your tutors based on the seminar group. You can
use login for a quick look up.</p>
<p>In the end click on <em>Submit merge request</em>.</p>
<h3class="anchor anchorWithStickyNavbar_LWe7"id="step-7---return-to-default-branch">Step #7 - Return to default branch<ahref="#step-7---return-to-default-branch"class="hash-link"aria-label="Direct link to Step #7 - Return to default branch"title="Direct link to Step #7 - Return to default branch"></a></h3>
<p>Homework assignments can be submitted only from branches specified in the rules
for the course. Because of that, before you do anything else, you should switch
back to your default branch.</p>
<p>First of all, same as in step #1, check that your repository is clean with <code>git status</code>.
For the sake of safety, do not continue without clean repository. Then with command
<code>git checkout BRANCH</code> switch to your default branch <code>BRANCH</code>.</p>
<p>If you do not know which branch is your default, try <code>git branch</code> that outputs all branches in your repository. Default branch is typically <code>master</code>, but can
<divclass="codeBlockContainer_Ckt0 theme-code-block"style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><divclass="codeBlockContent_biex"><pretabindex="0"class="prism-code language-text codeBlock_bY9V thin-scrollbar"style="color:#393A34;background-color:#f6f8fa"><codeclass="codeBlockLines_e6Vv"><spanclass="token-line"style="color:#393A34"><spanclass="token plain">aisa$ git status</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"># Check if repository is clean</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"style="display:inline-block"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"># If you know, what is your default branch, you can skip next command.</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain">aisa$ git branch</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"># Find the default branch in the list; should be one of the `master`, `main` or</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"># `trunk` and you should not have more than one of those.</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"># In case the list clears the terminal and you cannot see shell prompt, you can</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"># press `q` to quit the pager.</span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain"style="display:inline-block"></span><br></span><spanclass="token-line"style="color:#393A34"><spanclass="token plain">aisa$ git checkout master</span><br></span></code></pre><divclass="buttonGroup__atx"><buttontype="button"aria-label="Copy code to clipboard"title="Copy"class="clean-btn"><spanclass="copyButtonIcons_eSgA"aria-hidden="true"><svgviewBox="0 0 24 24"class="copyButtonIcon_y97N"><pathfill="currentColor"d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svgviewBox="0 0 24 24"class="copyButtonSuccessIcon_LjdS"><pathfill="currentColor"d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>