目錄
一,通過(guò)終端創(chuàng)建項(xiàng)目
二倍靡,常見(jiàn)問(wèn)題
三猴伶,參考資料
說(shuō)明:Mac上使用,持續(xù)更新塌西;
一他挎,通過(guò)終端創(chuàng)建項(xiàng)目
1.1,生成電腦的公鑰捡需、私鑰(注意:默認(rèn)私鑰办桨、公鑰的名稱分別為:id_rsa,id_rsa.pub,電腦存在多個(gè)私鑰、公鑰的情況下站辉,使用的時(shí)候不要用錯(cuò)了)呢撞;
生成ssh key的時(shí)候提示填寫密碼(2次),注意這里是提示設(shè)置密碼饰剥,這個(gè)密碼是與遠(yuǎn)程倉(cāng)庫(kù)交互 Pull殊霞、Push 的時(shí)候要填寫的密碼,直接回車不設(shè)置汰蓉,以后每次上傳下拉代碼就不需要填寫密碼绷蹲;注意不是電腦密碼,也不是遠(yuǎn)程倉(cāng)庫(kù)賬戶的密碼顾孽;
添加公鑰到GitHub遠(yuǎn)程倉(cāng)庫(kù):
添加公鑰完成(鑰匙為黑色)
驗(yàn)證公鑰是否設(shè)置成功:
$ ssh -v git@github.com -i ssh_rsa
出現(xiàn)以下內(nèi)容祝钢,表示使用的秘鑰不匹配,即:GitHub上填寫的公鑰是錯(cuò)誤的岩齿,需要添加正確的公鑰太颤;
…………………
debug1: Authentications that can continue: publickey
debug1: Trying private key: /Users/freevision/.ssh/id_dsa
debug1: Trying private key: /Users/freevision/.ssh/id_ecdsa
debug1: Trying private key: /Users/freevision/.ssh/id_ed25519
debug1: Trying private key: /Users/freevision/.ssh/id_xmss
debug1: No more authentication methods to try.
git@github.com: Permission denied (publickey).
出現(xiàn)以下內(nèi)容,表示GitHub秘鑰/公鑰配置成功
…………………………….
Hi GitHubUserName xxxx/test2! You've successfully authenticated, but GitHub does not provide shell access.
debug1: channel 0: free: client-session, nchannels 1
Connection to github.com closed.
Transferred: sent 3008, received 2256 bytes, in 0.7 seconds
Bytes per second: sent 4505.1, received 3378.8
debug1: Exit status 1
文件更改/上傳文件之后盹沈,鑰匙變?yōu)榫G色龄章;
1.2,創(chuàng)建本地倉(cāng)庫(kù)乞封;
1.3做裙,拉取、上傳代碼肃晚;
注意區(qū)分:倉(cāng)庫(kù)名和文件名锚贱;
$?git push -u test2 master
1.4,常用指令关串;
一般來(lái)說(shuō)拧廊,日常使用只要記住下圖6個(gè)命令监徘,就可以了。但是熟練使用吧碾,恐怕要記住60~100個(gè)命令凰盔。
下面是我整理的常用 Git 命令清單。幾個(gè)專用名詞的譯名如下倦春。
Workspace:工作區(qū)
Index / Stage:暫存區(qū)
Repository:倉(cāng)庫(kù)區(qū)(或本地倉(cāng)庫(kù))
Remote:遠(yuǎn)程倉(cāng)庫(kù)
生成密鑰
$?ssh-keygen -t rsa -C "email address"
配置
Git的設(shè)置文件為.gitconfig户敬,它可以在用戶主目錄下(全局配置),也可以在項(xiàng)目目錄下(項(xiàng)目配置)睁本。
// 顯示當(dāng)前Git 配置
$?git config --list
// 編輯Git配置文件
$?git config -e --global
// 配置提交文件時(shí)的用戶信息
$?git config --globaluser.name"name"
$?git config --globaluser.email"email address"
新建一個(gè)倉(cāng)庫(kù)
// 在當(dāng)前目錄新建一個(gè) Git 倉(cāng)庫(kù)
$?git init
//新建一個(gè)倉(cāng)庫(kù)尿庐,將其初始化為Git代碼庫(kù)
$ git init [project-name]
// 下載一個(gè)項(xiàng)目和他的整個(gè)代碼歷史?(地址:可以http也可以ssh)
$?git clone [url]
添加/刪除文件
// 添加指定文件到暫存區(qū)
$ git add filename1 filename2 .....?
// 添加指定目錄及其子目錄到暫存區(qū) ? ?
$ git add dir
// 刪除工作區(qū)文件,并且將這次刪除放入暫存區(qū)
$?git rm filename1 filename2 .....
// 停止追蹤指定文件呢堰,但該文件會(huì)保留在工作區(qū)
$?git rm --cached filename
代碼提交
// 提交暫存區(qū)到倉(cāng)庫(kù)區(qū)
$?git commit -m"message"
// 提交暫存區(qū)的指定文件到倉(cāng)庫(kù)區(qū)
$?git commit? filename1 filename2 .....? -m"message"
// 提交工作區(qū)自上次commit之后的變化抄瑟,直接到倉(cāng)庫(kù)區(qū)
$?git commit -a
// 提交時(shí)顯示所有diff信息
$?git commit -v
// 使用一次新的commit,替代上一次提交枉疼,如果代碼沒(méi)有任何新變化锐借,則用來(lái)改寫上一次commit的提交信息
$?git commit --amend -m"message"
// 重做上一次commit,并包括指定文件的新變化
$?git commit --amend filename1 filename2 .....
分支
// 列出所有本地分支
$?git branch
// 列出所有遠(yuǎn)程分支
$?git branch -r
// 列出所有本地分支和遠(yuǎn)程分支
$?git branch -a
// 新建一個(gè)分支往衷,但依然停留在當(dāng)前分支
$?git branch branchname
// 新建一個(gè)分支,并切換到該分支
$?git checkout -b branchname
// 新建一個(gè)分支严卖,指向指定
$?commitgit branch branchname commitname
// 新建一個(gè)分支席舍,與指定的遠(yuǎn)程分支建立追蹤關(guān)系
$?git branch --track branchname remotebranch
// 切換到指定分支,并更新工作區(qū)
$?git checkout branchname
// 切換到上一個(gè)分支
$?git checkout -
// 建立追蹤關(guān)系哮笆,在現(xiàn)有分支與指定的遠(yuǎn)程分支之間
$?git branch --set-upstream branchname remotebranch
// 合并指定分支到當(dāng)前分支
$?git merge branchname
// 選擇一個(gè)commit来颤,合并進(jìn)當(dāng)前分支
$?git cherry-pick commitname
// 刪除分支
$?git branch -D branchname
// 刪除遠(yuǎn)程分支
$?git push origin --delete branchname
$?git branch -dr [remote/branch]
查看 log
// 顯示有變更的文件
$?git status
// 顯示當(dāng)前分支的版本歷史
$?git log
// 顯示commit歷史,以及每次commit發(fā)生變更的文件
$?git log--stat
// 搜索提交歷史稠肘,根據(jù)關(guān)鍵詞
$?git log-S keyword
// 顯示某個(gè)文件的版本歷史福铅,包括文件改名
$?git log--follow filenamegit whatchanged filename
// 顯示指定文件相關(guān)的每一次
$?diffgit log-p filename
// 顯示過(guò)去5次提交
$?git log-5--pretty --oneline
// 顯示所有提交過(guò)的用戶,按提交次數(shù)排序
$?git shortlog -sn
// 顯示指定文件是什么人在什么時(shí)間修改過(guò)
$?git blame filename
// 顯示暫存區(qū)和工作區(qū)的差異
$?git diff
// 顯示暫存區(qū)和上一個(gè)commit的差異
$?git diff --cached filename
// 顯示工作區(qū)與當(dāng)前分支最新commit之間的差異
$?git diff HEAD
// 顯示兩次提交之間的差異
$?git diff [first-branch]...[second-branch]
// 顯示今天你寫了多少行代碼
$?git diff --shortstat"@{0 day ago}"
// 顯示某次提交的元數(shù)據(jù)和內(nèi)容變化
$?git show [commit]
// 顯示某次提交發(fā)生變化的文件
$?git show --name-only [commit]
// 顯示某次提交時(shí)项阴,某個(gè)文件的內(nèi)容
$?git show [commit]: filename
// 顯示當(dāng)前分支的最近幾次提交
$?git reflog
遠(yuǎn)程同步
// 下載遠(yuǎn)程倉(cāng)庫(kù)的所有變動(dòng)
$?git fetch [remote]
// 顯示所有遠(yuǎn)程倉(cāng)庫(kù)
$?git remote -v
// 顯示某個(gè)遠(yuǎn)程倉(cāng)庫(kù)的信息
$?git remote show [remote]
// 增加一個(gè)新的遠(yuǎn)程倉(cāng)庫(kù)滑黔,并命名
$?git remote add [shortname] [url]
// 取回遠(yuǎn)程倉(cāng)庫(kù)的變化,并與本地分支合并
$?git pull [remote] branchname
// 上傳本地指定分支到遠(yuǎn)程倉(cāng)庫(kù)
$?git push [remote] branchname
// 強(qiáng)行推送當(dāng)前分支到遠(yuǎn)程倉(cāng)庫(kù)环揽,即使有沖突
$?git push [remote] --force
// 推送所有分支到遠(yuǎn)程倉(cāng)庫(kù)
$?git push [remote] --all
撤銷
// 恢復(fù)暫存區(qū)的指定文件到工作區(qū)
$?git checkout filename
// 恢復(fù)某個(gè)commit的指定文件到暫存區(qū)和工作區(qū)
$?git checkout [commit] filename
// 恢復(fù)暫存區(qū)的所有文件到工作區(qū)
$?git checkout .
// 重置暫存區(qū)的指定文件略荡,與上一次commit保持一致,但工作區(qū)不變
$?git reset filename
// 重置暫存區(qū)與工作區(qū)歉胶,與上一次commit保持一致
$?git reset --hard
// 重置當(dāng)前分支的指針為指定commit汛兜,同時(shí)重置暫存區(qū),但工作區(qū)不變
$?git reset [commit]
// 重置當(dāng)前分支的HEAD為指定commit通今,同時(shí)重置暫存區(qū)和工作區(qū)粥谬,與指定commit一致
$?git reset --hard [commit]
// 重置當(dāng)前HEAD為指定commit肛根,但保持暫存區(qū)和工作區(qū)不變
$?git reset --keep [commit]
// 新建一個(gè)commit,用來(lái)撤銷指定
$?commit
// 后者的所有變化都將被前者抵消漏策,并且應(yīng)用到當(dāng)前分支
$?git revert [commit]
// 暫時(shí)將未提交的變化移除派哲,稍后再移入
$?git stashgit stash pop
二,常見(jiàn)問(wèn)題
$?mkdir prepass_repository?
File exists????????文件已存在哟玷;
Reinitialized existing Git repository in /Users/freevision/.git/
//在/Users/freevision/.git/中重新初始化現(xiàn)有Git存儲(chǔ)庫(kù)
$?git add?
Nothing specified, nothing added.
Maybe you wanted to say 'git add .'?
沒(méi)有指定狮辽,沒(méi)有添加。也許你想說(shuō)“git add”巢寡。
$ git remote add prepass_repository git@github.com:Georgecheng123/test2.git
$ git pull --rebase origin master
形式1喉脖,
git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.
致命:“origin”似乎不是git存儲(chǔ)庫(kù),致命:無(wú)法從遠(yuǎn)程存儲(chǔ)庫(kù)讀取抑月。
形式2树叽,
There are no deploy keys for this repository
Check out our guide on deploy keys to learn more.
這個(gè)存儲(chǔ)庫(kù)沒(méi)有部署密鑰
查看我們的部署密鑰指南,了解更多信息谦絮。
形式3题诵,
Allow write access
Can this key be used to push to this repository? Deploy keys always have pull access.
允許寫訪問(wèn),這個(gè)鍵可以用來(lái)推送到這個(gè)存儲(chǔ)庫(kù)嗎?部署密鑰始終具有拉訪問(wèn)權(quán)限层皱。
未完善內(nèi)容詳見(jiàn)參考資料
三性锭,參考資料:
Github 的搭建和配置github中的SSH key值????(創(chuàng)建?ssh key )
褚小者不可以懷大,綆短者不可以汲深叫胖。