Git遠程倉庫及分支管理

問題一:配置完本地的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>強行刪除

 

開發過程當中分支使用流程通常是

  1. 首先,能夠試圖用git push origin <branch-name>推送本身的修改;

  2. 若是推送失敗,則由於遠程分支比你的本地更新,須要先用git pull試圖合併;

  3. 若是合併有衝突,則解決衝突,並在本地提交;

  4. 沒有衝突或者解決掉衝突後,再用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>能夠刪除一個遠程標籤

相關文章
相關標籤/搜索