Git 总结
基础命令
1、配置
git config --global user.name 'username'
git config --global user.email 'address_email'
配置相关
git 一种三个配置文件
仓库级配置文件 在仓库
全局级配置文件 在本地
系统级配置文件 在git安装目录
看指令
-- local :仓库级
-- global:全局级
-- system:系统及
git config <--local | --global | -- system> -l
查看当前生效的配置信息
git congig -l
编辑配置信息
git config <--local | --global | -- system> -e
添加配置项
git config <--local | --global | -- system> -- add <name> <value>
获取配置项
git config <--local | --global | -- system> --get <name>
删除配置项
git config <--local | --global | -- system> -unset <name>
2、基础命令
git init # 创建git版本管理的本地仓库
git add . 管理所有的文件和文件夹 将文件提交到缓冲区
git add file_name 管理指定文件
git status 检测当前文件中的文件状态
git log 查看版本记录
git commit -m '版本信息' 将缓冲区文件提交
git remote add origin 'git_address' # 提交远程仓库
git push -u origin 分支名称
# 假设以上操作顺利执行 则表示代码已提交成功
# 第二次提交:
git add . or git add file_name
git commit -m 'Version information'
git push origin 分支名称
进阶
免密登录
SSH-KEYGEN
...
https://baidu.com
git 回滚
情景代入:
假设我们现在写了三个版本了,but你发现第三个版本有问题,或者说被迫的下线第三个版本添加的新功能,那么我们要将代码回滚第二个版本的状态:
git log # 查看日志 每个版本都有版本号
回滚操作指令:
git reset --hard 版本号
此时回滚操作执行完毕
但是 你又粗心的发现原来第三个版本没有问题 想拿回来怎么办?
git log
。。。。。。。
查不到 怎么办?
此时我们可以用git relog 来进行查看 git relog也是查看日志,但是包括可以查找到回滚操作的版本日志
找到相应的版本号 再次执行
git reset --hard 版本号
缓冲区回滚
当我们兴冲冲的写完了代码并且已经添加到缓冲区 突然灵感来了想来个画龙点睛 淦!
一套操作之后发现 之前已经执行过添加缓冲区 怎么办。。
回滚!
如何操作?
git reset HEAD file_name # 将文件从缓冲区中拉出
再次查看缓冲区
git status
tip:
Untracked files
git分支
我们先来铺垫一个认知
现在我们已经提交到master代码 但是我现在想写一个新功能 但是我们此时不想干扰前面提交的代码
此时如何操作
创建一个新的分支 有关分支的基础命令如下:
git branch # 查看当前分支
git branch dev # 创建一个名为dev的分支
git checkout dev 将工作切换到dev分支上
此时是否觉得有些繁琐 那我可不可以直接创建并且切换过去?
Sure~
git checkout -b dev # 创建并切换到dev分支上
新功能完成了 我们现在将新功能所在的分支合并在master分支 如何操作
git checkout master
git merge dev # 分支合并-- 首先切换master,然后在master分支执行 merge 指令来合并dev分支的代码
git branch -d dev # 删除dev分支 并且告诉她你已经没有用了
合并分支出错了 渣男
合并分支的时候我们意外的发现了git 出现了莫名其妙的提示信息 原来我们在dev中的代码竟然在master中意外的雷同 其实她还是想着我。。。。
但是 开弓没有回头箭
我们两个分支中的相同的文件的同一行出现了不同的内容,合并时就会出现冲突。
此时git 会将冲突在你的代码文件中表示出来,这里我们可以把没用的删除就可以提交一个新的版本这样就完成了分支代码合并
拉取代码继续开发
情景:
危机:电脑进水爆炸了
解决办法 换一个
换一个 代码那 我的代码都在电脑里
所以 写完代码一定要提交到仓库!
拉取代码
我们可以从仓库(gitee/github)中将我们未完成的代码拉到我们本机 继续开发:
如何实现:
本地创建一个文件夹,查看我们远程仓库的地址:
git clone addree_git
进入到项目后 开始工作 但是却在git branch 里面没找到属于self的分支 怎么办?
其实只是不显示而已 我们可以直接切换我们自己的分支
git checkout 分支名称
此时 你们项目都回来了 激动么 你还可以继续进行以上的一系列操作(git log git relog git reset hard/HEAD......)
进阶拉取
代码完成了 但是本地已经删除了 突然之前代码需要修改 怎么办
继续创建一个新文件
cmd:
md folder_name
git init
git pull origin 分支名称
继续开发
忘记提交
第一天公司开发时
1、拉代码
git pull origin dev
2、继续开发
3、提交代码
git add .
git commit -m 'xx'
.....忘记push 没有推给git仓库
回家放松时该死的灵感又来了
1、拉代码,发现问题
git pull origin dev
2、 爱咋咋地 淦就完了
但是此时写的功能又可能与你公司开发时代码有些冲突出现了渣男问题
3、不管了 该咋咋
git add .
git commit -m 'xxx'
git push origin dev
第二天。。。
1、拉代码 把昨晚写的功能拉到本地(有合并、可能产生冲突)
git pull origin dev
2、如果有冲突 继续手动解决
3、开发其他功能
git add . .... git push
git pull origin dev
其实以上命令等价于下面两个指令:
git fetch origin dev # 将远程仓库dev分支的代码拉到本地git的版本库中,为了和本地dev分支做个区分,远程拉下来的dev分支会叫另外一个名字:otigin/dev
git merge origin/dev # 合并远程拉取下来的dev分支的代码
git tag -- 标签
我们在git log 的时候发现 淦 你这什么玩意 想看花老衲的眼睛么
此时我们可以引出一条指令 git tag -a 'v1' -m '第一版'
此时
git log
发现log中出现了tag标签 并标为v1
之后推送
git push origin --tags
之后我们可以在仓库中看好标签一栏出现了我们新添加的内容
beyond compare
rebase
面试
git面试
这个东西怎么说呐 没有唯一的答案 只能看在面试时候面试官问的是什么 其实从具体问题具体解决来说 这就是个工具 而我们又不得不熟练使用
所以我们要总结一下平时可能会出现的错误
问:fetch和merge和pull的区别?
答:
pull相当于git fetch 和 git merge,即更新远程仓库的代码到本地仓库,然后将内容合并到当前分支。
git fetch:相当于是从远程获取最新版本到本地,不会自动merge
git merge : 将内容合并到当前分支
git pull:相当于是从远程获取最新版本并merge到本地
这个问题上面我们明确的解释过
问:tag?
答:
tag指向一次commit的id,通常用来给开发分支做一个标记
打标签 : git tag -a v1.01 -m "Relase version 1.01"
提交标签到远程仓库 : git push origin --tags
查看标签 : git tag
查看某两次tag之间的commit:git log --pretty=oneline tagA..tagB
查看某次tag之后的commit: git log --pretty=oneline tagA..
问:Git工作流程
答:
1、在工作目录中修改某些文件
2、对修改后的文件进行快照,然后保存到暂存区域
3、提交更新,将保存在暂存区域的文件快照永久转储到Git目录中
问:常用命令
git show # 显示某次提交的内容 git show $id
git add <file> # 将工作文件修改提交到本地暂存区
git rm <file> # 从版本库中删除文件
git reset <file> # 从暂存区恢复到工作文件
git reset HEAD^ # 恢复最近一次提交过的状态,即放弃上次提交后的所有本次修改
git diff <file> # 比较当前文件和暂存区文件差异 git diff
git log -p <file> # 查看每次详细修改内容的diff
git branch -r # 查看远程分支
git merge <branch> # 将branch分支合并到当前分支
git stash # 暂存
git stash pop #恢复最近一次的暂存
git pull # 抓取远程仓库所有分支更新并合并到本地
git push origin master # 将本地主分支推到远程主分支
。。。。。。。
!!问:提交时发生冲突,如何解决?
?
为什么会发生冲突?
因为在合并分支的时候,master分支和dev分支恰好有人都修改了同一个文件,GIT不知道应该以哪一个人的文件为准,
所以就产生了冲突了。 两个分支相同文件相同位置的的不同操作!
答:
发生冲突,在IDE里面一般都是对比本地文件和远程分支的文件,然后把远程分支上文件的内容手工修改到本地文件,
然后再提交冲突的文件使其保证与远程分支的文件一致,这样才会消除冲突,然后再提交自己修改的部分。特别要注意下,
修改本地冲突文件使其与远程仓库的文件保持一致后,需要提交后才能消除冲突,否则无法继续提交。必要时可与同事交流,消除冲突。
发生冲突,也可以使用命令。
通过git stash命令,把工作区的修改提交到栈区,目的是保存工作区的修改;
通过git pull命令,拉取远程分支上的代码并合并到本地分支,目的是消除冲突;
通过git stash pop命令,把保存在栈区的修改部分合并到最新的工作空间中;
问:在执行git pull的时候,提示当前branch没有跟踪信息
答:
1、git pull origin 远程分支名称
2、git branch --set-upstream-to=origin/远程分支名称 本地分支名 (先建立远程分支与本地分支的连接,再pull)git pull 再pull
问:说明GIT合并的两种方法以及区别。
答:
Git代码合并有两种:Git Merge 和 Git ReBase
Git Merge:这种合并方式是将两个分支的历史合并到一起,现在的分支不会被更改,它会比对双方不同的文件缓存下来,生成一个commit,去push。
Git ReBase:这种合并方法通常被称为“衍合”。他是提交修改历史,比对双方的commit,然后找出不同的去缓存,然后去push,修改commit历史。
问:修改远程仓库命令
答:
git remote set-url origin 修改后的远程仓库地址
问:此时爆出:致命:远程源已存在 怎么办
答:git remote -v
git remote rm origin
git remote add 'git address'
补充的知识点[微笑]
git 容易混淆的两个概念
1、工作区(project 就是一个工作区!)
2、gitignore(配置不想上传到版本库的文件)
git 的两种工作流
1、fork/clone
2、clone
git diff # 显示缓冲区和工作区的差异
git diff --cached [file] 显示缓冲区和上一个commit的差异
git diff HEAD 显示工作区与当前分支最新commit之间的差异
git diff --shortstar "@{0 day ago}"
git show [commit] 显示某次提交的元数据和内容变化
git show --name-oblu [commit] 显示某次提交发生变化的文件
git reflog 显示当前分支的最近几次提交
git checkout . 将缓冲区文件恢复到工作区(个人感觉鸡肋 因为这个操作是git add [file_name] 紧接着就在本地del file_name 然后进行的操作)
* 认识即可
git stash 暂时将未提交的变化一处,稍后再移入
git stash pop
强推
关于强制推送强调一下 尽可能不要使用
git push origin master -f
强制推送
。。。。。
。。。。。珍爱生命