1.Git公钥生成与配置方法
1.1配置用户名和邮箱
在公司使用的话,用户名建议配置成自己的真名,这样查看代码修改者的时候,比较好找。 git config命令有三种作用域:
git config --local //对当前仓库有效
git config --global //对当前登录者有效,对所有仓库都有效
git config --system //对登录这台电脑的人都有效,对所有仓库都有效
如果配置项比较多,可以在这些指令后面加 -e 参数,打开配置文件进行配置。
git config --global user.name "用户名"
git config --global user.email "邮箱地址"
1.2生成密钥
ssh-keygen -t rsa -C “上一步的邮箱地址”
1.3查看公钥
cd ~/.ssh && ls cat id_rsa.pub
1.4配置公钥
登录个人或企业的git网站,在用户设置-->SSH公钥里面 ,给公钥起个有意义的名称,将生成的公钥粘贴到公钥输入框里(注意要删除公钥末尾的空白或者换行符),点击保存,就可以了。
2.git仓库创建
2.1从零创建本地仓库,并推送到远程
git init 目录名 // 新建一个本地仓库(初始化仓库)
git add . // 添加文件到暂存区
git commit -m "提交描述" // 将暂存区内容添加到仓库中
git remote add origin "远程仓库地址" //添加远程仓库,origin是一个远程主机的别名
git push -u origin master //将本地仓库push到远程主机origin的master分支,并将origin设为默认远程主机 -u参数设置默认远程主机,后续push代码,不写主机名的话,就是默认主机
2.2 克隆已有仓库到本地
git clone "远程仓库地址" // 克隆本地库git clone
创建仓库命令
下表列出了 git 创建仓库的命令:
| 命令 | 说明 |
|---|---|
git init | 初始化仓库 |
git clone | 拷贝一份远程仓库,也就是下载一个项目。 |
提交与修改
| 命令 | 说明 |
|---|---|
git add | 添加文件到暂存区 |
git status | 查看仓库当前的状态,显示有变更的文件。 |
git diff | 比较文件的不同,即暂存区和工作区的差异。 |
git commit | 提交暂存区到本地仓库。 |
git reset | 回退版本。 |
git rm | 将文件从暂存区和工作区中删除。 |
git mv | 移动或重命名工作区文件。 |
提交日志
| 命令 | 说明 |
|---|---|
git log | 查看历史提交记录 |
git blame <file> | 以列表形式查看指定文件的历史修改记录 |
远程操作
| 命令 | 说明 |
|---|---|
git remote | 远程仓库操作 |
git fetch | 从远程获取代码库 |
git pull | 下载远程代码并合并 |
git push | 上传远程代码并合并 |
3.分支管理
3.1查看/新建分支
git branch //查看本地所有的分支
git branch -r //查看远程所有分支
git branch -a //列出所有本地分支和远程分支
git branch "分支名" //新建一个分支,但依然停留在当前分支
git checkout -b [分支名] //新建一个分支,并切换到该分支
git branch [分支名] [commit] //新建一个分支,指向指定commit
git branch --track [分支名] [remote-分支名] // 新建一个分支,与指定的远程分支建立追踪关系
3.2切换分支
git checkout 分支名 //切换分支
git checkout -b [branch] //新建一个分支,并切换到该分支
git checkout - //切换到上个分支
3.3删除分支
git branch -d 分支名 // 先切换到别的分支名下,删除本地分支
git branch -D //强制删除分支
git push origin --delete 远程分支名 或 git branch -dr [remote/branch] // 删除远程分支
3.4重命名分支
1、本地分支重命名
git branch -m 旧名称 新名称
2、远程分支重命名
1.先重命名本地分支
git branch -m 旧分支名称 新分支名称
2.删除远程分支
git push --delete origin 旧分支名称
3.上传新修改名称的本地分支
git push origin 新分支名称
4.修改后的本地分支关联远程分支
git branch --set-upstream-to origin/新分支名称
拓展:简单操作,也可以拉出一个新命名的分支,删除旧分支
3.5合并分支
git merge 当前分支要合并的分支名 -m '合并备注' //合并指定分支到当前分支
git merge --no-ff 当前分支要合并的分支名 //保留分支合并之前的历史提交记录
git merge --squash 当前分支要合并的分支名 //将分支合并之前多次提交记录合并为一次
4.查看历史
| 命令 | 说明 | |
|---|---|---|
| git status | 显示有变更的文件 | |
| git log | 显示当前分支的版本历史 | |
| git log --stat | 显示commit历史,以及每次commit发生变更的文件 | |
| git log -S [keyword] | 搜索提交历史,根据关键词 | |
| git log [tag] HEAD --pretty=format:%s | 显示某个commit之后的所有变动,每个commit占据一行 | |
| git log [tag] HEAD --grep feature | 显示某个commit之后的所有变动,其"提交说明"必须符合搜索条件 | |
| git log --follow [file] 或 git whatchanged [file] | 显示某个文件的版本历史,包括文件改名 | |
| git log -p [file] | 显示指定文件相关的每一次diff | |
| git shortlog -sn | 显示所有提交过的用户,按提交次数排序 | |
| git blame [file] | 显示指定文件是什么人在什么时间修改过 | |
| git diff | 显示暂存区和工作区的差异 | |
| git diff --cached [file] | 显示暂存区和上一个commit的差异 | |
| git diff HEAD | 显示工作区与当前分支最新commit之间的差异 | |
| git diff [first-branch]...[second-branch] | 显示两次提交之间的差异 | |
| git show [commit] | 显示某次提交的元数据和内容变化 | |
| git show --name-only [commit] | 显示某次提交发生变化的文件 | |
| git show [commit]:[filename] | 显示某次提交时,某个文件的内容 | |
| git reflog | 显示当前分支的最近几次提交 |
5.远程同步
git remote -v //显示所有远程仓库
git fetch [remote] //下载远程仓库的所有变动 git fetch -p 更新远程分支
git remote show [remote] //显示某个远程仓库的信息
git remote add [shortname] [url] //增加一个新的远程仓库,并命名
git pull [remote] [branch] //取回远程仓库的变化,并与本地分支合并
git push [remote] [branch] //上传本地指定分支到远程仓库
git push [remote] --force //强行推送当前分支到远程仓库
git push [remote] --all //推送所有分支到远程仓库
6.撤销
git checkout [file] //恢复暂存区的指定文件到工作区
git checkout . //恢复暂存区的所有文件到工作区
git checkout [commit] [file] //恢复某个commit的指定文件到暂存区和工作区
git reset [file] //重置暂存区的指定文件,与上一次commit保持一致,但工作区不变
git reset --hard //重置暂存区与工作区,与上一次commit保持一致
git reset [commit] //重置当前分支的指针为指定commit,同时重置暂存区,但工作区不变
git reset --hard [commit] //重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致
git reset --keep [commit] //重置当前HEAD为指定commit,但保持暂存区和工作区不变
git revert [commit] //新建一个commit,用来撤销指定commit
7.暂存操作
git stash //暂存工作区修改的内容:保存到暂存区(可以提N次)
git stash save "save message" // 执行存储时,添加备注,方便查找
git stash pop //恢复暂存的工作区内容:从暂存区取出(最近一次),恢复后,暂存区域会删除当前的记录
git stash pop stash@{index} //恢复指定的暂存工作, 暂存记录保存在list内,需要通过list索引index取出恢复
git stash list // 查看当前暂存的记录
git stash show //显示做了哪些改动 git stash show stash@{index}
git stash apply //恢复指定的暂存工作, 暂存记录保存在list内,需要通过list索引index取出恢复 git stash apply stash@{index}
git stash clear //清空暂存区的所有stash
8.代码撤销
1.git revert 撤销 某次操作,此次操作之前和之后的commit和history都会保留,并且把这次撤销,git revert是提交一个新的版本,将需要revert的版本的内容再反向修改回去,版本会递增,不影响之前提交的内容
git revert HEAD //撤销前一次 commit
git revert HEAD^ //撤销前前一次 commit
git revert commit commit_id //撤销指定的版本
git revert --abort //合并冲突后退出,回到指令执行之前的样子
git revert --quit //合并后退出,但是保留变化
2.git reset
谨慎使用 –-hard 参数,它会删除回退点之前的所有信息。
git reset --hard 操作等价于 git reset 和 git checkout 2步操作
git reset // 暂存区的修改恢复到工作区
git reset HEAD^ //回退所有内容到上一个版本
git reset 052e //回退到指定版本
git reset --soft HEAD~3 // 回退上上上一个版本 **-soft** 参数用于回退到某个版本,回到已修改状态,修改的内容仍然在工作区中
git reset --hard HEAD~3 // 回退上上上一个版本 **--hard** 参数撤销工作区中所有未提交的修改内容,将暂存区与工作区都回到上一次版本,并删除之前的所有信息提交
git reset –hard bae128 // 回退到某个版本回退点之前的所有信息。
git reset --hard origin/master // 将本地的状态回退到和远程的一样
代码回退:
1.查看版本 git log
2.回退到指定版本 git reset --hard (目标版本号)
3.强制推到远程仓库 git push -f //之前提交的记录会被删除
9.工作中的分支管理
10.变基
git rebase --abort //取消变基
git merge --abort //中止变基
11.代码冲突
如果你想使用合并的方式来处理这个分叉,可以在命令行中执行 git config pull.rebase false,命令中的 false 意味着 git pull 命令将使用合并(merge)方式。
如果你想使用重建基础的方式来处理这个分叉,可以在命令行中执行 git config pull.rebase true,命令中的 true 意味着 git pull 命令将使用重建基础(rebase)方式。
还可以在命令行上直接指定 --rebase 或 --no-rebase 以及 --ff-only 参数,以覆盖已经配置的默认设置。