1)基本信息设置及查看
Git安装完成后,需要进行一些基本设置。
作用:区分不同开发人员的身份。
辨析:这里设置的签名和登录远程库(代码托管中心)的账号、密码没有任何关系。
//项目级别/仓库级别:仅在当前本地仓库范围内有效
$ git config user.name 'userName' //设置用户名
$ git config user.email '[email protected]' //设置用户邮箱
$ cat .git/config //查看当前项目设置
//系统用户级别:登录当前操作系统的用户范围
$ git config --global user.name 'userName' //设置用户名
$ git config --global user.email '[email protected]' //设置用户邮箱
$ cat ~/.gitconfig //查看系统级别设置
级别优先级:项目级别优先于系统用户级别,二者都有事采用项目级别
2)基础操作
$ cd:e // 切换盘符
$ cd .. // 回到文件上一层(注: cd与..中间有个空格)
$ cd ~ // 回到当前目录的主目录
$ mkdir dir // 创建文件夹
$ touch fileName // 新建文件
$ vi fileName // 使用vim编辑器,编辑文件
$ press i button // 开始进入编辑状态
$ press the Esc button // 退出vim编辑区
$ :wq // 退出编辑状态, 回到命令窗口
$ cat fileName //查看文件的内容
$ ll [dir] //查看当前或者指定文件夹内容(详细内容)
$ ls [dir] //查看当前或指定文件夹内容(缩略内容)
$ ls -la [dir] //查看当前或指定文件夹的所有内容(包括隐藏内容)
$ touch fileName //创建一个文件
$ rm fileName //删除工作区文件
$ pwd //显示当前路径/e/Git/learngit
$ git config --list //查看全局配置设置
$ git init // 初始化一个空的Git仓库,将当前目录变成一个Git可以管理的仓库
$ git add fileName... // 将工作区的“新建/修改”添加到暂存区域;并进行追踪
$ git rm fileName //删除文件(只删除工作目录和暂存区域),也就是取消跟踪,下次提交不纳入版本管理
$ git rm -m fileName //当工作目录和暂存区域的同一个文件存在不同的内容时,则删除两个区域的文件
$ git rm --cached fileName //将暂存区域的文件移除(保留工作目录)
$ git {ren|mv} fileName1 fileName2 //重命名文件,不同系统命令不同ren、mv
$ git commit -m "提交描述" [fileName] // 将暂存区的内容提交到本地仓库(把暂存区的所有内容提交到当前分支)
$ git status //查看工作区和暂存区的状态(仓库下的工作区文件是否被修改过)
//查看历史记
//多屏显示控制方式: 空格向下翻页,b 向上翻页,q 退出;
$ git log //查看Git仓库历史提交的快照
$ git log --pretty=oneline //以简洁的方式显示
$ git log --oneline //以更简洁的方式显示
$ git reflog //查看每一次命令记录历史,确保能回到任意版本;HEAD@{移动到当前版本需要多少步}
3)回到过去
$ git reset 快照ID //将本地库中某个快照还原到暂存区,默认为 --mixed HEAD
$ git reset 快照ID 文件名/路径 //还原某一个快照中的文件。HEAD指针不会改变
//reset命令的三个参数,默认为--mixed
$ git reset --soft HEAD~ //仅仅在本地库移动HEAD指针;
$ git reset --mixed HEAD~ //改在本地库移动HEAD指针,重置暂存区;
$ git reset --hard HEAD~ //在本地库移动HEAD指针,重置暂存区,重置工作区
$ git reset HEAD^ //一个^表示后退一步,n个^表示后退n步;只能后退
$ git reset HEAD~n //表示后退n步;只能后退
$ git checkout -- 文件名 //用于把暂存区域的文件还原到工作目录
4)版本对比
$ git diff //将工作区和暂存区的内容进行比较;
$ git diff [快照ID/fileName...] //将工作区和暂存区的快照或文件进行比较;
$ git diff --cached //将暂存区和本地仓库最新提交的快照进行比较
$ git diff --cached [快照ID/fileName...] //将暂存区和本地仓库的某个快照进行比较
$ git diff [快照ID1/fileName...] [快照ID2/fileName...] //比较两个指定快照或文件的内容;
5)分支管理
在版本控制过程中,使用多条分支同时推送多个任务。
● 分支的好处:
① 同时并行推进多个功能开发,提高开发效率;
② 各个分支在开发过程中,如果某一分支开发失败,不会对其他分支有任何影响,失败的分支重新开始即可。
$ git log --graph //查看分支合并图
$ git log --graph --pretty=oneline --abbrev-commit // 查看分支合并缩略图
$ git branch //查看所有分支(当前分支以‘*’标记)
$ git branch -v //查看所有分支 - 简介
$ git branch 分支名 //创建分支
$ git branch -d 分支名 //删除分支,没有合并到master分支为前提
$ git checkout 分支名 //切换分支
$ git checkout -b 分支名 //创建分支并切换到该分支
$ git checkout HEAD~ //创建匿名分支,在某一个指定快照上创建一个匿名分支,在切换分支后该分支的任何操作都会丢弃掉,;一般用来做一些实验
$ git merge 分支名 //合并分支到当前分支上
$ git merge --no-ff -m "注释" 分支名 //合并后的分支有历史记录,而Fast-Forward合并之后,分支没有历史记录
$ git rebase //将本地未推送的分支提交整理成直线,利于查看
//Bug分支
$ git stash //隐藏分支工作现场,为修复bug准备
$ git stash list //查看有哪些分支隐藏的工作现场,为恢复工作现场做准备
$ git stash apply //恢复工作现场,但不删除存储的stash内容,结合git stash drop进行删除
$ git stash drop //删除存储的stash内容,恢复到隐藏前的工作现场
$ git stash pop //恢复到隐藏前的工作现场,相当于git stash apply和git stash drop
$ git stash apply stash@{0} //可以多次stash,通过git stash list查看所有的stash,然后可以恢复到指定的隐藏的工作现场
● 解决合并分支时的冲突:
冲突表现:当两个分支的同一个文件名的内容不相同的时候进行合并会产生冲突。

●冲突解决:
① 编辑文件,删除特殊符号;
② 修改文件到满意的程度,保存退出;
③ git add 文件名;
④ git commit -m "日志信息",此时git不能带文件名;
6)远程仓库操作
$ git remote -v //查看当前所有远程地址别名
$ git remote add [别名] [远程地址] //关联一个远程仓库,一般别名为origin
$ git remote rm [别名] //删除一个远程仓库
$ git push -u [别名] [分支名] //第一次推送本地库的内容需要参数 -u ;
$ git push [别名] [分支名] //推送本地分支到远程库分支(时刻保持同步)
$ git push -f -u [别名] [分支名] //推送某个历史版本
//!当推送的版本不是基于GitHub远程库所做的修改,不能推送,必须先拉取。当发生了冲突时,编辑冲突文件,添加到缓存区然后提交,再次执行推送。
$ git pull [别名] [分支名] //将远程库分支的最新版本拉取下来;pull=fetch+merge
$ git pull --rebase [别名] [分支名] //拉取最新的分支下来进行合并;pull --rebase=fetch+rebase
$ git clone [远程地址] //地址可以使用Https或者SSH方式进行克隆;效果:① 初始化本地库;② 创建origin远程地址别名;③ 把远程库下载到本地;
$ git checkout -b [本地分支名] [远程分支名] //在本地创建和远程分支对应的分支
$ git branch --set-upstream-to=[远程分支名] [本地分支名] //建立本地分支和远程分支的关联
注:如果远程仓库有README.md文件,而本地仓库没有README.md文件,此时可能会出现错误,应先进行合并文件,再进行推送;合并文件之后,此时再进行推送修改到远程仓库即可。
推送冲突:如果不是基于 GitHub 远程库的最新版所做的修改,不能推送,必须先拉取;拉取下来后如果进入冲突状态,则按照“分支冲突解决”操作解决即可。
SSH免密登录:设置SSH推送方式
//进入当前用户的家目录
$ cd ~ 删除.ssh 目录
$ rm -rvf .ssh
//运行命令生成.ssh 密钥目录;参数-C为大写
$ ssh-keygen -t rsa -C [email protected]
//进入.ssh 目录查看文件列表
$ cd .ssh
$ ls -lF
//查看 id_rsa.pub 文件内容
$ cat id_rsa.pub
/*复制 id_rsa.pub 文件内容,登录 GitHub,点击用户头像→Settings→SSH and GPG keys
New SSH Key
输入复制的密钥信息*/
//回到 Git bash 创建远程地址别名
$ git remote add [别名_ssh] [SSH远程地址];别名一般为origin
//推送文件到远程仓库
& git push origin_ssh 分支名
View Code