git 是一個功能強大的程式碼管理工具 - Version Control System,以下簡單紀錄 git 指令的筆記,並推薦幾個不錯的教學網站。

具有視覺化、互動式學習的設計,內容由淺入深,相當值得學習:
Learn Git Branching
如果該網頁的顯示語言為英文,只要將網頁瀏覽器的語言改為中文為優先,則重新更新網頁內容後,網頁會自動以中文呈現。

如果對上述網站的內容覺得不滿足,這個網站是屬於說明型的:
Git Tutorial

如果還想知道更多可以參考電子書:
Pro Git book





Main

git init => 在本機端, 初始化 git 環境

git add => 在本機端, 將修改的內容送到 staging area

git add --patch => 在本機端, 將修改的內容分成多次送到 staging area,利於將每次的 commit 內容作分類

git status => 在本機端,顯示目前的檔案修改情況

git status -s => 以簡短的方式秀出 git status

設定檔: .gitignore => 設定讓 git 忽視的檔案

git diff => 在本機端,顯示目前在 working directory 的修改內容

git diff --staged => 在本機端,顯示目前在 staging area 的修改內容

git diff --cached => 效果同 git diff --staged

git diff --check => 在本機端,檢查修改內容的行尾是否有多餘的空白字元

git commit => 在本機端,提交 staging area 所修改的內容至 local repo

git commit -a => 在本機端,提交所有的修改內容至 local repo,包含在 working directory 及 staging area 所作的修改

git commit --amend => 在本機端,將目前 staging area 的修改內容與上一次的 commit 內容合併,如果 staging area 的沒有修改內容,則為單純修改上一次的 commit 內容

git rm --cached Name_of_File => 在本機端, 在 staged area 移除該檔案,但保留該檔案至 working directory

git mv Name_of_File NewName_of_File => 在本機端, 將檔案重新命名

git log => 在本機端,顯示目前已經 commit 的所有修改內容,後續可以增加參數來進行過濾

git log --decorate => 在本機端,除了顯示目前已經 commit 的所有修改內容之外,還顯示相關的 branch

git log --name-status => 在本機端,顯示目前已經 commit 的修改內容的檔案名稱

git log origin/master..HEAD => 在本機端,顯示執行 push 時,會上傳到 server 的修改內容

git reset HEAD Name_of_File => 在本機端,將該檔案的修改從 staging area 移到 working directory

git reset reference~# => 在本機端,將 branch 的 commit 往回移動到 reference~#,但在 working directory 保留這些修改

git reset --soft reference~# => 在本機端,將 branch 的 commit 往回移動到 reference~#,但在 staging area 保留這些修改

git reset --hard reference~# => 在本機端,將 branch 的 commit 往回移動到 reference~#,且不保留這些修改

git branch Name_of_Branch => 在本機端,建立一個指向目前 commit 的程式內容的 Name_of_Branch

git branch -f Name_of_Branch reference~# => 在本機端,將 Name_of_Branch 移動到 reference~#

git branch -d Name_of_Branch=> 在本機端,刪除 Name_of_Branch

git checkout -- Name_of_File => 在本機端,移除將該檔案在 working directory 的修改

git checkout Name_of_Branch => 在本機端,切換目前的 branch 到 Name_of_Branch

git checkout -b Name_of_Branch => 在本機端,建立一個指向目前 commit 的程式內容的 Name_of_Branch,並切換目前的 branch 到 Name_of_Branch,相同於:
git branch Name_of_Branch; git checkout Name_of_Branch

git checkout Hash_of_Commit => 在本機端,將 HEAD 指向某個 commit 的內容

git merge Name_of_Branch => 在本機端,將 Name_of_Branch 的 commit 內容,結合到目前的 branch

git rebase Name_of_Branch => 在本機端,將目前 branch 的 commit 內容,複製到 Name_of_Branch

git rebase Name_of_Branch Target_Branch => 在本機端,將 Target_Branch 的 commit 內容,複製到 Name_of_Branch,相同於:
git checkout Target_Branch; git rebase Name_of_Branch

git rebase -i reference~# => 在本機端,透過編輯器 (vi) 重新挑選、排列、修改、分離、結合…,在 reference~# 之後的所有 commit 內容

git stash => 在本機端,暫時儲存已修改的資料

git format-patch reference~# => 在本機端,產生目前位置與 reference~# 之間,每個 commit 之間的 patch 檔

git apply Name_of_Patch_File => 在本機端,利用 patch 檔來修改檔案

git am Name_of_Patch_File => 在本機端,利用 patch 檔來修改檔案,並自動 commit

HEAD 是一個象徵性的指標,指向最近一次 commit 的內容,通常來說,HEAD 會指向某個 branch。

除了利用 Hash_of_Commit 之外,也可以利用相對於 reference 的符號來表示,reference 可以是 Name_of_Branch ,也可以是 HEAD 本身:

git checkout reference^ => 在本機端,將 HEAD 指向該 reference 的 parent

git checkout reference~# => 在本機端,將 HEAD 指向該 reference 的前 # 個 parent

git revert reference~# => 在本機端,新增一個 commit,對 reference~# 的內容作回復

git cherry-pick Hash_of_Commit => 在本機端,將 Hash_of_Commit 的內容複製到目前 branch

git tag Hash_of_Commit => 在本機端,為該 commit 加上指向它的 tag

git describe reference => 在本機端,顯示該 reference 相對於最近 tag 的資訊

git reflog => 在本機端,顯示所有有關 HEAD 的修改紀錄




Remote

git clone Remote_Branch => 在本機端,將遠端檔案庫的全部檔案複製一份下來

git remote => 在本機端,顯示遠端檔案庫的名稱

git fetch => 將本機端所有的 origin/branch 更新與遠端主機的同名 remote branch 相同

在 git fetch 完之後,要和本機端的已經修改過程式碼作結合,可以有好幾種作法,例如:
git cherry-pick origin/master
git rebase origin/master
git merge origin/master

git pull => 在本機端,結合 git fetch 與 git merge origin/master 的效果

git pull --rebase => 在本機端,結合 git fetch 與 git rebase origin/master 的效果

git fetch origin Remote_Branch => 將本機端的同名 origin/branch 更新到與遠端主機的 Remote_Branch 相同

git fetch origin Remote_Branch:New_Local_Branch => 在本機端新增 New_Local_Branch,並將 New_Local_Branch 更新到與遠端主機的 Remote_Branch 相同

git fetch origin :Name_of_Branch => 在本機端,建立一個指向 origin/master 最近 commit 程式內容的 Name_of_Branch

git push => 將本機端目前所在的 branch 所作的修改上傳到遠端主機的同名 branch

git push origin Local_Branch => 將本機端 Local_Branch 所作的修改上傳到遠端主機的同名 branch

git push origin Local_Branch:Remote_Branch => 將本機端 Local_Branch 所作的修改上傳到遠端主機的 Remote_Branch

git push origin Local_Branch:New_Remote_Branch => 在遠端主機新增 New_Remote_Branch,並將本機端 Local_Branch 所作的修改上傳到新增的遠端主機的 New_Remote_Branch

git push origin :Name_of_Branch => 刪除遠端主機的 Name_of_Branch

git push origin --delete Name_of_Branch => 刪除遠端主機的 Name_of_Branch

git branch Name_of_Branch origin/master => 在本機端,建立一個追縱 origin/master 的 Name_of_Branch

git branch -u origin/master Name_of_Branch => 在本機端,將 Name_of_Branch 設定為追縱 origin/master

git branch -u origin/master => 在本機端,將目前的 branch 設定為追縱 origin/master

git checkout -b Name_of_Branch origin/master => 在本機端,建立一個追縱 origin/master 的 Name_of_Branch,並切換目前的 branch 到 Name_of_Branch,相同於:
git branch Name_of_Branch origin/master; git checkout Name_of_Branch




Example
將本地端的修改與主機端的修改作整合

利用 merge

在 master branch 上新增並切換到 bugFix branch:
git checkout -b bugFix
修改完後,作 commit:
git commit
切回 master branch,作更新:
git checkout master; git fetch; git merge origin/master
在 master branch 下,merge 在 bugFix branch 所作的修改:
git merge bugFix
回到 bugFix branch,與 master branch 作同步:
git checkout bugFix; git merge master


利用 rebase

在 master branch 上新增並切換到 bugFix branch:
git checkout -b bugFix
修改完後,作 commit:
git commit
切回 master branch,作更新:
git checkout master; git fetch; git rebase origin/master
再切回 bugFix branch,rebase 回 master branch:
git rebase master bugFix
回到 master branch,與 bugFix branch 作同步:
git checkout master; git rebase bugFix





Reference

http://learngitbranching.js.org

Git Tutorial

Pro Git book

文字內容 或 影像內容 部份參考、引用自網路,如有侵權,請告知,謝謝。
創作者介紹

拾人牙慧點滴

silverwind1982 發表在 痞客邦 PIXNET 留言(0) 人氣()