Git笔记
Git使用说明
GitHub:https://github.com/
码云:https://gitee.com/
模块主要分为:基础,常用操作,分支、回退、常见错误。
一:基础
1.Git 和 SVN的主要区别
- Git是分布式管理,SVN是集中式管理,
- Git支持离线操作,SVN仅支持联网操作
2.Git的基本操作
为了更好的描述和传达,阅读前需要进行一些概念的统一
- repository(仓库):git中有两种repository,一个是remote(线上),还有一个是local(本地)。都是存储project的所有的内容。
- branch(分支):一个project的镜像。
3.初次使用:
//一个完整的步骤如下:
step1:初始化账号姓名
git config --global user.name "XXX"
git config --global user.email XXX@163.com
git config --list //查看配置信息
step2:上传文件
cd /d/workspace //选择目录,进入到d盘workspace下面
git init //初始化操作,会在/d/workspace目录下,生成.git文件夹
git remote add origin url //搭桥,与远程服务器建立连接
git pull origin master //从远程master分支pull代码
git add test.txt //添加文件
git commit -m "第一次提交" //commit时候的提示信息
git push origin master:master //把暂存区的变换提交到服务端的master分支
step3:同步
git pull origin master //从远程的master分支同步数据
//用于取回远程主机某个分支的更新,再与本地的指定分支合并,类似于svn的update操作
二:常用操作
1.push操作:
git push origin 本地分支名 //把本地分支(本地checkout的分支)push到远程同名分支,如果远程分支没有就创建同名分支; //与我当前在那个分支没有关系
git push origin 本地分支名:远程分支名 //将指定本地分支push到远程分支; //与我当前在那个分支没有关系
eg:把本地分支test提交到远程仓库master
git push origin test:master //与此时在哪个分支没有关系,可以是当前的分支,也可是别的的分支。
push操作可能不成功,此时可以强制push:
原因:可能是因为远程、本地的文件不匹配导致的,强制push会覆盖远程的文件
git push -f origin master //强制push到远程 参数-f:表示强制推送到远程。
2.pull操作
git pull origin 远程分支名 //把远程分支pull到当前分支(本地checkout的分支)
git pull origin 远程分支名:本地分支名 //把远程分支pull到指定本地分支
补充:
指定了本地分支名,则将远程分支的数据同步到制定的本地分支;若没有指定则是同步到当前分支。如果指定的是不存在的分支,则会创建该分支。
git fetch和git pull的区别:
git fetch:从远程获取最新版本到本地,不会自动merge
git pull:从远程获取最新版本并merge到本地,pull=fetch+merge
注:本地看不到远程的分支,使用git fetch,则可以看到了。
3. 远程仓库
git remote -v //查看远程分支的仓库
git remote rm origin //删除远程仓库
git remote add origin url //添加远程仓库
4. 撤销add的到缓存区的文件
git clean -f //清除没add的文件、文件夹
git rm --cached fileName:撤销add到缓存区中的文件
如需撤销文件夹加上-r:git rm -r --cached fileName
git diff 文件名:查看修改了那些内容
git checkout 文件名:强制回退到修改之前的内容
5.状态查询:git status
6.查看日志:
git log //默认查看当前分支的日志信息; 会按提交时间列出所有的更新,最近的更新排在最上面 git log -3 //查看最近3次的提交日志信息 git log bug_188 -3 //查看具体某一个分支的日志信息 git log --pretty=oneline -3 //显示最近3条日志,并按行信息日志信息
7.修改内容对比:
git diff 文件名:查看修改了那些内容
git比较两个文件,修改与本地比较,查看文件修改了哪些内容
git diff branch1 branch2 --stat
显示出所有有差异的文件列表
git diff branch1 branch2 文件名(带路径)
显示指定文件的详细差异
git diff branch1 branch2
显示出所有有差异的文件的详细差异
8.commit提交信息
查看commit的id 对应修改了哪些文件:git show commit的id --stat 查看某次commit修改的内容: git show commit的id
修改commit的提交信息
(1)修改最后一个commit的信息:
git commit --amend
如果提示编辑器不存在设置全局配置git的编辑器
git config --global core.editor vim
在弹出的编辑框中进行修改,之后保存退出
(2)修改之前commit的信息:
git rebase --interactive commit的id
该命令会列出当前commit的id之后提交的commit信息列表
弹出编辑页面,把commit的id前的 pick 改成 r 保存,会弹出修改commit信息的页面
9.查看标签
git tag -l
三:分支
1.本地分支:
git branch local_branch : 创建本地分支
git branch -d local_branch:删除本地分支 //使用大写的D 强制删除 git branch -D XXX
git branch -m old_branch new_branch:重命名本地分支
2.远程分支:
git push origin dev:dev:创建远程分支。//将本地分支push到远程分支,如果远程分支不存在,则创建远程分支
git push origin --delete <branchName> 删除远程分支
删除与远程分支的关系: git remote rm origin //删除远程仓库,之后可以重新git remote add origin url,重新建立远程关系
3.查看分支:
git branch -a:查看远程和本地的分支,绿色代表的是当前的(本地)分支
git branch:查看本地的分支,当前分支前面会标一个*号。
git branch -r:查看远程的分支
git remote show origin 查看远程分支
4.git checkout命令:
检出,是我们最常用的命令。最常见的场景:创建分支,切换分支。
git checkout test:从当前分支切"换到"test"分支
git checkout -b test:创建test分支,并从当前分支切"换到"test"分支;如果test分支已经存在了,则会报错
git checkout -b test666 master:从master分支"切出/创建"一个test666分支,test666这个分支是master分支的孩子
git checkout -- readme.txt:
强制回退到修改之前的内容
readme.txt文件在工作区的修改全部撤销,这里有两种情况,add之前和add之后:让这个文件回到最近一次git commit或git add时的状态
5.分支合并
合并某分支到当前分支:git merge <name>
新建dev分支,在该分支下创建文件,进行操作。操作完成后,在dev分支下进行commit提交,此时master看不到dev分支下的文件了。所以我们需要将dev分支的内容合并到master上面。
此时我们可以git checkout到master分支,把dev分支的工作成果合并到master分支上。此时master分支就可以看到dev分支提交的文件了。
管理员:
别人将代码提交到远程的dev分支,管理员会pull到本地,确保没问题,再合并到本地的master,最后push到远程的master分支。
四.clone克隆
git clone url:该命令将remote repository下载到local
默认克隆远程master分支的数据,并且默认克隆到当前目录下(pwd命令的结果)
完整的例子:
git clone -b 远程分支名 url 本地目录 //克隆指定分支的数据,到指定的目录下
git clone -b master http://gitee.com/a/b.git /d/workspace
补充:首次使用需要输入账密:
输入你注册的账户名(或者邮箱)和密码即可
五:回退reset
步骤:
git log 查看当前分支的提交信息,此时我们可以找到需要回退的commitId
git reset --hard 3628164 //版本号没必要写全,前几位就可以了,Git会自动去找
疑惑:
reset三种类型:
1.git reset --mixed commit的id
还原到commit的id,(git reset 默认是mixed )此commit之后的文件变成modified红色(即还没add的状态)
2.git reset --soft commit的id
还原到commit的id,此commit之后的文件变成modified绿色(即add(勾选中)的状态)
3.git reset --hard commit的id
还原到commit的id,此commit之后的文件都被还原