在進(jìn)行g(shù)it操作之前,首先得創(chuàng)建一個(gè)遠(yuǎn)程git倉(cāng)庫(kù)。由于你的本地Git倉(cāng)庫(kù)和遠(yuǎn)程Git倉(cāng)庫(kù)之間的傳輸是通過(guò)SSH加密的,所以,需要一點(diǎn)設(shè)置:
第一步: 創(chuàng)建SSH Key。在用戶主目錄下,看看有沒(méi)有.ssh目錄,如果有,再看看這個(gè)目錄下有沒(méi)有id_rsa和id_rsa.pub這兩個(gè)文件,如果已經(jīng)有了,可直接跳到下一步。如果沒(méi)有,打開(kāi)終端(Windows下打開(kāi)Git Bash),創(chuàng)建SSH Key:
$ ssh-keygen -t rsa -C "youremail@example.com"
你只要把郵件地址換成你git的郵件賬號(hào)就可以了,然后一路回車,使用默認(rèn)值就可以了,無(wú)須設(shè)置密碼。
如果一切順利的話,你就可以在根目錄下看到.ssh的目錄。里面有id_rsa和id_rsa.pub兩個(gè)文件,這兩個(gè)就是SSH Key的秘鑰對(duì),id_rsa是私鑰,不能泄露出去,id_rsa.pub是公鑰,可以告訴別人,一般是會(huì)將公鑰上傳到遠(yuǎn)程的git倉(cāng)庫(kù)。

第二步: 在遠(yuǎn)程git配置公鑰。
也就是將id_rsa.pub里的信息拷貝到SSH key的配置信息里即可。
這樣你才可以將你本地的代碼上傳到遠(yuǎn)程庫(kù),這里的私鑰對(duì)就是識(shí)別你的身份,確認(rèn)這里的提交是你進(jìn)行操作的。
一、將本地代碼提交到遠(yuǎn)程倉(cāng)庫(kù)。
如果遠(yuǎn)程已經(jīng)存在倉(cāng)庫(kù) 可以直接執(zhí)行g(shù)it clone +倉(cāng)庫(kù)地址
1. 首先得創(chuàng)建本地倉(cāng)庫(kù)。
可將項(xiàng)目拷貝到一個(gè)工程文件下,或直接在項(xiàng)目的主目錄,創(chuàng)建git倉(cāng)庫(kù)。
通過(guò)cd到文件目錄下,在終端執(zhí)行g(shù)it init,如果在已有的項(xiàng)目中存在了git倉(cāng)庫(kù),可先刪除相應(yīng)的git文件,再進(jìn)行創(chuàng)建。
git init
2. 關(guān)聯(lián)遠(yuǎn)程倉(cāng)庫(kù)。
$ git remote add origin git@github.com:michaelliao/learngit.git(此倉(cāng)庫(kù)地址,會(huì)在創(chuàng)建倉(cāng)庫(kù)的時(shí)候生成,直接拷貝過(guò)來(lái)即可)。
3. 關(guān)聯(lián)后,用git status查看倉(cāng)庫(kù)狀態(tài)。然后再執(zhí)行下面的操作。
git add .
git commit -m "提交說(shuō)明"
最后再執(zhí)行使用命令git push -u origin master第一次推送master分支的所有內(nèi)容;
git push -u origin master
當(dāng)你第一次使用Git的clone或者push命令連接GitHub時(shí),會(huì)得到一個(gè)警告:
The authenticity of host 'github.com (xx.xx.xx.xx)' can't be established.
RSA key fingerprint is xx.xx.xx.xx.xx.
Are you sure you want to continue connecting (yes/no)?
這是因?yàn)镚it使用SSH連接,而SSH連接在第一次驗(yàn)證GitHub服務(wù)器的Key時(shí),需要你確認(rèn)GitHub的Key的指紋信息是否真的來(lái)自GitHub的服務(wù)器,輸入yes回車即可。
查看遠(yuǎn)程倉(cāng)庫(kù)地址:
git remote -v
會(huì)得到下面的打印
origin git@gitlab.xxx.com.cn:xxx-folder/ios-app.git (fetch)
origin git@gitlab.xxx.com.cn:xxx-folder/ios-app.git (push)
倉(cāng)庫(kù)創(chuàng)建好之后,接下來(lái)就是開(kāi)發(fā)者用的最多的操作,基本是每天都會(huì)用到。
二、分支管理。
1. 創(chuàng)建分支
//從拉取遠(yuǎn)程分支到本地
git fetch origin remoteBranchName
git checkout -b branchName origin/remoteBranchName
//創(chuàng)建新的本地分支
git branch branchName //創(chuàng)建分支
如, git branch dev //創(chuàng)建dev分支
查詢本地綁定的遠(yuǎn)程分支:
git branch -vv
2. 切換分支。
git checkout -b dev_test //創(chuàng)建并切換到dev_test分支
Switched to a new branch 'dev_test'
git checkout 表示切換分支, -b 創(chuàng)建分支。相當(dāng)于下面兩條指令的合集。
git branch dev_test //創(chuàng)建分支
git checkout dev_test //切換分支
git branch 查看本地分支
git branch -a 查看所有分支
新版本的git建議使用 git switch命令來(lái)切換分支。
git switch dev //切換分支
git switch -c dev_home //創(chuàng)建并切換到dev_home分支
3 .刪除分支
a. 本地分支刪除
git branch -d dev_test //本地刪除分支,你當(dāng)前所處的分支不能是你要?jiǎng)h除的分支(dev_test)。
如果無(wú)法刪除終端會(huì)給出提示
error: The branch 'dev_search' is not fully merged.
If you are sure you want to delete it, run 'git branch -D dev_test'.
這時(shí)候你就可以執(zhí)行 git branch -D dev_test 強(qiáng)制刪除該分支。
b. 遠(yuǎn)程分支刪除
git push origin --delete dev_test //將要?jiǎng)h除的分支push到origin即可刪除。
另一種方式就是,
git push origin :dev_test(本地已刪除的分支名稱,注意冒號(hào)后需要一個(gè)空格)。
4. 分支重命名。
git branch -m oldBranchName newBranchName
如我想將dev_test分支改名為dev_home分支。
git branch -m dev_test dev_home。
三、提交合并代碼(stash、merge)
在每次提交代碼前,都要查看倉(cāng)庫(kù)狀態(tài) git status。
- stash 暫存
git status
git diff //查看變化
git stash save "臨時(shí)緩存"
git stash list //查看stash列表
git stash pop //恢復(fù)最近的一個(gè)stash
git stash pop stash@{1}//恢復(fù)指定的stash
git stash drop stash@{0} //移除第一個(gè)stash
git stash clear // 清除所有stash
git log //查看版本控制系統(tǒng)歷史記錄
commit 5c6ff84e9bcaad06d1c6ba7856487853d89b4fe1 (HEAD -> dev_search, origin/dev_search)
Merge: 4533a78def 7d3d9df828
Author: xxx001 <xxx001@pingan.com.cn>
Date: Sun Jan 19 15:19:09 2020 +0800
解決合并沖突提交代碼
commit 7d3d9df8288d84aa5fd85a0061fefebe18c9664b (dev)
Merge: b19d5c8c2c 4aee5d5a43
Author: xxx001 <xxx001@pingan.com.cn>
Date: Sun Jan 19 14:42:38 2020 +0800
Merge branch 'dev' of ssh://code.paic.com.cn/git/carowner-ios into dev
- add ,commit
$ git add . //將所有文件添加到暫存區(qū)(stage),
$ git commit -m "首頁(yè)彈出窗bug fix"。 // 執(zhí)行g(shù)it commit就可以一次性把暫存區(qū)的所有修改提交到分支。
修改commit提交的注釋
修改最后一次的提交注釋,這個(gè)最常見(jiàn)
git commit --amend 【第一行出現(xiàn)注釋界面】
i //進(jìn)入編輯界面
修改某次的注釋
git rebase -i HEAD~2
四、版本回退
如果代碼已經(jīng)commit過(guò),但是想去掉本次commit的狀態(tài),但又不想去掉最新本地修改的代碼,可以執(zhí)行
git reset origin/branchName //將本地代碼狀態(tài)回滾到commit之前,本地代碼還在,但需要重新add commit
有時(shí)候想修改commit的描述說(shuō)明也可用這種方法。
1 reset方式 (通過(guò)reset的方式,把head指針指向之前的某次提交,reset之后,后面的版本就找不到了)
每次提交代碼都會(huì)有一個(gè)commitId:也就是提交記錄id,所有的提交都可以根據(jù)提交記錄id找到。
git reset --hard HEAD //回到當(dāng)前提交的版本, 也就是上一次版本。
git reset --hard HEAD^ //回到上一次提交記錄。
git reset --hard HEAD~100 //回到上一百個(gè)版本。
git reset --hard commitId //回到對(duì)應(yīng)的commitId對(duì)應(yīng)的版本。
強(qiáng)制push到對(duì)應(yīng)的遠(yuǎn)程分支(如提交到develop分支)
git push -f -u origin develop
2.revert
這種方式不會(huì)把版本往前回退,而是撤銷某一次提交,某次commitId之前和之后的提交都會(huì)保留。只是撤銷某次提交,并生成一個(gè)新的commit。所以,你只需要讓別人更新一下代碼就可以了,你之前操作的提交記錄也會(huì)被保留下來(lái)
操作步驟如下:
1、找到你誤提交之前的版本號(hào)
2、git revert -n 版本號(hào)
3、git commit -m xxxx 提交
4、git push 推送到遠(yuǎn)程