<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Git on Quietbo</title><link>https://quietbo.com/categories/git/</link><description>Recent content in Git on Quietbo</description><generator>Hugo -- gohugo.io</generator><language>zh-tw</language><lastBuildDate>Thu, 30 Dec 2021 02:50:39 +0000</lastBuildDate><atom:link href="https://quietbo.com/categories/git/index.xml" rel="self" type="application/rss+xml"/><item><title>[Git] Push Branch (增/刪)</title><link>https://quietbo.com/2021/12/30/git-push-branch-%E5%A2%9E-%E5%88%AA/</link><pubDate>Thu, 30 Dec 2021 02:50:39 +0000</pubDate><guid>https://quietbo.com/2021/12/30/git-push-branch-%E5%A2%9E-%E5%88%AA/</guid><description>&lt;p&gt;push featrue/#9999999分支上ogigin&lt;/p&gt;
&lt;pre class="wp-block-code"&gt;&lt;code class=""&gt;git push origin 'featrue/#9999999' &lt;/code&gt;&lt;/pre&gt;&lt;figure class="wp-block-image"&gt;
&lt;p&gt;&lt;img decoding="async" src="https://i.imgur.com/y4Yy6rO.png" alt="" /&gt; &lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;在GitLab上會看到剛才Push上去的branch&lt;br&gt;
&lt;img decoding="async" src="https://i.imgur.com/upYdFjo.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;移除branch&lt;/p&gt;
&lt;pre class="wp-block-code"&gt;&lt;code class=""&gt;git push origin :featrue/#9999999 &lt;/code&gt;&lt;/pre&gt;&lt;figure class="wp-block-image"&gt;
&lt;p&gt;&lt;img decoding="async" src="https://i.imgur.com/4gblbU3.png" alt="" /&gt; &lt;/figure&gt;&lt;/p&gt;</description></item><item><title>[Mac] 安裝Jenkins，並與github連接</title><link>https://quietbo.com/2021/12/12/mac-%E5%AE%89%E8%A3%9Djenkins%E4%B8%A6%E8%88%87github%E9%80%A3%E6%8E%A5/</link><pubDate>Sat, 11 Dec 2021 18:24:19 +0000</pubDate><guid>https://quietbo.com/2021/12/12/mac-%E5%AE%89%E8%A3%9Djenkins%E4%B8%A6%E8%88%87github%E9%80%A3%E6%8E%A5/</guid><description>&lt;p&gt;使用Mac M1&lt;br&gt;
Jenkins 2.319.1&lt;/p&gt;
&lt;h1 id="安裝jenkins"&gt;安裝Jenkins
&lt;/h1&gt;&lt;p&gt;到&lt;a class="link" href="https://www.jenkins.io/" target="_blank" rel="noopener"
 &gt;Jenkins網站&lt;/a&gt;下載對應的檔案。目前我是使用&lt;/p&gt;
&lt;pre class="wp-block-code"&gt;&lt;code lang="bash" class="language-bash"&gt;brew install jenkins-lts&lt;/code&gt;&lt;/pre&gt;&lt;figure class="wp-block-image"&gt;
&lt;p&gt;&lt;img decoding="async" src="https://i.imgur.com/OzpWOTs.png" alt="" /&gt; &lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;安裝完成後，啟動jenkins&lt;/p&gt;
&lt;pre class="wp-block-code"&gt;&lt;code lang="bash" class="language-bash"&gt;brew services start jenkins-lts&lt;/code&gt;&lt;/pre&gt;&lt;figure class="wp-block-image"&gt;
&lt;p&gt;&lt;img decoding="async" src="https://i.imgur.com/sZkyWrq.png" alt="" /&gt; &lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;打開瀏覽器，輸入：&lt;/p&gt;
&lt;pre class="wp-block-code"&gt;&lt;code class=""&gt;http://localhost:8080&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;一進去jenkins會要求使用密碼解鎖，初始密碼的路徑，就在提示上的紅色字。&lt;br&gt;
&lt;img decoding="async" src="https://i.imgur.com/mJtjOa2.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;解鎖後，選擇要安裝的套件&lt;br&gt;
&lt;img decoding="async" src="https://i.imgur.com/pUcbYIe.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;接下來是安裝時間，會稍微久一點。&lt;br&gt;
&lt;img decoding="async" src="https://i.imgur.com/1BcCNOz.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;安裝完成後，會要求輸入建立admin帳號，這些帳密都要記住，未來登入需要使用。&lt;figure class="wp-block-image"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img decoding="async" src="https://i.imgur.com/Wt8Xb8a.png" alt="" /&gt; &lt;/figure&gt; &lt;figure class="wp-block-image"&gt;&lt;img decoding="async" src="https://i.imgur.com/N3T0Fpj.png" alt="" /&gt;&lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;成功進入jenkins！&lt;br&gt;
&lt;img decoding="async" src="https://i.imgur.com/UAg0ro4.png" alt="" /&gt; &lt;figure class="wp-block-image"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img decoding="async" src="https://i.imgur.com/Vgj5t8W.png" alt="" /&gt; &lt;/figure&gt;&lt;/p&gt;
&lt;h1 id="設定-jenkins-與github-rerository連接"&gt;設定 jenkins 與Github Rerository連接
&lt;/h1&gt;&lt;ol class="wp-block-list"&gt;
 &lt;li&gt;
 新增建置作業&lt;br /&gt;&lt;img decoding="async" src="https://i.imgur.com/nwfYR6x.png" alt="" /&gt;
 &lt;/li&gt;
 &lt;li&gt;
 新增項目名稱，建置Free-Strle軟體專案&lt;br /&gt;&lt;img decoding="async" src="https://i.imgur.com/fuImLsu.png" alt="" /&gt;
 &lt;/li&gt;
 &lt;li&gt;
 輸入github的git網址&lt;br /&gt;&lt;img decoding="async" src="https://i.imgur.com/DBTTCi9.png" alt="" /&gt;
 &lt;/li&gt;
 &lt;li&gt;
 建置觸發程序，將GitHub hook trigger for GITScm polling打勾。&lt;br /&gt;&lt;img decoding="async" src="https://i.imgur.com/upQad1U.png" alt="" /&gt;
 &lt;/li&gt;
 &lt;li&gt;
 建置環境選擇執行Shell，並輸入下方指令後儲存。
 &lt;/li&gt;
&lt;/ol&gt;
&lt;pre class="wp-block-code"&gt;&lt;code lang="bash" class="language-bash"&gt;echo 開始建置mydjango&lt;/code&gt;&lt;/pre&gt;&lt;figure class="wp-block-image"&gt;
&lt;p&gt;&lt;img decoding="async" src="https://i.imgur.com/4hzqyUk.png" alt="" /&gt; &lt;/figure&gt; &lt;figure class="wp-block-image"&gt;&lt;img decoding="async" src="https://i.imgur.com/9ucJHQm.png" alt="" /&gt;&lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;注意：這次示範使用mac的shell，如果使用windows的Shell語法要注意更換。&lt;/p&gt;
&lt;ol class="wp-block-list" start="6"&gt;
 &lt;li&gt;
 儲存後點擊「馬上建置」，成功後左下方會出現綠色勾，若失敗的話可進入觀看失敗訊息。&lt;br /&gt;&lt;img decoding="async" src="https://i.imgur.com/7xd5MZx.png" alt="" /&gt;
 &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;建置完成後，點擊「#1」並進入「console output」，就可以看到終端機的輸出了。&lt;figure class="wp-block-image size-full"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" decoding="async" width="666" height="806" src="https://quietbo.com/uploads/2021/12/image.png" alt="" class="wp-image-644" srcset="https://quietbo.com/uploads/2021/12/image.png 666w, https://quietbo.com/uploads/2021/12/image-248x300.png 248w" sizes="auto, (max-width: 666px) 100vw, 666px" /&gt; &lt;/figure&gt;&lt;/p&gt;
&lt;h2 id="jenkins檢查github"&gt;Jenkins檢查github
&lt;/h2&gt;&lt;p&gt;不建議使用，基本上應該是github上有push新的程式後，jenkins再進行建置。&lt;br&gt;
&lt;img decoding="async" src="https://i.imgur.com/mhftEQP.png" alt="" /&gt;&lt;/p&gt;</description></item><item><title>[Git]使用Meld作為git diff tool</title><link>https://quietbo.com/2021/10/18/%E4%BD%BF%E7%94%A8meld%E4%BD%9C%E7%82%BAgit-diff-tool%E5%92%8Cmergetool/</link><pubDate>Mon, 18 Oct 2021 10:52:18 +0000</pubDate><guid>https://quietbo.com/2021/10/18/%E4%BD%BF%E7%94%A8meld%E4%BD%9C%E7%82%BAgit-diff-tool%E5%92%8Cmergetool/</guid><description>&lt;p&gt;環境:ubuntu20.04&lt;/p&gt;
&lt;ol class="wp-block-list"&gt;
 &lt;li&gt;
 下載meld
 &lt;/li&gt;
&lt;/ol&gt;
&lt;pre class="wp-block-code"&gt;&lt;code class=""&gt;sudo apt-get install meld&lt;/code&gt;&lt;/pre&gt;
&lt;ol class="wp-block-list" start="2"&gt;
 &lt;li&gt;
 設置git
 &lt;/li&gt;
&lt;/ol&gt;
&lt;pre class="wp-block-code"&gt;&lt;code class=""&gt;git config --global diff.external meld &lt;/code&gt;&lt;/pre&gt;
&lt;ol class="wp-block-list" start="3"&gt;
 &lt;li&gt;
 在自己的的目錄下建立一個git-meld.sh 的script:
 &lt;/li&gt;
&lt;/ol&gt;
&lt;pre class="wp-block-code"&gt;&lt;code class=""&gt;vi ~/git-meld.sh &lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;輸入:&lt;/p&gt;
&lt;pre class="wp-block-code"&gt;&lt;code class=""&gt;#!/bin/sh
meld $2 $5&lt;/code&gt;&lt;/pre&gt;
&lt;ol class="wp-block-list" start="4"&gt;
 &lt;li&gt;
 查看是否有存入
 &lt;/li&gt;
&lt;/ol&gt;
&lt;pre class="wp-block-code"&gt;&lt;code class=""&gt;cat ~/git-meld.sh&lt;/code&gt;&lt;/pre&gt;
&lt;ol class="wp-block-list" start="5"&gt;
 &lt;li&gt;
 改變檔案的屬性:
 &lt;/li&gt;
&lt;/ol&gt;
&lt;pre class="wp-block-code"&gt;&lt;code class=""&gt;chmod 777 ~/git-meld.sh&lt;/code&gt;&lt;/pre&gt;
&lt;ol class="wp-block-list" start="6"&gt;
 &lt;li&gt;
 把external diff 改成這個shell script:
 &lt;/li&gt;
&lt;/ol&gt;
&lt;pre class="wp-block-code"&gt;&lt;code class=""&gt;git config --global diff.external ~/git-meld.sh&lt;/code&gt;&lt;/pre&gt;
&lt;ol class="wp-block-list" start="7"&gt;
 &lt;li&gt;
 使用git diff
 &lt;/li&gt;
&lt;/ol&gt;
&lt;pre class="wp-block-code"&gt;&lt;code class=""&gt;git log # 複製選取要查看的commit_id
git diff [commit_id]&lt;/code&gt;&lt;/pre&gt;</description></item><item><title>[Git]提交空資料夾</title><link>https://quietbo.com/2021/05/11/git%E6%8F%90%E4%BA%A4%E7%A9%BA%E8%B3%87%E6%96%99%E5%A4%BE/</link><pubDate>Mon, 10 May 2021 16:26:30 +0000</pubDate><guid>https://quietbo.com/2021/05/11/git%E6%8F%90%E4%BA%A4%E7%A9%BA%E8%B3%87%E6%96%99%E5%A4%BE/</guid><description>&lt;p&gt;Git最初的設計是不支援空資料夾，最初的設計是用來索引文件的，所以Git 只關注文件，不關心目錄，因此在建立空資料夾時，資料夾內一定要有文件，下方提供了我自己使用，且網路上較多人使用的方式，但目的都是要建立空的資料夾。&lt;/p&gt;
&lt;h2 id="解決方式"&gt;解決方式：
&lt;/h2&gt;&lt;p&gt;在空目錄下創建空文件：.gitkeep&lt;br&gt;
這約定俗成的空目錄識別文件名，不具有什麼功用。&lt;br&gt;
網路上會寫可以創建.gitignore，但我自己是不會加入，因為.gitignore檔案是用來讓git忽略版本控制系統中&lt;code&gt;不需要的檔案&lt;/code&gt;的。&lt;/p&gt;
&lt;p&gt;目前建立了空的資料夾，名為foler_2，查看working directory，&lt;br&gt;
Git裡面並且沒有被更改過的檔案。&lt;/p&gt;
&lt;p&gt;以下是使用mac terminal的操作畫面。&lt;/p&gt;
&lt;pre class="wp-block-code"&gt;&lt;code lang="bash" class="language-bash"&gt;mkdir folder_2
git status&lt;/code&gt;&lt;/pre&gt;&lt;figure class="wp-block-image"&gt;
&lt;p&gt;&lt;img decoding="async" src="https://i.imgur.com/XA27aCt.png" alt="" /&gt; &lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;進入要建立的空目錄內，創建.gitkeep，接下來Git就會感應到有文件加入。&lt;br&gt;
如果沒有出現，就去檢查一下是不是.gitignore忽略了此文件名稱。&lt;/p&gt;
&lt;pre class="wp-block-code"&gt;&lt;code lang="bash" class="language-bash"&gt;cd folder_2
ls
touch .gitkeep
git status&lt;/code&gt;&lt;/pre&gt;&lt;figure class="wp-block-image"&gt;
&lt;p&gt;&lt;img decoding="async" src="https://i.imgur.com/Linyw1u.png" alt="" /&gt; &lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;接下來就像平常一樣的流程：&lt;br&gt;
&lt;img decoding="async" src="https://i.imgur.com/5u5rSNh.png" alt="" /&gt;&lt;/p&gt;</description></item><item><title>[Git] 常用指令</title><link>https://quietbo.com/2021/03/02/git-%E5%B8%B8%E7%94%A8%E6%8C%87%E4%BB%A4/</link><pubDate>Tue, 02 Mar 2021 07:22:36 +0000</pubDate><guid>https://quietbo.com/2021/03/02/git-%E5%B8%B8%E7%94%A8%E6%8C%87%E4%BB%A4/</guid><description>&lt;p&gt;git checkout # 有兩個功能，一個是branch, HASH 間的切換，另外一個則是工作區檔案的還原。&lt;br&gt;
git checkout . # 還原所有檔案&lt;br&gt;
git checkout app.html # 還原一個檔案&lt;/p&gt;
&lt;p&gt;git remote update # 檢查遠端是否有更新&lt;br&gt;
git branch # 檢查local分支&lt;br&gt;
git branch -a # 檢查雲端最新分支&lt;/p&gt;
&lt;p&gt;git stash # 備份當前的工作區&lt;br&gt;
git stash save abcd # 將當前修改的檔案暫存起來並命名為abcd&lt;br&gt;
git stash list # 顯示git內的所有備份，可以利用這個列表來決定從那個地方恢復。&lt;br&gt;
git stash apply stash@{0} # 把Stash撿回來用&lt;br&gt;
git stash drop stash@{0} # 從列表裡刪掉暫存的Stash了&lt;br&gt;
git stash clear # 刪除所有暫存的操作&lt;/p&gt;
&lt;p&gt;git reset –hard # 回復到最新提交版本&lt;br&gt;
git reset e1d58ef^ # 拆掉commit的版本&lt;/p&gt;
&lt;p&gt;git add -u # 加入所有被更動的檔案（包含 modified 及 deleted）&lt;br&gt;
git log # 查看提交歷史紀錄&lt;/p&gt;
&lt;p&gt;git pull origin # 從遠端更新&lt;/p&gt;
&lt;p&gt;git push origin my-tag # push 指定標籤 (多個標籤以空白隔開)&lt;br&gt;
git push –tags # push 所有 tag&lt;/p&gt;
&lt;p&gt;git diff # 檢查修改內容&lt;br&gt;
git remote -v # 查詢遠端pull、push路徑&lt;/p&gt;
&lt;h2 id="tag相關"&gt;tag相關
&lt;/h2&gt;&lt;p&gt;git tag -l # 查詢所有tag名稱&lt;br&gt;
git tag -a test_tag -m “” # 新增一個名為test_tag的tag&lt;br&gt;
git push origin test_tag # push 指定標籤 (多個標籤以空白隔開)&lt;/p&gt;
&lt;p&gt;git push origin –tag # push 所有 tag&lt;/p&gt;
&lt;p&gt;git push –tags # push 所有 tag&lt;/p&gt;</description></item><item><title>[Git] 安裝及簡單設定</title><link>https://quietbo.com/2021/02/23/git/</link><pubDate>Tue, 23 Feb 2021 10:43:38 +0000</pubDate><guid>https://quietbo.com/2021/02/23/git/</guid><description>&lt;p&gt;Linux 安裝git&lt;/p&gt;
&lt;pre class="wp-block-code"&gt;&lt;code lang="bash" class="language-bash"&gt;$ sudo apt-get install git&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;驗證git是否已安裝成功&lt;/p&gt;
&lt;pre class="wp-block-code"&gt;&lt;code lang="bash" class="language-bash"&gt;$ which git&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;查詢git版本&lt;/p&gt;
&lt;pre class="wp-block-code"&gt;&lt;code lang="bash" class="language-bash"&gt;$ git --version&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;git 產生SSH Key&lt;/p&gt;
&lt;pre class="wp-block-code"&gt;&lt;code lang="bash" class="language-bash"&gt;ssh-keygen&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;查看SSH Key&lt;/p&gt;
&lt;pre class="wp-block-code"&gt;&lt;code lang="bash" class="language-bash"&gt;$ cat ~/.ssh/id_rsa.pub&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;查詢目錄的狀態&lt;/p&gt;
&lt;pre class="wp-block-code"&gt;&lt;code lang="bash" class="language-bash"&gt;$ git status&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;查詢目前的設定&lt;/p&gt;
&lt;pre class="wp-block-code"&gt;&lt;code lang="bash" class="language-bash"&gt;$ git config --list&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;查詢特定檔案的commit&lt;/p&gt;
&lt;pre class="wp-block-code"&gt;&lt;code lang="bash" class="language-bash"&gt;$ git log XXXXX.py&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;注意:需要有副檔名&lt;/p&gt;
&lt;p&gt;查看特定檔案修改什麼&lt;/p&gt;
&lt;pre class="wp-block-code"&gt;&lt;code lang="bash" class="language-bash"&gt;$ git log -p XXXXX.py&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;+代表新增&lt;/p&gt;
&lt;p&gt;-代表刪除&lt;/p&gt;
&lt;p&gt;SourceTree的話也可以看到:&lt;/p&gt;
&lt;p&gt;在commit時點選:Log Selected 則會另外彈出一個視窗&lt;figure class="wp-block-image"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img decoding="async" src="https://i.imgur.com/Fylt22D.png" alt="" /&gt; &lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;查詢”單行”代碼作者及修改時間&lt;/p&gt;
&lt;pre class="wp-block-code"&gt;&lt;code lang="bash" class="language-bash"&gt;$ git blame XXXX.py&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;組合內容為:&lt;/p&gt;
&lt;p&gt;commit的識別碼 、 修改人名 、修改日期及時間 該行號(上圖我僅擷取2016行~2023行)&lt;/p&gt;
&lt;p&gt;如果檔案太多行了，你只想看某而已，就加入-L 開始行號~結束行號&lt;/p&gt;
&lt;pre class="wp-block-code"&gt;&lt;code lang="bash" class="language-bash"&gt;$ git blame -L 2010,2030 XXXX.py&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;有些檔案不想放在Git裡面&lt;/p&gt;
&lt;p&gt;先建立檔名為:&lt;/p&gt;
&lt;pre class="wp-block-code"&gt;&lt;code lang="bash" class="language-bash"&gt;.gitignore&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然後編輯這個檔案的內容:&lt;/p&gt;
&lt;pre class="wp-block-code"&gt;&lt;code lang="bash" class="language-bash line-numbers"&gt;#忽略 test.py 檔案
test.py

#忽略 log目錄下的所有檔案
log/*

#忽略所有附檔名是 .tmp的檔案
.tmp

#忽略所有檔名為settings的檔案
settings.*&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;若不知道使用的工具或程式語言通常會忽略哪些檔案，可以至此&lt;a class="link" href="https://github.com/github/gitignore" target="_blank" rel="noopener"
 &gt;連結&lt;/a&gt;查看&lt;/p&gt;
&lt;p&gt;清出忽略&lt;/p&gt;
&lt;pre class="wp-block-code"&gt;&lt;code lang="bash" class="language-bash"&gt;$ git clean -fx&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;忽略部分補充&lt;/p&gt;
&lt;p&gt;如果要忽略的檔案在編輯.gitignore時就已經存在，需要先移出Git控管，之後就會被忽略了。&lt;/p&gt;
&lt;p&gt;舉例:在3月1號時已經將test.py加入Git控管中，在3月5號才將.gitignore內新增要將test.py忽略，但此時Git已經在控管了，所以3月5號加的忽略不會進行，必須先將目前控管中的test.py移除。&lt;/p&gt;
&lt;h6 id="救回被刪除的檔案"&gt;救回被刪除的檔案
&lt;/h6&gt;&lt;p&gt;此三個檔案被我不小心刪掉了&lt;figure class="wp-block-image"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img decoding="async" src="https://i.imgur.com/Rz8vGTd.png" alt="" /&gt; &lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;救回方式(等同於還原所有檔案):&lt;/p&gt;
&lt;pre class="wp-block-code"&gt;&lt;code lang="bash" class="language-bash"&gt;$ git checkout .&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果想救一個檔案:&lt;/p&gt;
&lt;pre class="wp-block-code"&gt;&lt;code lang="bash" class="language-bash"&gt;$ git checkout S01.py&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;SourceTree用法&lt;/p&gt;
&lt;p&gt;打開SourceTree會看到上面有被誤刪的檔案，點選最右邊的-，讓誤刪的檔案下去Unstaged files的位置。&lt;figure class="wp-block-image"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img decoding="async" src="https://i.imgur.com/Ec1u6hc.png" alt="" /&gt; &lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;鼠標移至誤刪的檔案位置，右建點選discard(丟棄)&lt;figure class="wp-block-image"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img decoding="async" src="https://i.imgur.com/NWnqI8L.png" alt="" /&gt; &lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;然後會問你:您確定要放棄對這些文件的更改嗎？&lt;/p&gt;
&lt;p&gt;意思就是⇒你不要刪除嗎&lt;/p&gt;
&lt;p&gt;按下OK!!!!完成後就會看到誤刪的檔案回來了&lt;/p&gt;
&lt;p&gt;補充&lt;/p&gt;
&lt;p&gt;並不是所有檔案都能救出來，如果.git的目錄被刪除了，代表歷史紀錄也被刪除，會救不回來。&lt;/p&gt;
&lt;p&gt;修改commit描述的訊息文字&lt;/p&gt;
&lt;p&gt;修改最後一筆&lt;/p&gt;
&lt;pre class="wp-block-code"&gt;&lt;code lang="bash" class="language-bash"&gt;$ git commit --amend -m "fix commit msg"&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;退版方式&lt;/p&gt;
&lt;p&gt;先查看版本號&lt;/p&gt;
&lt;pre class="wp-block-code"&gt;&lt;code lang="bash" class="language-bash"&gt;$ git log --oneline&lt;/code&gt;&lt;/pre&gt;&lt;figure class="wp-block-image"&gt;
&lt;p&gt;&lt;img decoding="async" src="https://i.imgur.com/UNXTYK1.png" alt="" /&gt; &lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;方法一:相對位置&lt;/p&gt;
&lt;pre class="wp-block-code"&gt;&lt;code lang="bash" class="language-bash"&gt;$ git reset d7ea967^&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;最後加的^代表前一次的意思，所以是指da824b4的commit，如果是d7ea967^^，就是前兩個版本，如果超過5個，可以寫成d7ea967~5，畢竟太多^很容易看得眼花。&lt;/p&gt;
&lt;p&gt;相對位置也可以用另一種來表示:&lt;/p&gt;
&lt;pre class="wp-block-code"&gt;&lt;code lang="bash" class="language-bash"&gt;$ git reset master^&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;或&lt;/p&gt;
&lt;pre class="wp-block-code"&gt;&lt;code lang="bash" class="language-bash"&gt;$ git reset HEAD^&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;因為HEAD和master目前都是指向d7ea967這個commit，而且d7ea967這數字很難記，所以通常都不會用commit的英數來做，都已以上兩個方式，且都會一樣的結果。&lt;/p&gt;
&lt;p&gt;方法二:絕對位置&lt;/p&gt;
&lt;p&gt;直接指明在git log的版本號&lt;/p&gt;
&lt;pre class="wp-block-code"&gt;&lt;code lang="bash" class="language-bash"&gt;$ git reset d9d68f9(版本號)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;sourceTree用法&lt;/p&gt;
&lt;p&gt;回到History，點選右鍵&lt;figure class="wp-block-image"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img decoding="async" src="https://i.imgur.com/p0tUkjF.png" alt="" /&gt; &lt;/figure&gt;&lt;/p&gt;
&lt;h5 id="已經退版但想再回一開始的版本"&gt;已經退版但想再回一開始的版本
&lt;/h5&gt;&lt;p&gt;git reset HEAD~2，現在要在把他reset回到一開始(d7ea967)的commit。&lt;/p&gt;
&lt;pre class="wp-block-code"&gt;&lt;code lang="bash" class="language-bash"&gt;$ git reset d7ea967 --hard&lt;/code&gt;&lt;/pre&gt;&lt;figure class="wp-block-image"&gt;
&lt;p&gt;&lt;img decoding="async" src="https://i.imgur.com/r881Fqn.png" alt="" /&gt; &lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;忘記版本的數字&lt;/p&gt;
&lt;pre class="wp-block-code"&gt;&lt;code lang="bash" class="language-bash"&gt;$ git reflog&lt;/code&gt;&lt;/pre&gt;&lt;figure class="wp-block-image"&gt;
&lt;p&gt;&lt;img decoding="async" src="https://i.imgur.com/Oa1tiHR.png" alt="" /&gt; &lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;顯示HEAD有移動時的所有位置，目前HEAD的位置就是在執行完”reset”的位置，所以可以猜測，d7ea967是在reset前的位置，&lt;/p&gt;
&lt;p&gt;Reset 的模式&lt;/p&gt;
&lt;p&gt;Reset英文單字翻譯為”重新設定”，但事實上Git的Reset指令用中文來說比較像是”前往”或”變成”的概念，事實上並沒有真的把這個commit”拆掉”(放心，所有commit都在)&lt;/p&gt;
&lt;p&gt;比較正確的解讀應該是”我要前往兩個commit之前的狀態”，因為實際上git reset指令也不是真的刪除或是重新設定，只是”前往”到指定的commit。&lt;/p&gt;
&lt;p&gt;git reset 指令可以搭配參數使用，常見的三種參數，分別:&lt;/p&gt;
&lt;ul class="wp-block-list"&gt;
 &lt;li&gt;
 mixed
 &lt;/li&gt;
 &lt;li&gt;
 soft
 &lt;/li&gt;
 &lt;li&gt;
 hard
 &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;HEAD是什麼?&lt;/p&gt;
&lt;p&gt;HEAD 是一個指標，指向某一個分支，通常你可以把 HEAD 當做「目前所在分支」看待。&lt;/p&gt;
&lt;pre class="wp-block-code"&gt;&lt;code lang="bash" class="language-bash"&gt;$ cat .git/HEAD&lt;/code&gt;&lt;/pre&gt;&lt;figure class="wp-block-image"&gt;
&lt;p&gt;&lt;img decoding="async" src="https://i.imgur.com/KlJ9Qat.png" alt="" /&gt; &lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;從這個檔案看起來，HEAD 目前正指向著 master 分支。&lt;/p&gt;
&lt;p&gt;如果有興趣再深入看一下 refs/heads/master 的內容就會發現，其實所謂的 Master 分支也不過就是一個 40 個字元的檔案罷了：&lt;figure class="wp-block-image"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img decoding="async" src="https://i.imgur.com/ZDlPkRN.png" alt="" /&gt; &lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;切換分支，在看看HEAD檔案內容&lt;/p&gt;
&lt;pre class="wp-block-code"&gt;&lt;code lang="bash" class="language-bash"&gt;$ git checkout dog
$ git cat .git/HEAD&lt;/code&gt;&lt;/pre&gt;&lt;figure class="wp-block-image"&gt;
&lt;p&gt;&lt;img decoding="async" src="https://i.imgur.com/7CMHriu.png" alt="" /&gt; &lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;HEAD 通常會指向目前所在的分支。不過 HEAD 也不一定總是會指向某個分支，當 HEAD 沒有指向某個分支的時候便會造成「detached HEAD」的狀態，詳情請參閱，待補。&lt;/p&gt;
&lt;p&gt;在 SourceTree 的介面裡，HEAD 是以一個「空心的小圈圈」圖示呈現&lt;/p&gt;
&lt;p&gt;在切換分支的同時，除了 HEAD 的內容會改變之外，在Reflog，當 HEAD 的內容改變的時候也會留下紀錄。&lt;/p&gt;
&lt;p&gt;分支(Branche)&lt;/p&gt;
&lt;p&gt;什麼是分支？&lt;/p&gt;
&lt;p&gt;在開發軟體時，可能同時會有多人在開發同一功能或修復錯誤，也可能會有多個發佈版本的存在，並且需要針對每個版本進行維護。&lt;/p&gt;
&lt;p&gt;為了能支援同時進行數個功能的增加或版本控制，Git具備了分支的功能。&lt;/p&gt;
&lt;p&gt;建立分支&lt;/p&gt;
&lt;pre class="wp-block-code"&gt;&lt;code lang="bash" class="language-bash"&gt;$ git branch 新的分支名稱&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;查詢現在的分支&lt;/p&gt;
&lt;pre class="wp-block-code"&gt;&lt;code lang="bash" class="language-bash"&gt;$ git branch&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;前方有*代表目前所在分支&lt;figure class="wp-block-image"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img decoding="async" src="https://i.imgur.com/s2izE2I.png" alt="" /&gt; &lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;切換分支&lt;/p&gt;
&lt;pre class="wp-block-code"&gt;&lt;code lang="bash" class="language-bash"&gt;$ git checkout 分支名稱&lt;/code&gt;&lt;/pre&gt;&lt;figure class="wp-block-image"&gt;
&lt;p&gt;&lt;img decoding="async" src="https://i.imgur.com/uiPREaH.png" alt="" /&gt; &lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;在 checkout 命令給定 -b 參數執行，可以同時建立分支和切換。&lt;/p&gt;
&lt;pre class="wp-block-code"&gt;&lt;code lang="bash" class="language-bash"&gt;$ git checkout -b 分支名稱&lt;/code&gt;&lt;/pre&gt;&lt;figure class="wp-block-image"&gt;
&lt;p&gt;&lt;img decoding="async" src="https://i.imgur.com/7Odrckh.png" alt="" /&gt; &lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;rebase&lt;/p&gt;
&lt;p&gt;離開rebase&lt;/p&gt;
&lt;pre class="wp-block-code"&gt;&lt;code lang="bash" class="language-bash"&gt;git rebase --abort&lt;/code&gt;&lt;/pre&gt;&lt;figure class="wp-block-image"&gt;
&lt;p&gt;&lt;img decoding="async" src="https://i.imgur.com/R2K6gvb.png" alt="" /&gt; &lt;/figure&gt; &lt;figure class="wp-block-image"&gt;&lt;img decoding="async" src="https://i.imgur.com/8sUwHTd.png" alt="" /&gt;&lt;/figure&gt; &lt;figure class="wp-block-image"&gt;&lt;img decoding="async" src="https://i.imgur.com/hFRJdTs.png" alt="" /&gt;&lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;在.git目錄裡面有什麼&lt;/p&gt;
&lt;p&gt;此處先建立一個index.html檔案，再add後查看狀態。&lt;/p&gt;
&lt;p&gt;利用hash來確認該檔案的值，來對照資料夾是否有這個檔案名。&lt;figure class="wp-block-image"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img decoding="async" src="https://i.imgur.com/LO7XNbT.png" alt="" /&gt; &lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;.git\objects\30&lt;figure class="wp-block-image"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img decoding="async" src="https://i.imgur.com/kALGpX9.png" alt="" /&gt; &lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;Git會用40個字的SHA-1值的前面2字作為目錄，剩下38字是檔案名字&lt;/p&gt;
&lt;p&gt;檢視差異&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://t.codebug.vip/questions-1743912.htm" target="_blank" rel="noopener"
 &gt;參考網址&lt;/a&gt;&lt;/p&gt;
&lt;pre class="wp-block-code"&gt;&lt;code lang="bash" class="language-bash"&gt;git difftool --dir-diff --tool=meld HEAD~ HEAD&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;建立一個方便的Bash函式：&lt;/p&gt;
&lt;pre class="wp-block-code"&gt;&lt;code lang="bash" class="language-bash"&gt;git-diff-meld() (
 git difftool --dir-diff --tool=meld "${1:-HEAD~}" "${2:-HEAD}"
)&lt;/code&gt;&lt;/pre&gt;</description></item></channel></rss>