一 git 配置多个ssh-key
生成私钥和公钥
ssh-keygen -t rsa -C "sgfoot@xxx.com" -f ~/.ssh/sgfoot-rsa
#-t 选择不同加密方式
#-C 您的邮箱
#-f 存储位置
#~/..ssh 目标下多了两个文件sgfoot-rsa,sgfoot-rsa.pub
ssh-keygen -t rsa -C "sgfoot@xxx.com" -f ~/.ssh/sgfoot-rsa
#-t 选择不同加密方式
#-C 您的邮箱
#-f 存储位置
#~/..ssh 目标下多了两个文件sgfoot-rsa,sgfoot-rsa.pub
添加私钥
ssh-add sgfoot-rsa
#如果报:Could not open a connection to your authentication agent
可以使用ssh-agent bash解决以上错误
#可以使用ssh-add -l查看私钥列表
#可以使用ssh-add -D删除私钥列表
ssh-add sgfoot-rsa
#如果报:Could not open a connection to your authentication agent
可以使用ssh-agent bash解决以上错误
#可以使用ssh-add -l查看私钥列表
#可以使用ssh-add -D删除私钥列表
创建config文件
# github
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/sgfoot-rsa
# github
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/sgfoot-rsa
- Host和HostName填写git服务器的域名。
- IdentityFile指定私钥的路径。
提供公钥给第三方
cat sgfoot_rsa.pub
cat sgfoot_rsa.pub
测试
ssh -T git@github.com
二 git使用方法
初始化
git init (对于新建文件夹,第一步需要初始化)
克隆一份项目
git clone https://localhost/admin.git
添加文件至工作区
git add --all #添加所有文件
git add read.me #添加指定文件
git add . 添加当前目录下的所有文件和子目录
git add -u <省略则当前目录> 所有tracked文件中被修改过或已删除文件的信息添加到索引库。它不会处理untracted的文件
git add -A 所有tracked文件中被修改过或已删除文件和所有untracted的文件信息添加到索引库。
git add --all #添加所有文件
git add read.me #添加指定文件
git add . 添加当前目录下的所有文件和子目录
git add -u <省略则当前目录> 所有tracked文件中被修改过或已删除文件的信息添加到索引库。它不会处理untracted的文件
git add -A 所有tracked文件中被修改过或已删除文件和所有untracted的文件信息添加到索引库。
提交到仓库,并添空工作区
git commit -m “注释语句”
git commit -am “添加注释” #文件之前已经提交过,但这次的改动还没有进stage
添加远程仓库github
git remote add origin https://localhost/admin.git(需要关联的git地址)
#origin 是一个名字
git remote add origin https://localhost/admin.git(需要关联的git地址)
#origin 是一个名字
提交到远程仓库
git push origin master
#origin 是远程名称
#master 是分支名称
git push origin master
#origin 是远程名称
#master 是分支名称
上传代码到GitHub远程仓库
git push -u origin master #可能需要输入帐号和密码
git push -u origin master #可能需要输入帐号和密码
状态,版本对比,编辑,撤销,版本回退,删除
查看状态
git status
对比版本
git diff HEAD -- readme.txt
#HEAD代表当前仓库里的版本号
-- readme.txt是当前工作区的版本
git diff HEAD -- readme.txt
#HEAD代表当前仓库里的版本号
-- readme.txt是当前工作区的版本
丢弃工作区里的文件
git checkout -- readme.txt
#一定要加-- 不然就是分支的切换了
git checkout -- readme.txt
#一定要加-- 不然就是分支的切换了
查看日志
git log
git log --pretty=oneline
先使用git reflog 查看之前的log
git log
git log --pretty=oneline
先使用git reflog 查看之前的log
版本回退
#退回上一个版本,HEAD加一个^,退回上2个就加2个^
git reset --hard HEAD^
git reset --hard HEAD~100 #退回前100个版本
#直接退回指定版本(git log显示的md5字符串,可以是前面5位短的)
git reset --hard 3628164
#实现向未来版本回退
先使用git reflog 查看之前的log
git rest --hard xxxxx
#退回上一个版本,HEAD加一个^,退回上2个就加2个^
git reset --hard HEAD^
git reset --hard HEAD~100 #退回前100个版本
#直接退回指定版本(git log显示的md5字符串,可以是前面5位短的)
git reset --hard 3628164
#实现向未来版本回退
先使用git reflog 查看之前的log
git rest --hard xxxxx
删除 & 撤销
git checkout . #本地所有修改的。没有的提交的,都返回到原来的状态
git clean -n 列出将要删除的目录和文件
git clean -df #d 代表目录, f代表文件
git checkout . #本地所有修改的。没有的提交的,都返回到原来的状态
git clean -n 列出将要删除的目录和文件
git clean -df #d 代表目录, f代表文件
更新git
git pull
分支
新建一个分支
git branck developer
git branck developer
切换指定分支
git checkout developer
git checkout developer
新建并切换分支
git checkout -b dev
#相当上面两个命令
git checkout -b dev
#相当上面两个命令
合并分支
git checkout master
git merge developer
#必须先切换到master分支,然后再合并developer分支到master上
git checkout master
git merge developer
#必须先切换到master分支,然后再合并developer分支到master上
解决冲突
git status
#both modified file 表示这个文件有冲突
#Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容
#HEAD下面的内容是当前分支的内容
git add file
git commit -m "解决冲突"
若分支上出现rebase 字符
git rebase --continue
git rebase --abort
#查看整个git解决分支的路线
git log --graph --pretty=oneline --abbrev-commit
git status
#both modified file 表示这个文件有冲突
#Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容
#HEAD下面的内容是当前分支的内容
git add file
git commit -m "解决冲突"
若分支上出现rebase 字符
git rebase --continue
git rebase --abort
#查看整个git解决分支的路线
git log --graph --pretty=oneline --abbrev-commit
使用分支策略
- master做为稳定分支,仅用于发布使用,不在此分支上做开发
- 创建一个dev开发分支,用于团队开发使用的次分支,每个人再创建一个分支做为自己独立开发的分支,时不时可以合并到dev分支上.
- 自已本地创建bug分支
- 还可以创建小队的分支
- 团队分支效果图
忽略文件
#只需要新建.gitignore文件即可.里面填内容
#只需要新建.gitignore文件即可.里面填内容
配置别名
让git st 代替git status
git config --global alias.st status
$ git config --global alias.co checkout
$ git config --global alias.ci commit
$ git config --global alias.br branch
git config --global alias.unstage 'reset HEAD'
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
让git st 代替git status
git config --global alias.st status
$ git config --global alias.co checkout
$ git config --global alias.ci commit
$ git config --global alias.br branch
git config --global alias.unstage 'reset HEAD'
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
命令列表
基础命令 | 说明 |
---|---|
git init | 初使一个目录为git项目,会生成一个.git目录 |
git clone url | 克隆远程项目 |
git add file | 添加文件至暂存区 |
git add -u <默认当前目录> | 所有tracked文件中被修改过或已删除文件的信息添加到索引库。它不会处理untracted的文件 |
git add -A <默认当前目录> | 所有tracked文件中被修改过或已删除文件和所有untracted的文件信息添加到索引库。 |
git commit -m “备注不可少” | 提交到仓库 |
git status | 查看当前状态 |
git log —pretty=oneline —abbrev-commit | 列出最短的日志 |
处理命令 | 说明 |
---|---|
git log | 查看提交的日志 |
git reflog | 查看未来和过去的日志 |
git reset HEAD^ | 退回上一个版本 |
git reset HEAD~10 | 退回上10个版本 |
git reset hard [log id] | 退回指定版本 |
git rm file | 删除文件,需要提交 |
分支命令 | 说明 |
---|---|
git branch | 查看所有分支 |
git branch -d 分支名 | 删除分支 |
git branch -D [name] | 强行删除分支 |
git branch -r | 查看远程分支情况 |
git branch -a | 查看所有分支情况 |
git checkout 分支名 | 切换分支 |
git checkout -b 分支名 | 创建分支并切换此分支 |
git merge 需要合并的分支名 | 合并分支 |
git push origin :dev | 删除远程分支dev |
远程仓库命令 | 说明 |
---|---|
git remote add origin url | 添加远程库,origin是名称,url是远程目标 |
git remote | 查看远程库列表 |
git remote -v | 查看远程库详细 |
git push -u origin master | 第一次使用,-u 将本地所有内容推到远程库上 |
git push origin master | 将本地所有内容推到远程库上 |
git push origin dev | 将本地的dev分支推到线上去 |
git pull origin master | 从远程库里拉取资源 |
git checkout -b dev origin/dev | 必须创建远程origin的dev分支到本地 |
git branch —set-upstream branch-name origin/branch-name | 如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建 |
标签命令 | 说明 |
---|---|
git tag | 查看标签列表 |
git tag v1.0 | 在当前分支下最新的版本上打了一个v1.0 标签 |
git show v1.0 | 查看标签信息 |
git tag -a v0.1 -m “version 0.1 released” 3628164 | 在指定的logid上打上标签 |
git tag -s v0.2 -m “signed version 0.2 released” fec145a | 用私钥签名一个标签 |
git tag -d v1.0 | 删除v1.0标签 |
git push origin tagname | 推送标签 |
其它命令 | 说明 |
---|---|
git config —global color.ui true | 打上颜色 |
本文来自云栖社区合作伙伴“开源中国”
本文作者:
Ocean_K