文章目錄
- 下載下傳安裝Git / 注冊GitHub
- 配置Git 并 設定GitHub ssh密鑰
- Git初步
- 實作本地與遠端同步
-
- < 0 > 初始化本地工作區倉庫 并 關聯GitHub倉庫
- < 1 > 儲存到本地版本庫的暫緩區
- < 2 > 送出 本地版本庫暫緩區 到 本地版本庫目前分支
- < 3 > 将 本地倉庫 推送到 遠端倉庫
- Git 進階
- 一. 工作區 與 版本庫( 暫緩區, 主分支 )
- 二. 時光穿梭機
-
- 版本回退
- 檢視修改
- 撤銷修改
- 删除檔案
- 三. 遠端倉庫
-
- 添加遠端倉庫
- 從遠端倉庫克隆
- 四. 分支管理
-
- 建立與合并分支
- 解決沖突
- 分支管理政策
- Bug 分支
- Feature 分支
- 多人協作
- Rebase
- 五. 标簽管理
-
- 使用 GitHub
- 使用碼雲
- 六. 自定義Git
-
- 忽略特殊檔案
- 配置别名
- 搭建 Git 伺服器
- 其他 Git 指令
-
- 拉取 遠端倉庫 的修改到本地
- 克隆一個項目到本地
- 檢視本地倉庫檔案狀态
- .gitignore 忽略指定檔案
- warning: LF will be replaced by CRLF in
- 保留倉庫, 删除倉庫裡的檔案
- 相關 Git 學習文章
- 其他 Git 指令記錄
下載下傳安裝Git / 注冊GitHub
不詳細介紹了, 詳情 Google 一下更精彩
配置Git 并 設定GitHub ssh密鑰
先設定全局的姓名和郵箱, 讓人知道是誰修改的
注意帶雙引号
git config --global user.name "xxx"
git config --global user.email "[email protected]"
生成密鑰
按三個回車, 密碼為空.
生成成功後,去對應目錄 C:\Users\acmaker.ssh裡( acmaker 為電腦使用者名, 找到自己的使用者名 )
用記事本打開id_rsa.pub,複制ssh key公鑰
然後到 GitHub 上, Settings, SSH and GPK keys, 添加一個 ssh
這樣本地 Git 就關聯到 GitHub 了
Git初步
實作本地與遠端同步
< 0 > 初始化本地工作區倉庫 并 關聯GitHub倉庫
首先進入工作區目錄, 初始化本地倉庫
git init
關聯遠端倉庫
git remote add origin 倉庫url
取消關聯
git remote rm origin
< 1 > 儲存到本地版本庫的暫緩區
注意把工作區所有檔案修改的檔案加入到暫緩區, 這個指令有個點
把工作區所有的檔案加入到暫緩區
git add --all
添加一個檔案
git add test.cpp
< 2 > 送出 本地版本庫暫緩區 到 本地版本庫目前分支
< 3 > 将 本地倉庫 推送到 遠端倉庫
git push -u origin master
此時可能會産生本地倉庫和遠端倉庫内容不同的錯誤
fatal: refusing to merge unrelated histories
遠端倉庫GitHub 初始化的時候一般是選擇生成一個 README.md , 而本地項目是沒有這個的, 是以導緻本地倉庫和遠端倉庫不符
這個時候或者手動删除遠端倉庫的 README.md 或者 強行拉下來, 如下
git pull origin master --allow-unrelated-histories
或者強行 推上去, 如下
git push -u origin master -f
使得兩個倉庫同步起來,
Git 進階
一. 工作區 與 版本庫( 暫緩區, 主分支 )
二. 時光穿梭機
版本回退
檢視版本送出日志
完整日志
git log
精簡日志
git log --pretty=oenline
回退到上一個版本
git reset --hard HEAD^
回退到上上個版本
git reset --hard HEAD^^
回退到一百個之前的版本…
git reset --hard HEAD~100
回退到指定版本, 1933a是版本号id前幾位
git reset --hard 1933a
檢視發送過的指令日志
git reflog
檢視修改
檢視工作區有哪些檔案改動
git status
檢視工作區某檔案的改動内容
git diff HEAD -- readme.txt
撤銷修改
丢棄工作區所有更改, 從暫緩區恢複( 前提是沒有添加到 暫存區 )
丢棄暫緩區裡的更改, 從主分支恢複 ( 前提是沒有送出到 主分支 )
丢棄主分支裡的更改, 看版本回退那一節
這是删除 暫存區 所有更改
** 介紹一種 一二指令的糅合, 直接從 主分支 恢複 上次送出到主分支的内容
删除檔案
在被 git 管理的目錄中删除檔案時,可以選擇如下兩種方式來記錄删除動作:
rm + git commit -am "abc"
git rm + git commit -m "abc"
另外,git add . 僅能記錄添加、改動的動作,删除的動作需靠 git rm 來完成。
最後,rm 删除的檔案是處于 not staged 狀态的,
也就是一種介于 “未改動” 和 “已送出過” 之間的狀态。
删除檔案夾
git rm -r mydir
三. 遠端倉庫
添加遠端倉庫
關聯倉庫
git remote add origin [email protected]:path/repo-name.git
第一次關聯以後, 推送所有内容, 一次推送master分支時,加上了-u參數,Git不但會把本地的master分支内容推送的遠端新的master分支,還會把本地的master分支和遠端的master分支關聯起來,在以後的推送或者拉取時就可以簡化指令
git push -u origin master
以後推送
git push origin master
從遠端倉庫克隆
git clone [email protected]:yourName/yourRepository.git
四. 分支管理
建立與合并分支
檢視分支
git branch
建立分支
切換分支
git checkout <name>
或者
git switch <name>
建立 并 切換分支
git checkout -b <name>
或者
git switch -c <name>
合并某分支到目前分支
删除分支
點選傳送廖老師的詳細講解
解決沖突
分支管理政策
Bug 分支
…
git stash用于儲存和恢複工作進度
git stash
儲存目前的工作進度。會分别對暫存區和工作區的狀态進行儲存
git stash save "message..."
這條指令實際上是第一條 git stash 指令的完整版
git stash list
顯示進度清單。此指令顯然暗示了git stash 可以多次儲存工作進度,并用在恢複時候進行選擇
git stash pop [--index] [<stash>]
如果不使用任何參數,會恢複最新儲存的工作進度,并将恢複的工作進度從存儲的工作進度清單中清除。
如果提供參數(來自 git stash list 顯示的清單),則從該 <stash> 中恢複。恢複完畢也将從進度清單中删除 <stash>。
選項--index 除了恢複工作區的檔案外,還嘗試恢複暫存區。
git stash apply [--index] [<stash>]
除了不删除恢複的進度之外,其餘和 git stash pop 指令一樣
git stash clear
删除所有存儲的進度
Feature 分支
多人協作
Rebase
五. 标簽管理
如果關聯報錯, 可以如下指令檢視指向的遠端庫資訊
git remote -v
然後删除之前關聯的遠端庫
git remote rm origin
如果要關聯多個遠端庫, 需要自定義命名遠端分支
git remote add github GitHubRepository
git remote add gitee GiteeRespository
---------
推送的時候就需要
git push github master
git push gitee master
使用 GitHub
使用碼雲
六. 自定義Git
忽略特殊檔案
.gitignore
檢查 某檔案 被哪個指令忽略了
git check-ignore
具體忽略指定檔案的文法看文章底部, 其他 Git 指令
配置别名
局部配置檔案是在目前倉庫 .git/config
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.ci commit
git config --global alias.br branch
git config --global alias.unstage 'reset HEAD'
搭建 Git 伺服器
其他 Git 指令
拉取 遠端倉庫 的修改到本地
git pull origin master
克隆一個項目到本地
檢視本地倉庫檔案狀态
git status
.gitignore 忽略指定檔案
在工作區根目錄下, 建立一個 .gitignore
更多文法 Google 一下
*.exe
*.ini
/Temporary
# 忽略 .a 檔案
*.a
# 但否定忽略 lib.a, 盡管已經在前面忽略了 .a 檔案
!lib.a
# 僅在目前目錄下忽略 TODO 檔案, 但不包括子目錄下的 subdir/TODO
/TODO
# 忽略 build/ 檔案夾下的所有檔案
build/
# 忽略 doc/notes.txt, 不包括 doc/server/arch.txt
doc/*.txt
# 忽略所有的 .pdf 檔案 在 doc/ directory 下的
doc/**/*.pdf
warning: LF will be replaced by CRLF in
CRLF : windows 環境下的換行符
LF : linux 環境下的換行符
就是說檔案中存在兩種環境的換行符, git 會自動替換 CRLF 為 LF, 是以提示警告
解決方案:
保留倉庫, 删除倉庫裡的檔案
GitHub 可以删除倉庫, 但是不能删除某一個檔案或者檔案夾
但是我們可以在本地建一個倉庫, 把他拉下來, 然後全删了, 再送出
emm, 雖然是有點笨, 但是對于菜鳥來說簡單易用就就行 hhh
相關 Git 學習文章
CSDN Git 科普文
配置密鑰 及 上傳本地倉庫
其他 Git 指令記錄
修改、送出、删除
git add index.php
# 添加index.php檔案到緩存區
git add .
# 添加所有改動過的檔案到緩存區
git add --all
# 添加所有檔案到緩存區
git commit
# 送出緩存區内的檔案(回車後需要鍵入描述:wq儲存退出)
git commit -m "描述"
# 送出緩存區内的檔案,并提供描述
git commit -am '描述'
# 将add和commit合為一步
git commit --amend -m 'xxx'
# 合并最後一次送出(用于反複修改)
git rm index.php
# 删除index.php檔案
git rm --cached index.php
# 将index.php檔案移出緩存區,但不删除( -r * 遞歸目錄)
git rm -f 1.html
# 将緩存區中的1.html檔案移出并删除
檢視
git status
# 檢視目前版本狀态(是否修改)
git diff
# 檢視所有添加到緩存區的變更(工作區與版本庫的差別)
git diff index.php
# 檢視工作區檔案和庫檔案差別
git diff --cached
# 檢視所有已添加到緩存區,但還未commit的變更(緩存區與版本庫的差別)
git log
# 檢視送出曆史
git log --oneline
# 以簡短的方式檢視送出日志
git reflog
# 行為日志,顯示所有送出,復原等..
git ls-files
# 顯示緩存區的所有檔案
回退 與 撤銷
git reset --hard HEAD
# 将目前版本重置為HEAD(通常用于merge失敗回退)
git reset --hard HEAD^ # 回退上一個版本
git reset --hard HEAD^^ # 回退上兩個版本
git reset --hard HEAD~n # 回退上n個版本
git reset --hard <commitid>
# 回退指定版本,commitid根據log擷取
git checkout --filename
# 在工作區撤銷檔案的修改
git checkout HEAD [filename]
# 撤回添加至緩存區的修改,不指定filename則撤回所有
分支操作
git pull origin master
# 擷取遠端分支master并merge到目前分支
git branch
# 顯示本地分支
git branch -a
# 顯示所有分支
git checkout 分支名/标簽名
# 切換到指定分支或标簽
git branch 分支名
# 建立分支
git branch -d 分支名
# 删除本地分支 -D 強制删除
遠端協作
git remote add <remote> <url>
# 添加遠端版本庫
git remote -v
# 檢視遠端版本庫資訊
git remote show <remote>
# 檢視指定遠端版本庫資訊
git remote remove <remote>
# 删除遠端remote連結
git remote rename <old> <new>
# 重命名遠端連結名
git pull <remote> <branch>
# 下載下傳代碼及快速合并
git push <remote> <branch>
# 上傳代碼及快速合并
git merge origin master
# 将本地的遠端庫合并
git fetch origin
# 将遠端庫擷取本地但不合并