git config --
local
user.name
'xxx' 設定用戶名和郵箱
git config --
local
user.email
'wupeiqi@live.com'
1 [root@vultr test]# git log #顯示版本日誌 2 commit 8ea124605072a2e464b9844fb8d689a0d8a60c6f 3 Author: root <root@vultr.guest> 4 Date: Sun Jul 15 14:08:02 2018 +0000 5 6 有一個版本 7 8 commit ffd29f7565dd7f783aac711cd55b40be1b96fd65 9 Author: root <root@vultr.guest> 10 Date: Sun Jul 15 14:04:05 2018 +0000 11 12 第一次提交 13 [root@vultr test]# git log 14 commit 8ea124605072a2e464b9844fb8d689a0d8a60c6f 15 Author: root <root@vultr.guest> 16 Date: Sun Jul 15 14:08:02 2018 +0000 17 18 有一個版本 19 20 commit ffd29f7565dd7f783aac711cd55b40be1b96fd65 21 Author: root <root@vultr.guest> 22 Date: Sun Jul 15 14:04:05 2018 +0000 23 24 第一次提交 25 [root@vultr test]# ^C 26 [root@vultr test]# git reset --hard ffd29f7565dd7f783aac711cd55b40be1b96fd65 #回滾到目標版本id 27 HEAD is now at ffd29f7 第一次提交 28 [root@vultr test]# git reflog #回滾回去的方法 29 ffd29f7 HEAD@{0}: ffd29f7565dd7f783aac711cd55b40be1b96fd65: updating HEAD 30 8ea1246 HEAD@{1}: commit: 有一個版本 31 [root@vultr test]# git reset --hard 8ea1246 32 HEAD is now at 8ea1246 有一個版本
方案一:stashhtml
stash用於將工做區發生變化的全部文件獲取臨時存儲在「某個地方」,將工做區還原當前版本未操做前的狀態;stash還能夠將臨時存儲在「某個地方」的文件再次拿回到工做區。git
[root@vultr test]# touch view.py #新建一個文件 [root@vultr test]# git status # On branch master # Untracked files: # (use "git add <file>..." to include in what will be committed) # # view.py nothing added to commit but untracked files present (use "git add" to track) [root@vultr test]# git add . #git檢測到變化 [root@vultr test]# git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # new file: view.py # [root@vultr test]# git stash #保存到暫存區 Saved working directory and index state WIP on master: 8ea1246 有一個版本 HEAD is now at 8ea1246 有一個版本 [root@vultr test]# git status # On branch master nothing to commit (working directory clean) [root@vultr test]# vim a.py #修改一個bug YouCompleteMe unavailable: requires Vim 7.4.1578+. Press ENTER or type command to continue [root@vultr test]# git status # On branch master # Changed but not updated: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: a.py # no changes added to commit (use "git add" and/or "git commit -a") [root@vultr test]# git add . [root@vultr test]# git commit -m '修復bug' [master aa0bfdb] 修復bug Committer: root <root@vultr.guest> Your name and email address were configured automatically based on your username and hostname. Please check that they are accurate. You can suppress this message by setting them explicitly: git config --global user.name "Your Name" git config --global user.email you@example.com If the identity used for this commit is wrong, you can fix it with: git commit --amend --author='Your Name <you@example.com>' 1 files changed, 2 insertions(+), 0 deletions(-) [root@vultr test]# git stash pop #從新合併到一塊兒繼續編輯 # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # new file: view.py # Dropped refs/stash@{0} (011817eab1ddd2da8d4abe8393c0f9862567c2f1)
特別的:執行 git stash pop 命令時,可能會遇到衝突,由於在緊急修復bug的代碼和經過stash存儲在「某個地方」的代碼會有重合部分,因此執行 git stash pop 時候就會出現衝突,有衝突解決衝突便可。github
1 a. 原來內容: 2 from django.shortcuts import render,HttpResponse 3 4 def index(request): 5 return render(request,'index.html') 6 7 def africa(request): 8 return HttpResponse('非洲專區') 9 10 11 b. 開發到一半直播功能: 12 from django.shortcuts import render,HttpResponse 13 14 def index(request): 15 return render(request,'index.html') 16 17 def africa(request): 18 return HttpResponse('非洲專區') 19 20 21 def live(request): 22 print('開發到一半') 23 return HttpResponse('....') 24 25 26 c. 執行git stash,回到當前版本未修改狀態: 27 from django.shortcuts import render,HttpResponse 28 29 def index(request): 30 return render(request,'index.html') 31 32 def africa(request): 33 return HttpResponse('非洲專區') 34 35 d. 修復Bug並提交: 36 from django.shortcuts import render,HttpResponse 37 38 def index(request): 39 return render(request,'index.html') 40 41 def africa(request): 42 return HttpResponse('非洲xxxxx專區') 43 44 45 e. 繼續開發直播功能 git stash pop,此時會出現衝突: 46 MacBook-Pro-4:pondo wupeiqi$ git stash pop 47 Auto-merging app01/views.py 48 CONFLICT (content): Merge conflict in app01/views.py 49 50 表示app01/views.py存在衝突須要解決,此時文件內容爲: 51 52 from django.shortcuts import render,HttpResponse 53 54 def index(request): 55 return render(request,'index.html') 56 57 def africa(request): 58 <<<<<<< Updated upstream: # 修復Bug時更改的內容 59 return HttpResponse('非洲xxxx區') 60 ======= # 修復Bug前正在開發新功能時的內容 61 return HttpResponse('非洲專區') 62 63 def live(request): 64 print('剛開發到一半') 65 return HttpResponse('直播功能') 66 >>>>>>> Stashed changes 67 68 69 須要自行解決衝突,而後繼續開發,如: 70 71 from django.shortcuts import render,HttpResponse 72 73 def index(request): 74 return render(request,'index.html') 75 76 def africa(request): 77 78 return HttpResponse('非洲xxxx區') 79 80 def live(request): 81 print('剛開發到一半') 82 return HttpResponse('直播功能') 83 84 85 git stash pop 出現衝突
stash相關經常使用命令:django
方案二:branchvim
分支學習:branch稱爲分支,默認僅有一個名爲master的分支。通常開發新功能流程爲:開發新功能時會在分支dev上進行,開發完畢後再合併到master分支。緩存
通常流程示例(上圖)
學習參考上圖,小P也能夠按照着這樣的流程進行開發,若是遇到上文開發到通常須要臨時修復Bug的狀況,能夠按照下圖的流程進行:bash
1 MacBook-Pro-4:pondo wupeiqi$ git branch # 當前在master分支 2 * master 3 4 5 MacBook-Pro-4:pondo wupeiqi$ git branch dev # 建立dev分支用於開發新功能 6 7 MacBook-Pro-4:pondo wupeiqi$ git checkout dev # 切換到dev分支 8 Switched to branch 'dev' 9 10 MacBook-Pro-4:pondo wupeiqi$ vim app01/views.py # 開發新功能到一半,須要緊急修復Bug 11 12 MacBook-Pro-4:pondo wupeiqi$ git add . 13 14 MacBook-Pro-4:pondo wupeiqi$ git commit -m '新功能開發一半' 15 [dev b3ac2cb] 新功能開發一半 16 1 file changed, 2 insertions(+) 17 18 19 20 21 MacBook-Pro-4:pondo wupeiqi$ git checkout master # 切換回master分支 22 Switched to branch 'master' 23 24 MacBook-Pro-4:pondo wupeiqi$ git branch bug # 建立bug分支 25 26 MacBook-Pro-4:pondo wupeiqi$ git checkout bug # 切換到bug分支 27 Switched to branch 'bug' 28 29 MacBook-Pro-4:pondo wupeiqi$ vim pondo/settings.py # 修改bug 30 31 MacBook-Pro-4:pondo wupeiqi$ git add . # 提交bug 32 33 MacBook-Pro-4:pondo wupeiqi$ git commit -m '緊急修復bug' # 提交bug 34 [bug f42f386] 緊急修復bug 35 1 file changed, 1 insertion(+), 1 deletion(-) 36 37 38 MacBook-Pro-4:pondo wupeiqi$ git checkout master # 切換會master 39 Switched to branch 'master' 40 41 MacBook-Pro-4:pondo wupeiqi$ git merge bug # 將bug分支內容合併到master分支,表示bug修復完畢,能夠上線 42 Updating 0972f4b..f42f386 43 Fast-forward 44 pondo/settings.py | 2 +- 45 1 file changed, 1 insertion(+), 1 deletion(-) 46 47 48 49 50 MacBook-Pro-4:pondo wupeiqi$ git checkout dev # 切換到dev分支,繼續開發新功能 51 Switched to branch 'dev' 52 53 MacBook-Pro-4:pondo wupeiqi$ vim app01/views.py # 繼續開發其餘一半功能 54 55 MacBook-Pro-4:pondo wupeiqi$ git add . # 提交新功能 56 57 MacBook-Pro-4:pondo wupeiqi$ git commit -m '繼續開發完成' # 提交功能 58 [dev c0bfb27] 繼續開發完成 59 1 file changed, 1 insertion(+) 60 61 MacBook-Pro-4:pondo wupeiqi$ git checkout master # 切換回master分支 62 Switched to branch 'master' 63 64 MacBook-Pro-4:pondo wupeiqi$ git merge dev # 將dev分支合併到master分支 65 Merge made by the 'recursive' strategy. 66 app01/views.py | 3 +++ 67 1 file changed, 3 insertions(+)
注意:git merge 時也可能會出現衝突,解決衝突的方式上述stash相同,即:找到衝突文件,手動修改衝突並提交,此處再也不敖述。app
branch相關經常使用命令:ssh
在家裏,開發完畢部分功能將代碼推送到GitHub。ide
1 MacBook-Pro-4:pondo wupeiqi$ git remote add origin https://github.com/WuPeiqi/pondo.git # 爲地址起一個別名origin 2 MacBook-Pro-4:pondo wupeiqi$ git push origin master # 將本地master分支內容以及版本信息推送到GitHub 3 Username for 'https://github.com': # 輸入GitHub用戶名 4 Password for 'https://wupeiqi@github.com': # 輸入GitHub密碼 5 Counting objects: 2, done. 6 Delta compression using up to 4 threads. 7 Compressing objects: 100% (2/2), done. 8 Writing objects: 100% (2/2), 270 bytes | 0 bytes/s, done. 9 Total 2 (delta 1), reused 0 (delta 0) 10 remote: Resolving deltas: 100% (1/1), completed with 1 local object. 11 To https://github.com/WuPeiqi/pondo.git 12 634aac4..274f1e4 master -> master 13 MacBook-Pro-4:pondo wupeiqi$ git push origin dev # 將本地dev分支內容以及版本信息推送到GitHub 14 Counting objects: 3, done. 15 Delta compression using up to 4 threads. 16 Compressing objects: 100% (2/2), done. 17 Writing objects: 100% (3/3), 261 bytes | 0 bytes/s, done. 18 Total 3 (delta 1), reused 0 (delta 0) 19 remote: Resolving deltas: 100% (1/1), completed with 1 local object. 20 To https://github.com/WuPeiqi/pondo.git 21 274f1e4..50e2169 dev -> dev
在公司,新電腦第一次使用,須要將代碼從GitHub中獲取並繼續開發
1 MacBook-Pro-4:github wupeiqi$ git clone https://github.com/WuPeiqi/pondo.git # 將項目從GitHub中獲取 2 Cloning into 'pondo'... 3 remote: Counting objects: 31, done. 4 remote: Compressing objects: 100% (26/26), done. 5 remote: Total 31 (delta 2), reused 30 (delta 1), pack-reused 0 6 Unpacking objects: 100% (31/31), done. 7 MacBook-Pro-4:github wupeiqi$ cd pondo/ 8 MacBook-Pro-4:pondo wupeiqi$ git Branch # 默認獲取到得只有master分支 9 * master 10 MacBook-Pro-4:pondo wupeiqi$ git branch dev origin/dev # 建立dev分支且和遠程dev分支同步 11 Branch dev set up to track remote branch dev from origin. 12 MacBook-Pro-4:pondo wupeiqi$ git checkout dev # 切換到dev分支 13 Switched to branch 'dev' 14 15 MacBook-Pro-4:pondo wupeiqi$ vim app01/views.py # 繼續開發新功能 16 17 MacBook-Pro-4:pondo wupeiqi$ git add . # 添加文件到版本庫的暫存狀態 18 MacBook-Pro-4:pondo wupeiqi$ git commit -m '公司開發功能1' # 提交新功能到版本庫的分支 19 [dev 9281447] 公司開發功能1 20 1 file changed, 1 insertion(+), 1 deletion(-) 21 MacBook-Pro-4:pondo wupeiqi$ git push origin dev # 提交dev分支內容到遠程GitHub託管倉庫的dev分支 22 Username for 'https://github.com': wupeiqi 23 Password for 'https://wupeiqi@github.com': 24 Counting objects: 4, done. 25 Delta compression using up to 4 threads. 26 Compressing objects: 100% (4/4), done. 27 Writing objects: 100% (4/4), 427 bytes | 0 bytes/s, done. 28 Total 4 (delta 2), reused 0 (delta 0) 29 remote: Resolving deltas: 100% (2/2), completed with 2 local objects. 30 To https://github.com/WuPeiqi/pondo.git 31 50e2169..9281447 dev -> dev
在家裏,因爲白天在公司已經開發一部分功能並提交到GitHub,家裏電腦的代碼仍是昨晚的版本,因此須要從GitHub拉去最新代碼,而後繼續開發
在公司,因爲昨天晚上在家已經開發了一部分功能,在公司須要先把昨晚開發的功能從GitHub中拉取,並繼續開發。
MacBook-Pro-4:pondo wupeiqi$ git checkout dev # 切換到dev分支 MacBook-Pro-4:pondo wupeiqi$ 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/WuPeiqi/pondo * branch dev -> FETCH_HEAD 150d891..65b6604 dev -> origin/dev MacBook-Pro-4:pondo wupeiqi$ git merge origin/dev # 將版本庫的分支內容合併到工做區 Updating 150d891..65b6604 Fast-forward readme | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) MacBook-Pro-4:pondo wupeiqi$ vim app01/views.py # 繼續開發新功能 MacBook-Pro-4:pondo wupeiqi$ git add . # 添加文件到版本庫的暫存狀態 MacBook-Pro-4:pondo wupeiqi$ git commit -m 'xxxxxxxxxxx' # 提交新功能到版本庫的分支
久而久之,將Git和GitHub結合使用作到避免電腦損壞形成數據丟失以及多地開發的問題,上文執行過程當中執行 【git pull origin 分支】命令等同於【git fetch origin 分支】+ 【git merge origin/分支】,而且在執行過程當中可能會出現衝突,緣由是因爲本地代碼和獲取的最新代碼有重合部分,那麼就須要本身手動解決衝忽然後再繼續開發。
1. 配置文件
Git的配置文件有三個:
2. 用戶憑證
因爲Git和Github交互操做可能會很頻繁,那麼必定少了用戶受權的操做,爲了防止每次操做重複輸入用戶名和密碼,Git提供了兩種解決方法:
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/WuPeiqi/xxxx.git 格式地址。
指定用戶名和密碼: https://用戶名:密碼@github.com/wupeiqi/xxx.git