天天看點

Git / GitHub 再學習_記錄總結 下載下傳安裝Git / 注冊GitHub配置Git 并 設定GitHub ssh密鑰 Git初步實作本地與遠端同步 Git 進階一. 工作區 與 版本庫( 暫緩區, 主分支 )二. 時光穿梭機三. 遠端倉庫四. 分支管理五. 标簽管理六. 自定義Git其他 Git 指令

文章目錄

  • 下載下傳安裝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公鑰

Git / GitHub 再學習_記錄總結 下載下傳安裝Git / 注冊GitHub配置Git 并 設定GitHub ssh密鑰 Git初步實作本地與遠端同步 Git 進階一. 工作區 與 版本庫( 暫緩區, 主分支 )二. 時光穿梭機三. 遠端倉庫四. 分支管理五. 标簽管理六. 自定義Git其他 Git 指令

然後到 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 / GitHub 再學習_記錄總結 下載下傳安裝Git / 注冊GitHub配置Git 并 設定GitHub ssh密鑰 Git初步實作本地與遠端同步 Git 進階一. 工作區 與 版本庫( 暫緩區, 主分支 )二. 時光穿梭機三. 遠端倉庫四. 分支管理五. 标簽管理六. 自定義Git其他 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
# 将遠端庫擷取本地但不合并