第1章 git介紹html
1.1 參數:python
第2章 git管理一個項目git
2.1 圖示github
2.2 cd /項目路徑sql
2.3 git config --globle user.email "郵箱地址"vim
2.4 git confgi --globle user.name 'xiaodong'緩存
2.5 git initapp
2.6 git logssh
2.7 git statuside
2.8 git commit -m '描述信息'
2.9 git log
2.10 git add .
第3章 項目回滾
3.1 git reset --hard '惟一標識'
3.2 git reflog
3.3 例:完整項目管理
第4章 git 進階(開發未完成時)
4.1 statsh
4.2 git stash
4.3 例:
4.4 git stash pop
4.5 git stash list
4.6 git stash clear
4.7 git stash pop
4.8 git stash apply
4.9 git stash drop
第5章 分支
5.1 介紹
5.2 git branch
5.3 git branch dev
5.4 git checkout dev
5.5 git merage
5.6 git branch -d debug
5.7 實戰:
第6章 github應用
6.1 上傳下載github命令
6.2 實戰GitHub
6.3 查看合併信息
第7章 協同開發
7.1 合做者
7.2 組織
7.3 忽略合併某文件
7.4 協同開發過程
第8章 用戶憑證
8.1 祕鑰
8.2 密碼
8.3 相關操做:
8.4 補充版本命令
8.5 git發佈
介紹:幫你管理版本的工具
地址:https://git-scm.com
$ git
usage: git [--version] [--help] [-C <path>] [-c name=value]
[--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
[-p | --paginate | --no-pager] [--no-replace-objects] [--bare]
[--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
<command> [<args>]
These are common Git commands used in various situations:
start a working area (see also: git help tutorial)
clone Clone a repository into a new directory
init Create an empty Git repository or reinitialize an existing one
work on the current change (see also: git help everyday)
add Add file contents to the index
mv Move or rename a file, a directory, or a symlink
reset Reset current HEAD to the specified state
rm Remove files from the working tree and from the index
examine the history and state (see also: git help revisions)
bisect Use binary search to find the commit that introduced a bug
grep Print lines matching a pattern
log Show commit logs
show Show various types of objects
status Show the working tree status
grow, mark and tweak your common history
branch List, create, or delete branches
checkout Switch branches or restore working tree files
commit Record changes to the repository
diff Show changes between commits, commit and working tree, etc
merge Join two or more development histories together
rebase Reapply commits on top of another base tip
tag Create, list, delete or verify a tag object signed with GPG
collaborate (see also: git help workflows)
fetch Download objects and refs from another repository
pull Fetch from and integrate with another repository or a local branch
push Update remote refs along with associated objects
Git把管理的文件分爲了兩個區域四個狀態
l 工做區:當前開發程序所在目錄稱爲工做區,即:工做開發都是在該目錄,該區域的文件會有狀態的變化且狀態由git自動檢測,若是程序中文件作任何操做(增、刪、改),文件狀態均會被檢測到,可使用 【git status】命令查看。
l 版本庫:工做區檢測到有文件發生變化,那麼意味着較上一個版本以後對程序進行了修改,修改完成以後,能夠當作下一版本進行提交,那麼就是執行 【git add .】 將全部文件提交到暫存區,而後再執行【git commit -m '又一個版本'】提交到版本庫的分支便可,以後可使用【git log】命令查看版本記錄
解釋:添加郵箱地址
解釋:設置master管理名稱
解釋:管理記錄當前代碼狀態
解釋:查看當前保存版本
解釋:查看修改狀態
解釋:添加描述信息要寫詳細,提交代碼
查看當前版本以前保存版本,
解釋:
新增全部新增功能
亦可:
git add 文件名
添加新增功能文件
git commit -m '新增功能'
工做區:當前開發程序所在目錄稱爲工做區,即:工做開發都是在該目錄,該區域的文件會有狀態的變化且狀態由git自動檢測,若是程序中文件作任何操做(增、刪、改),文件狀態均會被檢測到,可使用【git status】命令查看。
解釋:回滾項目
解釋:查看所有項目,包含被回滾的項目
例:
git reset --heart 5ad460f
$ git status # 查看當前git狀態
On branch master
Initial commit
Untracked files:
(use "git add <file>..." to include in what will be committed)
.idea/
app01/
db.sqlite3
manage.py
pondo/
readme
templates/
nothing added to commit but untracked files present (use "git add" to track)
$ git add . # 添加當前目錄下全部文件到版本庫
$ git commit -m '第一次提交' # 提交到版本庫,並填寫版本說明,以便之後回滾。
[master (root-commit) df47fe4] 第一次提交
files changed, 879 insertions(+)
create mode 100644 .idea/dictionaries/maple.xml
create mode 100644 .idea/encodings.xml
create mode 100644 .idea/inspectionProfiles/profiles_settings.xml
解釋:stash用於將工做區發生變化的全部文件獲取臨時存儲在「某個地方」,將工做區還原當前版本未操做前的狀態;stash還能夠將臨時存儲在「某
解釋:
stash:{詞義}隱藏
隱藏爲開發玩的功能,修改之前的功能bug
$ vim app01/views.py # 開發直播功能,剛開發到一半
$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: app01/views.py
no changes added to commit (use "git add" and/or "git commit -a")
$ git stash # 將開發到一半的直播功能,臨時存儲到「某個地方」
Saved working directory and index state WIP on master: 0972f4b 非洲專區上線
HEAD is now at 0972f4b 非洲專區上線
$ git status # 工做區回到當前版本未作任何操做前
On branch master
nothing to commit, working tree clean
$ vim pondo/settings.py # 緊急修復bug
$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: pondo/settings.py
no changes added to commit (use "git add" and/or "git commit -a")
$ git add . # 添加到修改bug的代碼到暫存狀態
$ git commit -m '緊急修復bug' # 提交修復Bug的代碼到分支
[master 1300d33] 緊急修復bug
file changed, 1 insertion(+)
$ git stash pop # 將開發到一半的直播功能從「某個地方」再次拿會工做區繼續開發
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: app01/views.py
no changes added to commit (use "git add" and/or "git commit -a")
Dropped refs/stash@{0} (059d78ca8fa204f9559bd3ce0ae76235969b4301)
解釋:恢復未開發完成的功能
注意:
特別的:執行 git stash pop 命令時,可能會遇到衝突,由於在緊急修復bug的代碼和經過stash存儲在「某個地方」的代碼會有重合部分,因此執行 git stash pop 時候就會出現衝突,有衝突解決衝突便可。
解釋:查看‘某個地方’存儲的全部記錄
解釋:清空‘某個地方’
解釋:將第一個記錄從‘某個地方’從新拿到工做區(可能引發衝突)
編號,將指定編號記錄從‘某個地方’重新拿到工做區(可能有衝突)
解釋:編號,刪除指定編號的記錄
branch稱爲分支,默認僅有一個名爲master的分支。通常開發新功能流程爲:開發新功能時會在分支dev上進行,開發完畢後再合併到master分支
查看全部分支
建立新的分支
切換分支
合併分支:
git checkout master (先切換到master分支)
git merage dev (將開發完成的dev分支合併到master)
例:
$ git branch dev # 建立新分支,即:拷貝一份當前所在分支代碼到新分支
$ git checkout dev # 切換到dev分支
$ vim app01/views.py # 開發功能
$ git status # 查看狀態,即:在dev分支修改了app01/views.py文件
On branch dev
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: app01/views.py
no changes added to commit (use "git add" and/or "git commit -a")
$ git add . # 將修改文件添加到版本庫的暫存區
$ git commit -m '新功能開發完畢' # 將暫存區的內容提交到當前所在分支,即:dev分支
[dev 32b40cd] 新功能開發完畢
file changed, 2 insertions(+)
$ git checkout master # 切換回master分支
Switched to branch 'master'
$ git merge dev # 將dev分支內容合併到master分支
Updating 0972f4b..32b40cd
Fast-forward
app01/views.py | 2 ++
file changed, 2 insertions(+)
刪除debug分支
線上出現BUG,如何操做?
l 保存當前的修改,切換到master分支,建立debug分支,再切換到debug分支上進行代碼的修改,
l 修改完成以後,提交版本
l 奇幻到master分支,將debug分支上的代碼合併過來,把debug分支刪除。
$ git branch # 當前在master分支
* master
$ git branch dev # 建立dev分支用於開發新功能
$ git checkout dev # 切換到dev分支
Switched to branch 'dev'
$ vim app01/views.py # 開發新功能到一半,須要緊急修復Bug
$ git add .
$ git commit -m '新功能開發一半'
[dev b3ac2cb] 新功能開發一半
file changed, 2 insertions(+)
$ git checkout master # 切換回master分支
Switched to branch 'master'
$ git branch bug # 建立bug分支
$ git checkout bug # 切換到bug分支
Switched to branch 'bug'
$ vim pondo/settings.py # 修改bug
$ git add . # 提交bug
$ git commit -m '緊急修復bug' # 提交bug
[bug f42f386] 緊急修復bug
file changed, 1 insertion(+), 1 deletion(-)
$ git checkout master # 切換會master
Switched to branch 'master'
$ git merge bug # 將bug分支內容合併到master分支,表示bug修復完畢,能夠上線
Updating 0972f4b..f42f386
Fast-forward
pondo/settings.py | 2 +-
file changed, 1 insertion(+), 1 deletion(-)
$ git checkout dev # 切換到dev分支,繼續開發新功能
Switched to branch 'dev'
$ vim app01/views.py # 繼續開發其餘一半功能
$ git add . # 提交新功能
$ git commit -m '繼續開發完成' # 提交功能
[dev c0bfb27] 繼續開發完成
file changed, 1 insertion(+)
$ git checkout master # 切換回master分支
Switched to branch 'master'
$ git merge dev # 將dev分支合併到master分支
Merge made by the 'recursive' strategy.
app01/views.py | 3 +++
file changed, 3 insertions(+)
說明:git能夠是用該URL進行向遠程推送版本信息或獲取版本信息
git remote add origin https://github.com/maple-shaw/pondo.git # 爲地址起一個別名origin
git push origin master # 將本地master分支內容以及版本信息推送到GitHub
git push origin dev # 將本地dev分支內容以及版本信息推送到GitHub
git clone https://github.com/maple-shaw/pondo.git # 將項目從GitHub中獲取
git branch dev origin/dev # 建立dev分支且和遠程dev分支同步
git push origin dev # 提交dev分支內容到遠程GitHub託管倉庫的dev分支
在家裏,小P開發完畢部分功能將代碼推送到GitHub。
$ git remote add origin https://github.com/maple-shaw/pondo.git # 爲地址起一個別名origin
$ git push origin master # 將本地master分支內容以及版本信息推送到GitHub
Username for 'https://github.com': # 輸入GitHub用戶名
Password for 'https://maple-shaw@github.com': # 輸入GitHub密碼
Counting objects: 2, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 270 bytes | 0 bytes/s, done.
Total 2 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To https://github.com/maple-shaw/pondo.git
634aac4..274f1e4 master -> master
$ git push origin dev # 將本地dev分支內容以及版本信息推送到GitHub
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 261 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To https://github.com/maple-shaw/pondo.git
274f1e4..50e2169 dev -> dev
在公司,新電腦第一次使用,須要將代碼從GitHub中獲取並繼續開發,開發完事下班就下班回家。
$ git clone https://github.com/maple-shaw/pondo.git # 將項目從GitHub中獲取
Cloning into 'pondo'...
remote: Counting objects: 31, done.
remote: Compressing objects: 100% (26/26), done.
remote: Total 31 (delta 2), reused 30 (delta 1), pack-reused 0
Unpacking objects: 100% (31/31), done.
$ cd pondo/
$ git Branch # 默認獲取到得只有master分支
* master
$ git branch dev origin/dev # 建立dev分支且和遠程dev分支同步
Branch dev set up to track remote branch dev from origin.
$ git checkout dev # 切換到dev分支
Switched to branch 'dev'
$ vim app01/views.py # 繼續開發新功能
$ git add . # 添加文件到版本庫的暫存狀態
$ git commit -m '公司開發功能1' # 提交新功能到版本庫的分支
[dev 9281447] 公司開發功能1
file changed, 1 insertion(+), 1 deletion(-)
$ git push origin dev # 提交dev分支內容到遠程GitHub託管倉庫的dev分支
Username for 'https://github.com': maple
Password for 'https://maple-shaw@github.com':
Counting objects: 4, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 427 bytes | 0 bytes/s, done.
Total 4 (delta 2), reused 0 (delta 0)
remote: Resolving deltas: 100% (2/2), completed with 2 local objects.
To https://github.com/maple-shaw/pondo.git
50e2169..9281447 dev -> dev
在家裏,因爲白天在公司已經開發一部分功能並提交到GitHub,家裏電腦的代碼仍是昨晚的版本,因此須要從GitHub拉去最新代碼,而後繼續開發。
$ git checkout dev # 切換到dev分支
Already on 'dev'
$ git pull origin dev # 從遠程GitHub倉庫獲取dev分支最新內容,併合併到本地
remote: Counting objects: 4, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 4 (delta 2), reused 4 (delta 2), pack-reused 0
Unpacking objects: 100% (4/4), done.
From https://github.com/maple/pondo
* branch dev -> FETCH_HEAD
50e2169..9281447 dev -> origin/dev
Updating 50e2169..9281447
Fast-forward
app01/views.py | 2 +-
file changed, 1 insertion(+), 1 deletion(-)
$ vim app01/views.py # 繼續開發新功能
$ git add . # 添加文件到版本庫的暫存狀態
$ git commit -m '家裏開發功能1' # 提交新功能到版本庫的分支
在公司,因爲昨天晚上在家已經開發了一部分功能,在公司須要先把昨晚開發的功能從GitHub中拉取,並繼續開發。
$ git checkout dev # 切換到dev分支
$ git fetch origin dev # 從GitHub倉庫獲取dev分支最新內容到版本庫的分支
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (1/1), done.
remote: Total 3 (delta 1), reused 3 (delta 1), pack-reused 0
Unpacking objects: 100% (3/3), done.
From https://github.com/maple-shaw/pondo
* branch dev -> FETCH_HEAD
150d891..65b6604 dev -> origin/dev
$ git merge origin/dev # 將版本庫的分支內容合併到工做區
Updating 150d891..65b6604
Fast-forward
readme | 5 ++++-
file changed, 4 insertions(+), 1 deletion(-)
$ vim app01/views.py # 繼續開發新功能
$ git add . # 添加文件到版本庫的暫存狀態
$ git commit -m 'xxxxxxxxxxx' # 提交新功能到版本庫的分支
久而久之,將Git和GitHub結合使用作到避免電腦損壞形成數據丟失以及多地開發的問題,上文執行過程當中執行【git pull origin 分支】命令等同於【git fetch origin 分支】+ 【git merge origin/分支】,而且在執行過程當中可能會出現衝突,緣由是因爲本地代碼和獲取的最新代碼有重合部分,那麼就須要本身手動解決衝忽然後再繼續開發。
協同開發通常有兩種方式:
將其餘用戶添加到倉庫合做者中以後,該用戶就具備向當前倉庫提交代碼。
建立一個組織,而後再該組織下能夠建立多個項目,組內成員能夠向組內全部項目提交代碼。PS:也能夠對某個項目指定合做者
vim gitignore
#將想忽略的文件名添加進來
git add.
git commit -m '添加忽略'
· 建立程序
o 用戶A建立程序,提交到GitHub
o 用戶B克隆項目
o 用戶C克隆項目
· 開發功能
o 用戶A開發功能1
o 用戶B開發功能2
o 用戶C開發功能3
· 提交
o 用戶A提交功能1,並push(A用戶手速快,先提交。)
o
用戶B提交功能2,沒法push,由於GitHub上已經有其餘人提交的新代碼。
解決方法:從GitHub上獲取最新代碼併合併到本地,提交本身開發的功能2。
o
用戶C提交功能3,沒法push,沒法提交,由於GitHub上已經有其餘人提交的新代碼。
解決方法:從GitHub上獲取最新代碼併合併到本地,提交本身開發的功能3。
· 獲取最新代碼
o 用戶A獲取最新代碼
o 用戶B獲取最新代碼
o 用戶C獲取最新代碼
在上面紅色標註的解決方法位置能夠有三種方式操做,三者均可以完成合並並提交新功能,可是日誌記錄會有差別,如:前二者版本記錄中會出現合併,而第三種能夠保證版本記錄乾淨整潔。
o 先 git pull origin master 而後 git push origin master
o 先 git fetch origin master 而後 git merge origin/master 再 git push origin master
因爲Git和Github交互操做可能會很頻繁,那麼必定少不了用戶受權的操做,爲了防止每次操做重複輸入用戶名和密碼,Git提供了兩種解決方法:
首先建立一對祕鑰 ssh-keygen -t rsa,而後將 id_rsa.pub (公鑰)內容拷貝到github中,往後操做無需再輸入用戶名和密碼。
注意:這種方式須要使用GIt中 git@github.com:maple-shaw/xxxxx.git 格式地址。
Https訪問git時,避免每次操做須要輸入用戶名和密碼,能夠在配置文件中添加以下配置項:
[credential]
helper = store/cache/第三方
store:
表示將用戶名和密碼保存在硬盤上
第一次輸入過用戶名和密碼以後,用戶名和密碼就會保存在當前用戶根目錄的 .git-credentials 文件中,內容格式爲:https://用戶名:密碼@github.com
自動添加配置命令:git config credential.helper store
cache:
表示將用戶名和密碼保存在緩存中
第一次輸入過用戶名和密碼以後,用戶名和密碼就會保存在緩存中,默認超時時間是 900 秒,緩存相關文件保存在當前用戶根目錄的 git-credential-cache 中
自動添加配置命令:
git config credential.helper cache
git config credential.helper 'cache --timeout=300'
清除緩存:git credential-cache exit
指定超時:
[credential]
helper = cache --timeout=300
注意:這種方式須要使用GIt中 https://github.com/maple-shaw/xxxx.git 格式地址。
git tag -a v1.0 -m '版本介紹' 本地建立Tag
git show v1.0 查看
git tags -n 查看本地Tag
git tag -l 'v1.4.2.*' 查看本地Tag,模糊匹配
git tag -d v1.0 刪除Tag
git push origin :refs/tags/v0.2 更新遠程tag
git checkout v.10 切換tag
git fetch origin tag V1.2
git push origin --tags
git pull origin --tags
git clone -b v0.1
基本管理
git add .
git commit -m 'xxx'
git push origin master
git pull origin master
版本控制
本地建立版本信息
git tag -a v1.1 -m 'xxx'
把本地版本推送到遠程
git push origin --tags
下載指定版本:
git clone -b v1.1 https://github.com/wangxiaodong-sir/jesion.git
2.3 git config --globle user.email "郵箱地址"