問題一:配置完本地的git後,每次提交都須要我輸入密碼? NND php
解決辦法:java
再次用 ssh-keygen -t rsa -C "your_email@example.com" 生成密鑰
python
其中,問你是否覆蓋 輸入y —— Overwrite (y/n)? y 覆蓋以前的id-rsagit
其他所有回車,千萬不要在Enter passphrase (empty for no passphrase)輸入密碼了。github
最後,在github的Settings的SSH and GPG keys中,點擊new SSH keys,把 .ssh目錄下的id-rsa.pub的內容複製到key這一欄。api
完成!!ruby
Git的遠程倉庫:app
一: 把本地的項目上傳到Git新建的項目中.,並創建關聯關係!ssh
註冊一個github 新建一個Repositoryspa
在本地建立一個git項目 git init 而後新增一個文件(沒有任何文件的空項目在push到遠程庫時會提示錯)
而後使用git add 和 git commit -m
而後在本地倉庫下執行: git remote add origin git@github.com:yourProjectName/Name.git
最後在執行push命令: git push -u origin master
把本地庫的內容推送到遠程,用git push
命令,其實是把當前分支master
推送到遠程。
因爲遠程庫是空的,咱們第一次推送master
分支時,加上了-u
參數,Git不但會把本地的master
分支內容推送的遠程新的master
分支,還會把本地的master
分支和遠程的master
分支關聯起來,在之後的推送或者拉取時就能夠簡化命令。
wangjiaingdeAir:learnGit wangjianqing$ git remote add origin1 git@github.com:FrankWangJQ/learnGIt.git
wangjiaingdeAir:learnGit wangjianqing$ git push -u origin master
To github.com:FrankWangJQ/Lonch.git
! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to 'git@github.com:FrankWangJQ/Lonch.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
wangjiaingdeAir:learnGit wangjianqing$ git push -u origin1 master
Counting objects: 3, done.
Writing objects: 100% (3/3), 219 bytes | 219.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To github.com:FrankWangJQ/learnGIt.git
* [new branch] master -> master
Branch 'master' set up to track remote branch 'master' from 'origin1'.
以後本地的learnGit項目再有任何改動,只要執行完提交, 而後直接使用命令:git push origin master 就能夠了.
二:把遠程已經存在的項目克隆到本地並創建關聯
在Git目錄中執行
git clone git@github.com:FrankWangJQ/Lonch.git
會在該目錄中生成一個新新項目 Lonch 並把項目中的文件克隆到本地
wangjiaingdeAir:PycharmProjects wangjianqing$ git clone git@github.com:FrankWangJQ/Lonch.git
Cloning into 'Lonch'...
remote: Enumerating objects: 6, done.
remote: Total 6 (delta 0), reused 0 (delta 0), pack-reused 6
Receiving objects: 100% (6/6), done.
wangjiaingdeAir:PycharmProjects wangjianqing$ ls
Fastmonkey YunZhens_UI-master geekbangpython
Lonch YunZhens_api-master learnGit
UI_demo_python dubboApi_testDemo
UI_java_wechat dubboDemo
wangjiaingdeAir:PycharmProjects wangjianqing$ cd Lonch/
wangjiaingdeAir:Lonch wangjianqing$ ls
README.md
Git的分支管理:
開啓一條新的分支 dev 開發分支:
建立分支:切換分支:git checkout -b dev 建立並切換分支git branch <name>git checkout <name>
查看當前項目的分支:
$ git branch * dev master
此時在項目中提交的任何修改 在push後都會提交到遠程的分支庫中, 由於當前的HEAD 指向的 dev分支. dev分支的修改不會影響到主幹代碼
修改完成後, 能夠切換回原來的主幹 $ git checkout master
這時,你以前的修改是不會在master中展現的 這時候再把分支中的修改合併至主幹才能生效: $ git merge dev
合併完成後能夠將原有分支刪除 $ git branch -d dev
若是在git merge dev 過程當中存在衝突 (好比你在開發dev的過程當中修改了readMe,其餘人在主幹上也修改了readMe),此時用主幹去合併dev時會提示衝突!
可使用 $ git status 命令查看衝突內容:
手動修改後 提交代碼 而後執行合併操做
使用:$ git log --graph --pretty=oneline --abbrev-commit 查看分支合併圖
一般,合併分支時,若是可能,Git會用Fast forward
模式,但這種模式下,刪除分支後,會丟掉分支信息。
若是要強制禁用Fast forward
模式,Git就會在merge時生成一個新的commit,這樣,從分支歷史上就能夠看出分支信息。
合併分支時,加上--no-ff
參數就能夠用普通模式合併,合併後的歷史有分支,能看出來曾經作過合併,而fast forward
合併就看不出來曾經作過合併。
git merge --no-ff -m "merge with no-ff" dev
由於本次合併要建立一個新的commit,因此加上-m
參數,把commit描述寫進去
修復bug臨時建立分支:
修復bug時,咱們會經過建立新的bug分支進行修復,而後合併,最後刪除;
當手頭工做沒有完成時,須要先
$ git stash 將現有已經完成的部分開發工做保存起來, 而後切換到master分支 在master分支基礎上建立bug分支,
修改完bug後 合併到master分支; 此時須要跳轉到以前開發時的分支上 $ git stash list 查看stash狀態(可能有多個);而後你想回復到哪一個
$ git stash apply stash@{0}
另外一種方式是用 git stash pop
,恢復的同時把stash內容也刪了
若是要丟棄一個沒有被合併過的分支,能夠經過git branch -D <name>
強行刪除
開發過程當中分支使用流程通常是
首先,能夠試圖用git push origin <branch-name>
推送本身的修改;
若是推送失敗,則由於遠程分支比你的本地更新,須要先用git pull
試圖合併;
若是合併有衝突,則解決衝突,並在本地提交;
沒有衝突或者解決掉衝突後,再用git push origin <branch-name>
推送就能成功!
若是git pull
提示no tracking information
,則說明本地分支和遠程分支的連接關係沒有建立,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>
。
參考資料: https://www.liaoxuefeng.com/wiki/896043488029600/900375748016320
3、標籤管理
命令git tag <tagname>
用於新建一個標籤,默認爲HEAD
,也能夠指定一個commit id;
命令git tag -a <tagname> -m "blablabla..."
能夠指定標籤信息;
命令git tag
能夠查看全部標籤。
命令git push origin <tagname>
能夠推送一個本地標籤;
命令git push origin --tags
能夠推送所有未推送過的本地標籤;
命令git tag -d <tagname>
能夠刪除一個本地標籤;
命令git push origin :refs/tags/<tagname>
能夠刪除一個遠程標籤