Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Q2. [個人技能題組][Git] Git 個人作業流程。 #3

Open
wildwindjen opened this issue Mar 15, 2017 · 23 comments
Open

Q2. [個人技能題組][Git] Git 個人作業流程。 #3

wildwindjen opened this issue Mar 15, 2017 · 23 comments

Comments

@wildwindjen
Copy link
Contributor

wildwindjen commented Mar 15, 2017

版本控制系統大概是最基礎的工具,不管你是在前端、後端還是 APP。熟悉 Git 是基本技能。假設你現在是一個人開發 Web 專案,你至少需要熟悉以下流程。

20170313_git_overview

a. A-J 是每個版本狀態從這個階段到另一個階段的指令或動作,請查出 A-J 。(重點是確保自己真的學到在什麼情況下使用該指令。)

A: 將一般目錄變成 git working folder
B: 將 working folder 的異動狀態登錄到 stage
C: 將 stage 的狀態放到 local repository
D: 將 local repository 的狀態放到 remote repository
E: 將 remote repository 的狀態取回到 local repository
F: 將 local repository 的狀態退回到 stage 階段(是 C 的逆向)
G: 將 stage 的狀態退回到 working folder 階段(是 B 的逆向)
H: 將 local repository 的狀態一口氣退回到 working folder 階段(是 B+C 的逆向)
I: 從 remote repository 取回建立成新的 working folder
J: 將 git working folder 變回一般目錄

b. 什麼是版本控制系統?什麼是 working folder?什麼是 index/stage?什麼是 repository?什麼是 commit?
c. 做這個題目,你事前評估做了什麼、利用了哪些資源、排程為何、事後怎麼驗收、得到什麼經驗?

答題時間: 8 hr

@dustfantasy
Copy link

dustfantasy commented Mar 20, 2017

「於 2017/03/20 開始答題」
「2017/03/20,因為題目解讀錯誤,預計 2017/03/21 答題完成」

a.
A git init
B git add .
C git commit -m ''
D git push origin master
E git fetch origin master
F git reset --soft HEAD^
G git reset HEAD
H git reset HEAD^
I git clone
J rm -rf .git
b.
版本控制系統可以將製作過程中的程式碼分成好幾個版本保留起來 在需要修改添加功能時可以挑選適合版本建立branch獨立作業 可以不影響他人的共同作業或因為更動而擾亂原本程式碼
working folder 進行工作的資料夾 程式碼的編寫修改的地方
index/stage 暫存區 在working folder進行修改後可以先加入暫存區內儲存修改
repository 將在index/stage 的資料向上提交的地方 最後完成品儲存的地方 有 local與remote 每次提交都會有版本紀錄
通常來說微小卻繁雜的修改每次修改完後會增加至index/stage
當這些處理完畢後會提交至repository保存
commit 將index/stage 中的資料提交至本地的repository且有提交的版本紀錄
c.
利用資源:google
http://stackoverflow.com/questions/3689838/difference-between-head-working-tree-index-in-git
https://git-scm.com/book/zh-tw/v1/%E9%96%8B%E5%A7%8B-%E9%97%9C%E6%96%BC%E7%89%88%E6%9C%AC%E6%8E%A7%E5%88%B6

事前評估
對git其結構的理解與運行過程,了解各個單位的功能與關聯性
驗收
以實作指令的方式確認效果。
A、J 為folder用init轉變為working folder,實際為增加一個.git的子目錄,運行rm -rf .git刪除後確認變回一般目錄。
B、C、D的動作與git本身的結構相關,依序是working folder->index/stage->local repository->remote repository。
這四個為資料存放點,透過add、commit、push把當前資料推向下一階層存放。
使用git status查看stage狀態,紅字檔案為unstage,沒有add的情況,綠字則為stage,使用add的情況。
使用git log可以查找commit的版本資訊,且在commit後查看git status會由於已提交的原因被清空。
push直接前往remote repository進行比對。
E可以從remote repository抓取至local repository,透過使用fetch發現會將資料抓取至名為FETCH_HEAD的branch,git checkout FETCH_HEAD可以發現資料確實存放在FETCH_HEAD的branch中,若要合併到當前working folder則需使用merge branch。
pull指令為fetch,merge執行後的結果,在pull後執行merge branch會顯示Already up-to-date.表示已合併過而不用再合併。
F、G、H為退回作業階段的動作。
F從local repository退回到index/stage階段,表示要不變更上個提交的stage狀態。
G是將index/stage退回到working folder階段,不變更working folder而且變為unstage狀態。
H則為F、G一同執行的結果。
reset 有三參數--soft --mixed(預設) --hard為作用範圍,HEAD指向最近一次的提交,HEAD^為上一次提交。
使用soft只會作用於local repository,因此status會是綠字的stage狀態,mixed則會作用到index/stage,變更為紅色的unstage狀態,hard會作用到working folder而將檔案重置。
I clone能將remote repository存成一整個資料夾,在有同名資料夾時無法再使用

另外補充
checkout -- . 可以把index/stage 檔案還原到working folder 結合git reset等同於git checkout head .的效果。
「於 2017/03/23 答題結束」

@wildwindjen
Copy link
Contributor Author

我補上 A-J 的意思,再重新確認一下。有些指令的差別可能細微到參數。

@wildwindjen
Copy link
Contributor Author

wildwindjen commented Mar 21, 2017

@dustfantasy

試著做以下動作:

新增一個 a.txt ,commit -m "add a.txt"

git log 看到

commit 07855bd785acb533335d7badf9bab473178411ae
Date:   Tue Mar 21 16:38:51 2017 +0800

    add a.txt

=======================

  1. 修改 a.txt 隨便打些字,
    git status (目前在 working folder 階段)
    看到「紅色」字樣的 a.txt

    git log 看到 commit 07855bd785acb533335d7badf9bab473178411ae

  2. git add
    git status (目前在 stage 階段)
    看到「綠色」字樣的 a.txt

    git log 看到 commit 07855bd785acb533335d7badf9bab473178411ae

  3. git commit -m "modify a.txt"
    git status
    沒看到任何東西

    git log 看到

    commit 75b6b0fded78868b9f4d680bdd18ffa15a32f9e2
    Date: Tue Mar 21 16:42:54 2017 +0800
    modify a.txt

    commit 07855bd785acb533335d7badf9bab473178411ae
    Date: Tue Mar 21 16:38:51 2017 +0800
    add a.txt

所以這時候輸入 F 指令
應該是回到 2. 的狀態

git status
看到「綠色」字樣的 a.txt

git log 只看到 commit 07855bd785acb533335d7badf9bab473178411ae

F、G、H 再試一次

還有「2017/03/12,因為題目解讀錯誤,預計 2017/03/21 答題完成」 是時光倒流?

@dustfantasy
Copy link

F git reset --soft HEAD^
reset給了三個參數使用soft mixed hard 這是reset的作用範圍
soft為repository ,mixed為repository和index/stage, hard則涵蓋working folder
reset資料參考
https://dotblogs.com.tw/wasichris/2016/04/29/225157

但GH我不知道要做到什麼事

2017/03/12,因為題目解讀錯誤,預計 2017/03/21 答題完成
是因為超過八小時了而且當時感覺要到隔天才能完成
結果在12點前就完成了

@HoHow
Copy link

HoHow commented Mar 21, 2017

「於 2017/03/21 開始答題」
A:git init
B:git add .
C:git commit
D:git push origin master
E:git fetch origin master
F:git reset --soft HEAD^
G:git reset HEAD --
H:git reset HEAD^
I:git clone
J:rm -rf .git
b.
什麼是版本控制系統?版本控制是一個能夠記錄一個或一組檔案在某一段時間的變更,使得讀者以後能取回特定版本的系統。
什麼是 working folder?當下處理資料的資料夾
什麼是 index/stage?暫存此次要上傳的檔案
什麼是 repository?類似資料庫,儲存所有資料更改的地方
什麼是 commit?記錄訊息方便以後查詢或回朔
c.
事前評估:先理解圖片中每個名詞的意義,再針對個別指令去查詢
利用哪些資源:
https://ihower.tw/blog/archives/2622
https://git-scm.com/docs/git-reset
http://oomusou.io/git/git-remove-stage/
排程:上網查資料(一小時)實作(二小時)
事後怎麼驗收:上網查指令用法,測試每個指令用法,看結果是否符合需求
git init:在目錄下執行指令會出現.git的隱藏檔,代表建立成功
git add . :用git status查看是否有新增檔案
git commit :用git log查看是否有新增commit
git push:遠端是否有更新的資料
git fetch:同步遠端伺服器上的資料到本地,看本地端是否有更新
git reset --soft HEAD^:回復上一版到stage,利用git status 看狀態
git reset HEAD :對檔案unstage,git status看狀態
git reset HEAD^:回復上一版,到紅色的狀態,用git status看狀態
git clone 把遠端分支複製下來
rm -rf .git 刪除.git檔案,看資料夾有沒有那個檔案

得到什麼經驗:對於git基礎非常清楚,可以記得每個指令的用法

「於 2017/03/21 答題結束」

@wildwindjen
Copy link
Contributor Author

wildwindjen commented Mar 22, 2017

補充一下我所謂的「事後驗收」
在「事情評估」就是要確認這次的目標,處理的範疇,然後整理出「事後驗收」的標準。

舉例來如:
為了 A 跟 J 的答案,我會搞清楚一般目錄跟 git working folder 的差別。
當我知道 git working folder 會比一般目錄多一個 .git 隱藏目錄,並且可以在 git working folder 下達 git 相關指令。

那我會在「事前」就定下針對 A 跟 J 的事後驗收方式:

A. 在 working folder 利用 ls -al 查看有沒有多一個 .git 目錄,並且執行 git status ,不會看到 「fatal: Not a git repository...」字樣
J. 在 folder 確認 .git 目錄消失,執行 git 相關指令會看到「fatal: Not a git repository...」

每個人的驗收方式不一定一樣,但是有些已知是錯的認知,就會有機會被指正出來,藉以修正錯誤的觀念。

答案上來前,請真的依照你自己的驗收方式驗收過了,不要明明跑過就會錯的答案還貼上來。

@wildwindjen
Copy link
Contributor Author

@dustfantasy

你所謂的「GH我不知道要做到什麼事」是指不懂題目嗎?
那你拿我昨天舉的例子去對照圖吧。
如果還是不清楚,那先想清楚你要怎麼提問,才能有效率地問到你想要的資訊。

其實我有疑慮的是「2017/03/12」這個日期。

@wildwindjen
Copy link
Contributor Author

@HoHow

G 沒錯,但是是因為有預設參數,補充一下如果是完整的參數,是什麼樣子?
如果你的作業系統是 unix-like,那 J 是錯的。

@HoHow
Copy link

HoHow commented Mar 22, 2017

@wildwindjen
G:git reset HEAD --
J:rm -rf .git

利用哪些資源:http://oomusou.io/git/git-remove-stage/

@dustfantasy
Copy link

「2017/03/12」這個是我沒注意到沒修改到 應該是「2017/03/20」抱歉 那要改掉嗎?還是放著保留?
GH是不懂題目沒錯。
H的話意思若是指跟F同樣的行為不過要作用到working folder的話那是用git reset --hard HEAD^,可是若是在working folder中有修改檔案想回復至剛剛提交的情況,那我認為應該是git checkout head .或git reset --hard HEAD。
而G我不知道要把stage 的狀態退回到 working folder 階段的意思。
就字面意思要把stage退回去working folder的話,這種動作應該會造成working folder的改變才對,以這樣的圖與描述我會認為是在working folder中有做修改但想回復至跟stage狀態一樣的情況,而這時則會用git checkout -- .。
但若以例子說明對照那的確是用git reset,就是reset的作用範圍的不同而已。

@wildwindjen
Copy link
Contributor Author

@dustfantasy

  1. 你們回覆的第一篇是給你們作答用的,隨時都可改,最後會以這邊的回答為主。其餘的回覆則視為討論與釐清題意用,給後面做題目的人參考。

我懂你卡住的點了。這圖指的是單一次版本的進版狀況。所謂的「版本」,是「專案在某個時間點的狀態」。

一開始 working folder 異動了一些東西,形成了一個新版本(在小聯盟)。
讓這個新版本進到 stage(登錄大聯盟 40 人名單,準備上大聯盟)。
讓這個新版本進到 repository 留存,變成確定的 git 版本,也就是所謂的 commit(上大聯盟)。結束這回合。
(可能反悔,重啟這回合 => FGH)

working folder 又異動一些東西,另一個新版本,開啟新的一回合。

你把下回合也考慮進來了。這題沒打算這麼複雜,雖然實務上你考慮的點可能發生,但是我自己習慣上會盡可能避免在有新版本的情況下倒退嚕,所以要嘛直接把新版本改成我要的狀態,不然就是搭配 stash 使用。

@wildwindjen
Copy link
Contributor Author

wildwindjen commented Mar 22, 2017

@dustfantasy @HoHow
請回頭修正你們第一篇的答案,
另外重新補上「事後驗收」。

@YenChunchen
Copy link

YenChunchen commented Mar 22, 2017

a.
A.git init
B.git add
C.git commit
D.git push
E.git fetch
F.git reset --soft HEAD^
G.git reset --mixed HEAD --
H.git reset HEAD^
I.git clone
J.rm -rf .git

b.
什麼是版本控制系統?開發過程中,確保由不同人所編輯的同一程式檔案都得到同步,可使設計者回復到之前的任一狀態,並使用分支以致不會影響到其它設計者開發的系統
什麼是 working folder?本地程式所在的資料夾,該資料夾底下的所有檔案都會套用版控
什麼是 index/stage?repository和working folder的中介區,當working folder新增,修改,刪除完成後,要先把這些更改過的檔案新增(add)到stage
什麼是 repository?repository就是每次提交(commit)版本放置的區域
什麼是 commit?每個commit可視為一節點,類似存檔,每個節點都可提供未來作追蹤或回復

c.事前評估做了什麼?理解圖中每個單元為何,針對git兩個方向去作查詢
利用了哪些資源?
google:https://kingofamani.gitbooks.io/git-teach/content/chapter_2/chapter_2reset_file.html
http://gogojimmy.net/2012/01/17/how-to-use-git-1-git-basic/
https://backlogtool.com/git-guide/tw/intro/intro1_1.html
https://blog.wu-boy.com/2010/08
https://ihower.tw/blog/archives/2622
http://stackoverflow.com/questions/3212459/is-there-a-command-to-undo-git-init
排程為何? 蒐集資料(1hr),事後驗收(2hr)
事後怎麼驗收?依照指令去終端機作實作並查看結果
A.git init 專案目錄下會增加git folder
B.git add git status 查看檔案顏色變成綠色
C.git commit git log查看增加新的版本及描述
D.git push 遠端git repository內容變更為新版
E.git fetch pull後遠端git repository內容和本地repository相同
F.git reset --soft HEAD^ 回復上一版但已加入暫存區改變仍存在 git log下的版本,描述不存在
G.git reset --mixed HEAD -- 取消已加進暫存區檔案 git status 查看檔案顏色變成綠紅色
H.git reset HEAD^ git log下的版本,描述不存在and git status 查看檔案顏色變成綠紅色
I.git clone 欲存放的目錄下增加了該git專案資料夾
J.rm -rf .git 該.git folder移除

得到什麼經驗?對git架構比較瞭解,未來可以對不同情況下不同指令

@wildwindjen
Copy link
Contributor Author

@dustfantasy 的 GH 跟 @HoHow @YenChunchen 不一樣,討論看看吧。

@dustfantasy
Copy link

@HoHow討論後發現自己似乎是理解錯誤這兩個題目了
H是F+G的執行指令
所以在git reset --soft HEAD^後執行git reset HEAD
這樣等同於git reset HEAD^
但我G的回答則是排除已經先執行F的情況結果變成應該是H的答案
然後我又認為G跟H應該是做不一樣的事所以是連同working folder一起修改的git reset --hard HEAD^

@PenguinRun
Copy link

「於 2017/03/26 開始答題」

https://medium.com/@justinlee_78563/%E9%97%9C%E6%96%BCgit-%E4%B8%80-b4f2d304e203#.x5b327wgo

事前評估:
先了解各個專有名詞的意思是什麼,並嘗試去揣測每個情境為何。

利用資源:
blog中有。

排程:
了解專有名詞->找資料->找git的指令說明->實測->畫圖。

驗收:
以實作做驗收,blog有這部分的實測。

得到的經驗:
對於git的生態圈有更進一步的了解,還有練習寫文章...

「於 2017/03/26 答題結束」

@dwatow
Copy link

dwatow commented Apr 3, 2017

「於 2017/04/03 開始答題」
A. git init
B. git add
C. git commit
D. git push
E. git pull
F. git reset --soft HEAD^
G. git reset HEAD
H. git reset
I. git clone
J. rm -rf .git

版本控制,就是時光機,記錄開發歷程,可恢覆到任何一個已記錄的時間點。
working folder就是有版本控制的資料夾範圍
index/stage已追縱檔案,確定要記錄的樣子放進stage
repository已記錄的歷程
commit已記錄的任何一個時間點

google了一下
https://medium.com/@justinlee_78563/%E9%97%9C%E6%96%BCgit-%E4%B8%80-b4f2d304e203
https://git-scm.com/book/zh/v1/Git-%E5%9F%BA%E7%A1%80-%E8%AE%B0%E5%BD%95%E6%AF%8F%E6%AC%A1%E6%9B%B4%E6%96%B0%E5%88%B0%E4%BB%93%E5%BA%93

有實際使用terminal操作一次。
確定狀態的改變,有到精準的位置
發現以前會的沒有麼精準(仔細)XD
「於 2017/04/03 答題結束」

@alxtz
Copy link

alxtz commented May 24, 2017

「於 2017/05/23 開始答題」

a (操作指令)

A. git init (將一般folder變成有VC的working folder)

B. git add (將working folder的改動告訴Git,加進staging area,等候commit)

C. git commit (將staging area的內容加入Git的timeline)

D. git push (將本地的commit timeline跟遠端合併)

E. 更新狀態後,是否要合併

  1. (只是取回遠端的狀態的話) git fetch (可以知道自己跟遠端的commit差在哪)
  2. (將遠端的commit跟自己合併) git merge
  3. (同時做兩件事) git pull

F. git reset --soft HEAD^ (google到的,不確定每個option的意思)(會把commit取消,git status可以看到staging area等待commit)

G. 如果staging area的狀態跟working folder不一樣

  1. 是要把staging area直接丟棄

  2. 還是把working folder回復成stage的狀態

    把stage丟棄 git reset
    把現在的work丟棄,改成stage的狀態 git checkout yourFile

H. (聽起來像是取消commit,也取消stage) git reset HEAD~

I. git clone

J. rm -r .git

b (名詞解釋)

版本控制系統就是可以記錄你寫code的不同改變,可以回復到之前有紀錄的任意狀態

版本控制,就是時光機 ...by Chris

Working Folder : 有使用版本控制的資料夾
Index / Stage : 在你commit前會先把檔案放到這裡,方便[刪減、確認]

  • 其實在git add時就已經commit在.git裡面了,只是不會顯示在timeline上

Repository : 包含你版本控制內容的資料夾,通常是.git
Commit : 把 Index / Stage 的 commit 正式放到timeline上

c (評估)

(事前)

Q1:

  • folder vs. working folder
    由於working folder可以stage,working folder應該是已經git init過的資料夾,而folder不是
  • B、C、F、G、H
    local的操作還算熟悉,應該查各command怎麼使用
  • D、E、I 是遠端vs.本地的操作
    打算複習一下

Q2:

  • 概念還可以,直接寫

Q3:

之前使用Git主要只有在local操作,可以算是沒有合作的經驗,評估對remote的操作比較不了解
之前有看過一本書叫做 Learn Git in a month or lunches,只看了一半,大約3天可以看完,打算花時間補完並寫blog文章

(事後)

後來書只看了1/3,把Local的概念補齊,一直K書感覺有點死板
所以Remote的部分打算之後再讀

「於 2017/05/24 開始答題」
「總共大約花10小時」

@wildwindjen
Copy link
Contributor Author

@alxtz
「一直K書感覺有點死板」
找個人一起練習圖的各種情境會不會有趣一點?

@alxtz
Copy link

alxtz commented May 31, 2017

@wildwindjen
上面的指令都有在自己的github repo用過了
我打算做到團隊技能題組在找人一起用

@TengLee888
Copy link

TengLee888 commented Nov 28, 2017

於2017/11/28開始答題
a

  • git init
  • git add 檔案名稱
  • git commit -m ""
  • git push -u origin
  • git fetch [remote name]
  • git reset -soft HEAD 檔案名稱
  • git reset HEAD 檔案名稱
  • git reset 檔案名稱
  • git clone [url]
  • rm -r .git

b

  • 版本控制: 紀錄檔案的變更,有問題發生都能恢復專案
  • working folder: 用版本控制資料夾的範圍
  • index/stage: 記錄哪個檔案要追縱變更,以便日後提交
  • commit: 提交一個改變,這些改變成為節點,當做未來想要回朔版本或追蹤版本的參考
  • repository: 儲存整個專案的地方

資源
https://medium.com/@justinlee_78563/%E9%97%9C%E6%96%BCgit-%E4%B8%80-b4f2d304e203
經驗
更熟悉git,以前從來沒想過working folder, stage, commit, repository的意義
於2017/11/28答題結束

@godlike0108
Copy link

godlike0108 commented Jan 18, 2018

於 2018/1/17 開始答題

a

  • (A)git init ,會把一個普通的資料夾轉變為 Git 的 工作資料夾。該資料夾底下會多一個 .git 的隱形檔案,從此該資料夾可以被 Git 版本控管。
  • (B)git add <filename> ,會把 working folder(工作區) 內指定的已變動但未儲存的檔案加到 stage (暫存區)內。
    (B-2)git add .git add --allgit add -A 則可以加全部。
  • (C)git commit 會把 stage 內的資料全部放到 local repository (本機儲存庫)內。
  • (D)git push <代表遠端儲存庫的別名> <分支> 會把 local repository 內的資料推到 remote repository (遠端儲存庫)內。 舉例: git push origin master
  • (E)git fetch ,當 remote repository 上的版本比 local repository 的版本還要新時, git fetch 可以將其抓下來並獨立為一個新的分支。
    (E-2)git pullgit fetch 加上 git merge 的效果,不僅將遠端新版本抓下來當分支,而且還將其與主支合併。
  • (F)git reset HEAD^ --soft 取消最近的一次 commit ,並把該次 commit 的資料放在暫存區。其中 HEAD 代表所在分支, ^ 代表上一個。
  • (G)
  • (H)git reset HEAD^ 或寫成 git reset --mixed ,取消最近一次 commit 並把暫存區的檔案也清空。
  • (I)git clone <遠端儲存庫位址> 把 remote repository 的資料複製到本地端的全新資料夾。
  • (J)rm -rf .git 可以讓一個資料夾從 git 資料夾變回普通資料夾。 rm -r <資料夾> 用來砍資料夾, rm -f <檔案> 用來強制砍檔,兩個寫在一起 rm -rf <資料夾> 就能拿來強制砍資料夾。 .git 資料夾是讓資料夾變成 git 資料夾的原因,砍掉就恢復成普通資料夾了。

b

何謂版本控制系統

版本控制系統用來追蹤專案從開始到結束的任何階段。最基本的版本控制系統會記錄每次改動歷程,並且為每個歷程都編上序號以利追蹤。

版本控制的好處是隨時可以將專案的進度回朔到任何一個被記錄的時間節點。另一個好處是可以讓多人協作專案時,區分每次改動的作者。

版本控制系統分成中心式與分散式。中心式的系統每次只容許一名作者進行專案改動。分散式則是讓每個協作者都能在區域進行改動,並且利用「合併」的方式讓多個作者能夠同時更動同個檔案。 Git 就是分散式的版本控制系統。

何謂 working folder 、 staging area 、 repository 、 commit

Git 在控管專案時,會將專案內的檔案分成三個階段,分別是 working folder 、 staging area(index) 、 以及 repository 。概念圖如下:

working folder

working folder 就是被 git 版本控制所管理的資料夾。

staging area

staging area 就是暫存區。用來記錄要被提交到該次版本更新的所有資料。

repository

儲存庫,記錄一個專案所有的版本及其狀態。

commit

一個動作,把暫存區內的更改記錄提交到儲存庫,成為最新的版本時間點。

c

學習資源

書:為你自己學 Git
Udacity - How to Use Git and GitHub 講得非常清楚,我很喜歡

[於 2018/1/18 答題結束]

@qscgyujm
Copy link

A:


A: 將一般目錄變成 git working folder

git init 在所屬資料夾底下產生.git目錄

B: 將 working folder 的異動狀態登錄到 stage

git add . or 資料名稱

C: 將 stage 的狀態放到 local repository

git commit -m 'command'

D: 將 local repository 的狀態放到 remote repository

git push origin master

E: 將 remote repository 的狀態取回到 local repository

git fetch origin master

F: 將 local repository 的狀態退回到 stage 階段(是 C 的逆向

git reset HEAD^ --soft 將最新的一次的commit回復到上一次的commit

G: 將 stage 的狀態退回到 working folder 階段(是 B 的逆向

git reset <filePath> stackoverflow

H: 將 local repository 的狀態一口氣退回到 working folder 階段(是 B+C 的逆向)

git reset --mixed

I: 從 remote repository 取回建立成新的 working folder

git clone

J: 將 git working folder 變回一般目錄

rm -rf .git 刪除.git目錄

B:

  1. 什麼是版本控制系統?

版本控制為 程式開發時會隨著時間的發展有著許多個版本,當目前版本錯誤時可以回到過去版本,也可以幫你記錄各版本的差異與紀錄。

  1. 什麼是working folder?
    working folder是工作目錄,指可以任意修改的程式的工作目錄

  2. 什麼是 index/stage?什麼是
    stage是暫存區域,指將工作目錄的資料先暫時儲存一個區域,等待進度完成後,將資料儲存起來。

  3. repository?
    repository是儲存庫,指永久儲存進度的資料。

  4. 什麼是 commit?
    commit是指將stage儲存到repository的命令,並留有儲存紀錄。

C:

學習資源

  1. https://github.com/twtrubiks/Git-Tutorials
  2. 為你自己學 Gi

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

10 participants