Github 筆記

紀錄個人使用Github的指令

Hugo 指令紀錄


GitHub 常用操作

GitHub Docs

創建新專案

{}內的字要替換

1
2
3
4
5
6
7
echo "# {專案名稱}" >> README.md
git init
git add .
git commit -m "first commit"
git branch -M main
git remote add origin https://github.com/{使用者名稱}/{專案名稱}.git
git push -u origin main

推送新版本專案

1
2
3
git add .
git commit -m "版本名稱"
git push

拉取新版本專案

1
git pull

拉取版本有合併問題時

  1. 方法一:stash
1
2
3
git stash
git pull
git stash pop
  1. 方法二:完全覆蓋本地修改
1
2
git reset --hard
git pull

Git 大檔案上傳

  1. 可以從 https://github.com/git-lfs/git-lfs/releases 選擇你要的版本進行下載。
  2. 執行安裝檔
  3. 在 CMD 或者 Git-Bash 執行
1
git lfs install
  1. 在下 git 指令時,你只需要將追蹤大檔案 (超過 100 MB) 的指令 git add 改成 git lfs track 。 舉例來說,如果要追蹤副檔名為 .psd 的大檔案,那請使用
1
2
要先cd到所要上傳文件的目錄下
git lfs track "*.psd"

而不是 git add “*.psd” !

  1. 並且確保檔案 .gitattributes 有被追蹤。 (這是用來告知 github 此為大型檔案的文件)
1
git add .gitattributes
  1. 後面的指令都是一樣的。 直接 git add > git commit > git push ! 回到 Github Repository 就可以發現成功被推送了。

重點紀錄

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
在所要上傳文件的目錄下打開Git

首先,導入lfs

git lfs install
 其次,逐條運行如下命令:

git lfs track "文件名"
git add 文件名
git commit -m "文件名"
git push -u origin master

查看分支

1
git branch

切換分支

1
git checkout <branch>

合併分支

先切換到要被覆蓋掉的舊版本

1
git merge <commit>

<commit>是指要覆蓋過來的新版本,也就是最後會保留的版本

submodule子模塊的拉取

1
git submodule add <存儲庫url> <想放的路徑>

存儲庫內含submodule子模塊,想完整拉取的方法

1
git clone https://xxx.xx.xxx/xxxx/xxx.git --recursive

忘記做的話

1
2
git clone https://xxx.xx.xxx/xxxx/xxx.git
git submodule init && git submodule update

刪除儲存庫中的submodule

1
git rm <submodule-name> || git submodule deinit <submodule-name>

or

1
git rm --cached path_to_submodule

path_to_submodule子模塊的路徑在哪裡。

###以上失敗,以下為成功的

  • 從 .gitmodules 文件中刪除相關部分。
  • 暫存 .gitmodules 更改 git add .gitmodules
  • 從 .git/config 中刪除相關部分。
  • 運行 git rm –cached path_to_submodule (沒有尾部斜杠)。
  • 運行 rm -rf .git/modules/path_to_submodule (沒有尾部斜杠)。
  • 提交 git commit -m “刪除的子模塊”
  • 刪除現在未跟踪的子模塊文件 rm -rf path_to_submodule 簡單來說,刪除跟目錄下submodule的資料後 .git資料夾內的config檔案內的submodule紀錄也要去刪除

批量刪除子模塊

1
git submodule foreach <command> 

eg: git submodule foreach git checkout master

該命令會按照.gitmodules裡的path尋找所有的三方模組,並在每一個模組中都執行foreach後的命令

eg: git submodule foreach git submodule update

有些檔案不想放在 Git 裡面

在專案跟目錄放一個 .gitignore 檔案,並且設定想要忽略的規則就行了 例如

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
.gitignore中

/node_modules
/public/storage
/public/hot
/storage/*.key
/vendor
/.idea
Homestead.json
Homestead.yaml
.env
/public/evidence

Git 指令回顧

1
2
3
4
5
單一檔案加入索引:git add <檔案名稱>
所有檔案加入索引:git add .
提交版本:git commit -m "填寫版本資訊"
觀看當前狀態:git status
瀏覽歷史紀錄:git log

Git 實用操作:重寫 Commit 歷史


複製code到新分支

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
1、切換到原分支
git checkout <原分支>
git pull

2、將原分支複製到新分支
git checkout -b <新分支>

3、將新分支的代碼推送到遠端伺服器
git push origin <新分支>

4、拉取遠端分支的code
git pull

5、關聯
git branch --set-upstream-to=origin/<新分支>

6、再次拉取代碼
git pull

GitHub fork 跟 branch

https://git-scm.com/book/zh-tw/v2/GitHub-%E5%8F%83%E8%88%87%E4%B8%80%E5%80%8B%E5%B0%88%E6%A1%88

https://wp.chunhsin.idv.tw/?p=4179

https://blog.csdn.net/u012814856/article/details/84590065

1.Fork會另外複製一個版本,這個版本也是一個完整的套件。

2.官方說明文字裡指出,Fork主要是指要以其他人的套件為初始套件來開發時,或者要替他人的套件做出貢獻,也就是說通常是從其他Git帳號所擁有的套件複製而來的就是Fork。

3.如果是自己的套件,正確的作法應使用branch

4.Fork底下還可以有Branch,但沒有Branch底下還有Fork這種狀況。

5.無論是Fork還是Branch的版本都可以合併至主要版本。唯一差別是Fork是向原作者送出merge的要求,尚需要原作者允許才可以合併,而branch因為是從自己的帳號分支出來的套件,所以不須另外允許。

1. 建立分支

https://backlog.com/git-tutorial/tw/stepup/stepup2_2.html git branch <branchname>

建立 issue1 分支。 git branch issue1

不給任何參數直接執行 branch 命令的話,可以顯示分支列表。前面有 * 的就是現在的分支。 git branch

1
2
  issue1
 *master

2. 切換分支

若要在新建的issue 1分支進行提交,需要切换到issue1分支。

需執行checkout命令以退出分支。

git checkout <branch> 切換到 issue1 分支。

git checkout issue1 Switched to branch 'issue1'

在 checkout 命令給定 -b 參數執行,可以同時建立分支和切換。 git checkout -b <branch>

在切換到 issue1 分支的狀態下提交,歷史記錄會被記錄到 issue1 分支。用 add 命令增加 myfile.txt 檔案後再提交。

連猴子都懂的Git命令 add 修改加入書籤

1
2
git add myfile.txt
git commit -m "添加add的說明"
1
2
[issue1 b2b23c4] 添加add的說明
 1 files changed, 1 insertions(+), 0 deletions(-)

3. 合併分支

將 issue1 分支的修改合併到 master 分支。

目前的歷史記錄

執行 merge 命令以合併分支。 git merge <commit>

您可以在執行命令中添加分支的名稱,將指定的提交合併到當前使用的分支。 要合併提交到master分支,現在讓我們切換到master分支吧。 git checkout master Switched to branch 'master' 提交之前先打開 myfile.txt 檔案,確認內容。

連猴子都能懂的Git命令 在上一頁的檔案的編輯已經在 issue1 分支進行了,所以master 分支的 myfile.txt 內容沒有更改。 git merge issue1

1
2
3
4
Updating 1257027..b2b23c4
Fast-forward
 myfile.txt |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

master 分支 HEAD 指向的提交移動到和 issue1 同樣的位置了。這個合併就是 fast-forward(快轉)合併。

目前的歷史記錄

打開 myfile.txt 檔案,確認內容。

1
2
連猴子都懂的Git命令
add 修改加入索引

您會看到「add 修改加入索引」,這就表示合併成功了。

4. 刪除分支

既然issue1分支的內容已經順利地合併到master分支了,現在我們可以將其刪除。

欲刪除分支,請執行branch -d 命令。 git branch -d <branch> 執行以下的命令以刪除 issue1 分支,。

git branch -d issue1

1
2
Deleted branch issue1 (was b2b23c4).
issue1分支被刪除了。您可以用"git branch"命令來確認分支是否已被刪除。
1
2
$ git branch
* master

GitHub SSH 密鑰綁定專案方法

https://stackoverflow.com/questions/12940626/github-error-message-permission-denied-publickey

讀取id_rsa.pub

git 應用程序在 root 用戶目錄中讀取你的 id_rsa.pub

1
/home/root/.ssh/id_rsa.pub

無法讀取密鑰的解決方法

git 無法讀取 /home/your_username/.ssh/id_rsa.pub 中的密鑰的解決方法,需要在/home/root/.ssh/中創建密鑰

1
2
3
4
$ sudo su
$ ssh-keygen
$ cd ~/.ssh
$ cat id_rsa.pub

最後將密鑰複製到 github 帳戶


政治歸政治 苓膏龜苓膏

Somebody
Built with Hugo
Theme Stack designed by Jimmy