教學網址: https://www.bilibili.com/video/BV13X4y1c7sn/?p=3 ### 基本資訊 並 初始化 目錄 ```bash //version git --version // set username git config --global user.name "git3345678git" // set email git config --global user.email "git3345678git@gmail.com" /config list git config --list // cd to specific folder and initialize git init ``` ### 工作區 暫存區 本地庫 ```bash 先創建一個txt 會在工作區 /加入 暫存區 git add demo.txt // 提交到 本地庫 git commit -m "this is my first comment" "demo.txt" //查看狀態 git status ``` ### LOG 操作 ```bash //顯示 log git log //log 一頁show 不完看到冒號可以enter //回去可以back //退出q //簡潔 但完整hash git log --pretty=oneline // 簡潔 但部分hash git log --oneline //顯示歷史版本需要回回推次數 git reflog ``` ### 恢復歷史版本 ```bash //顯示歷史版本需要回回推次數 git reflog // 回到某個歷史版本 xxx 為索引 //hard 比較常用 他是連 工作區 暫存區 本地庫 同步修改 git reset --hard xxxxx // 回到某個歷史版本 xxx 為索引 //hard 不常用 他是連 工作區 不修改。 //暫存區 本地庫 同步修改 git reset --mixed xxxxx // 只修改 本地庫 其他不修改 //不常用 git reset --soft xxxxx ``` ### 刪除 ```bash //刪工作區 rm test.txt //刪除同步到 暫存區 git add test.txt //暫存區 提交 刪除同步到 本地庫 git commit -m "delete my test" test.txt //查看一下歷史log,可以看到各個commit 的歷史 git reflog //可以恢復歷史版本 git reset --hard xxxxx //可以先看head 現在在哪 git reset --hard head ``` ### diff 比對命令 功能: 有時 (工作區 暫存區) 的內容 不一樣 可以查看 ```bash // 創建 test3.txt 並提交 //test3.txt 內容增加aaaaaa //git status 查看會發現 modified 工作區 // diff 可以顯示比對工作區 和 暫存區 差異 // diff 也可多文件比對 git diff test3.txt // 同步到暫存區 git add test3.txt //此時 工作區 和 暫存區 相同 本地庫不同 //暫存區比對 本地庫 git diff head //可以比對 歷史索引 git diff xxxxx ``` ### 分支 ```bash //創建 test4.txt 內容 abc 並commit //查看分支 git branch -v //創建分支 branch01 git branch branch01 // *號 代表當前分支 //切換到分支 branch01 git checkout branch01 //修改 test4.txt 內容並 commit git add test4.txt git commit -m "change content in branch01" test4.txt // 此時 branch01 根 master 沒關係了 //branch01 合並到 master git merge branch01 //合並有可能會衝突,這點需要人為去解決 //然後add git add test4.txt //然後 提交 這裡不可帶文件名 git commit -m "solved" ``` ### 本地創建遠程庫別名: ```bash //查看別名: git remote -v // 起別名 orgin 為 https://github.com/git3345678git/gitresp2.git git remote add origin https://github.com/git3345678git/gitresp2.git // 刪除別名 origin git remote rm origin ``` ### 先去 github 創建token ``` setting ->   Developer settings -> Personal access tokens (classic) -> Generate a personal access token -> Note xxx -> 打勾 repo // token 保存好 他只會show 一次 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 ``` ### PUSH ```bash git remote add origin https://github.com/git3345678git/gitresp2.git //這個是舊指令 (應該無法用了) git push origin master // 切換到 main 分支 git branch -M main // 推送 git push -u origin main ``` ### clone 1 . clone 自動初始化本地庫 ```bash git clone url ``` ### 加入團隊 當你clone 一個 然後作出新的功能 想要push 上去。必須加入團隊。 你如果在同一台電腦本地測試時,會可以push 上去, 實際上 是你電腦中的憑證是同一個所以會成功。 想模擬真實情況: ```bash 1 window+r,输入control 打开空直面板 2.windows認證 3.找到 認證管理員 刪除 github 那個 ** 新增一些檔案 // 切換到 main 分支 git branch -M main // 推送 git push -u origin main 這時會出現錯誤,原因是 還沒加入團隊 ``` ### 邀請: ```bash 進到某個 repo 然後 settings -> collaborators -> add people -> 產生邀請鏈接 -> 給別人鏈接 加入。 被邀請的人加入團隊後,就可以push git clone url //新增一些檔案 //最後 把他push //需要 token git branch -M main git push -u origin main 如此一來 可已推到對方github 遠程庫了 ``` ### PULL 創作者,確認一下github遠程庫是否有人push 最新的東西。 ```bash //先fetch 抓取 遠程庫 ,此時並沒有跟新本地工作區 git fetch origin main //checkout 切換查看遠程庫 git checkout origin/main //checkout 切換查看本地庫 git checkout main //合並前 先切換到本地。 //最後把遠程的main 合並到本地 git merge origin/main 也可以用最簡單的 直接替帶上面的。 (通常為了保險,上面的比較詳細,可以查看檔案內容) git pull origin main pull 操作通常用在非常簡單的專案。 ``` ### 衝突 ```bash 假設A 和 B 共同開發 A 創建 conflict.txt 到 github B clone 此時 兩人本地庫 都有 conflict.txt 假設b 對這個conflict.txt 的修改上傳後此時 github 是 B修改過的 假設A 也對conflict.txt 的修改上傳 但內容衝突了,所以此時是無法上傳的。 這個時候建議 先 pull 檔案。 然後打開 conflict.txt 會看見 衝突的內容。 看要怎樣做取捨。 最後 commit 在push //注意這部會失敗 (不能加上檔案名) git commit -m "解決衝突" conflict.txt //要變這樣 git commit -m "解決衝突" //推送 git push -u origin main ``` ### fork / pull request 用於跨團隊合作 SSH key ```bash 1. //配置 (如果已经配置,就跳过) git config --global user.name “username” git config --global user.email “email” 2. 当cd ~/.ssh命令执行后窗口返回“no such file or directory”的时候,表示我们的电脑并没有ssh key,所以需要我们创建ssh key 3. ssh-keygen -t rsa -C “xxx@xx.com”//这里的邮箱要换成自己注册时的邮箱 4.执行命令完成后,默认会在window的C:\Users\Administrator.ssh下面生成如下两个名称的文件: C:\Users\Administrator.ssh id_rsa(私钥,不能泄露出去) id_rsa.pub(公钥) 5. github setting -> ssh and GPG keys -> new ssh key -> 复制的id_rsa.pub文本 //.使用 git remote set-url 来调整你的url。 6.git remote set-url origin git@github.com:用户名/库名.git 7. push 就可以了 ```