Git操作

194 阅读9分钟

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.工作中的分支管理

image.png

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 参数,以覆盖已经配置的默认设置。