Git学习
Posted 肖帆咪
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Git学习相关的知识,希望对你有一定的参考价值。
Git
git作为分布式版本控制系统,让每个人的电脑都是服务器,当你从远程仓库拉取代码后你的电脑就是单独的服务器,你可以进行各种回滚提交操作,当开发完成后直接提交到本地仓库并推送至远程仓库,非常的简单高效安全。
Git的三种状态
已修改状态(工作区)
通过add命令到
已暂存状态(暂存区)
通过commit命令到
已提交(本地仓库)
最后到远程仓库
一般的开发流程
创建仓库/从远程仓库克隆
创建并切换到特性分支
创建/修改文件
提交到暂存区到本地仓库
切换到主干分支
合并特性分支到主干分支
推送到远程仓库
常用命令
init
# 初始化一个git的本地仓库
git init
clone
# 克隆远程仓库到本地
git clone ssh链接
remote
# 本地仓库和远程仓库建立连接
git remote
# 查看详细的关联
git remote -v
# 我们为远程仓库其名为origin
git remote add origin xxx
# 名称的修改
git remote rename origin origin1
# 移除关联
git remote remove origin
add
# 将所有文件从工作区添加到暂存区
git add .
# 我们在更新文件后使用该命令将新增修改删除的文件添加到暂存区
git add -A
branch
# 管理分支,显示所有分支
git branch
# 添加分支
git branch branch1
# 删除分支
git branch -d branch1
# 查看分支详情
git branch -v
checkout
# 对于团队开发中,需要创建自己的分支
git checkout -b yifanwang.wang origin/master
# 添加分支并切换分支
git checkout -b "分支名"
# 将工作区还原到暂存区的上一版本
git checkout -- "文件名"
# 将工作区还原到暂存区的某一版本
git checkout "版本号" "文件名"
# 将工作区还原到上一次的版本
git checkout HEAD "文件名"
# 将工作区还原到前面第二次的版本(根据相应的数字还原到相应的版本)
git checkout HEAD~2 "文件名"
commit
# 将工作区提交到本地仓库,并添加描述
git commit -am 'description'
# 如果提交的有问题需要修改,先修改在提交
git commit --amend
push
# 将本地仓库的代码提交到远程仓库,强制提交后面加 -f
git push origin HEAD
# 分支master设置为跟踪来自origin的远程分支master
git push -u origin master
pull
# 后续发现问题需要修改,先将代码pull下来后再重复上面操作
git pull
status
# 查看分支状态
git status
log和reflog
# 查看提交历史,历史操作会同步至远程仓库
git log
# 查看提交历史
git log --graph --online
# 查看所有操作,reflog只存在于本地
git reflog
config
# 修改日志中的提交者姓名和邮箱
git config --add user.name yifanwang.wang
git config --add user.email yifanwang.wang@qunar.com
diff
# 显示不同提交,不同工作区域(默认工作区和暂存区),不同分支之间的差别
git diff
# 配合log命令使用,查看每次commit之间的差异
git diff 提交1编码 提交2编码
# 暂存区和本地仓库的差别
git diff --staged
git diff --cached
# 如需查看fileA在暂存区与HEAD之间的差异
git diff --cached fileA
git diff --staged fileA
# 显示不同分支之间的差异
git diff master branch2
fetch
# 拉去远程仓库带本地仓库,并不会合并到工作区
git fetch
merge
# 合并分支到工作区
git merge
# 1.处理冲突,对于同一文件的同一地址多人同步修改时会产生冲突,我们通过git pull拉取下来后,如果发生冲突我们需要手动进行操作,我们通过vim命令对文件进行修改,修改完成后,再提交至本地仓库,再通过push提交至远程仓库
# 2. 我们也可以通过git status查看工作区状态,根据提示逐步操作
# 如果需要解决的冲突较多比较麻烦,且远程仓库的代码更加完善,我们撤销之前的commit操作,通过git merge --abort命令取消冲突,我们对文件进行修改后再重复提交操作。
revert和reset
# 撤销一些已经存在的提交,revert操作会当做一次提交保存在log中
git revert "版本号"
# 重置HEAD到指定的状态,HEAD表示当前的分支
# 将当前分支本地仓库上一版本的内容拷贝到暂存区而不改变工作区的状态
git reset --mixed HEAD~
# 将当前分支本地仓库上一版本的内容拷贝到暂存区和工作区(覆盖),不可逆操作
git reset --hard HEAD~
# 当前分支的指针指向本地仓库的上一个版本,不会有其他操作
git reset --soft HEAD~
# 通过这种操作可以撤销之前的操作,但是会将之前版本之前的日志都会被删除(相对于revert劣势大)
git reset --hard "之前版本号"
pull
# 拉取远程仓库到本地仓库并合并分支
git pull
cherry-pick
# 用于把某次提交的内容合并到当前分支(在开发时,工作区的未开发完,此时需要修复bug到mater分支,我们先切换分支到mater,再提交bug fix) --continue
git cherry-pick "bug fix版本号"
rebase 和 merge的区别
# 把一个分支的修改合并到master分支
git rebase -i master
merge合并分支
合并前
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nV8RFk8V-1657803782886)(C:\\Users\\yifanwang.wang\\AppData\\Roaming\\Typora\\typora-user-images\\1657713779312.png)]
合并后
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Bb8K8hFJ-1657803782887)(C:\\Users\\yifanwang.wang\\AppData\\Roaming\\Typora\\typora-user-images\\1657713802043.png)]
过程比较复杂,不够美观
rebase合并分支
合并前
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zIooQ8R3-1657803782888)(C:\\Users\\yifanwang.wang\\AppData\\Roaming\\Typora\\typora-user-images\\1657713817676.png)]
合并后
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cuxHjTgo-1657803782888)(C:\\Users\\yifanwang.wang\\AppData\\Roaming\\Typora\\typora-user-images\\1657713844178.png)]
一线式合并,美观,推荐使用
以上是关于Git学习的主要内容,如果未能解决你的问题,请参考以下文章