通过网站做外贸,竞价推广账户竞价托管收费,广东人社厅网上服务平台,wordpress微信采集器写在前面#xff1a;研究生一年多了#xff0c;一直浑浑噩噩的#xff0c;在深度学习的泥潭挣扎了好久#xff0c;终于走出了精神内耗的泥潭…好久没有写博客了#xff0c;决定重新捡起来…记录一下学习吧~
之前写了一篇git的博客#xff0c;【github 从0开始的基本操作…写在前面研究生一年多了一直浑浑噩噩的在深度学习的泥潭挣扎了好久终于走出了精神内耗的泥潭…好久没有写博客了决定重新捡起来…记录一下学习吧~
之前写了一篇git的博客【github 从0开始的基本操作到fork和pr项目】感觉就是快速入门没有掌握精髓今天重新学习一下
感谢【GeekHour】在b站提供的免费视频教程
看了看了以前的博客有种梦回初始的感觉
优雅的分割线↓ 文章目录 初始化配置新建仓库工作区和文件状态添加和提交文件查看提交记录reset 版本回退diff 查看版本差异删除文件.gitignore 忽略文件关联远程GUI分支branch解决冲突rebase变基merge和rebase优缺点工作流 gitflowGitHubflow 初始化配置
查看版本 git -v 配置全局用户名 git config --global user.name likeghee 配置全局邮箱 git config --global user.email likeghee163.com 保存用户名和密码 git config --global credential.helper store 查看配置信息 git config --global credential.helper store
新建仓库
先在github创建仓库 然后用git clone远程仓库拉取 git clone
工作区和文件状态
git的本地数据管理分为三个区域 分别是工作区暂存区和本地仓库
工作区.git所在目录我们实际操作的目录 暂存区.git/index用于临时存放即将提交修改的内容 本地仓库.git/objectsGit存储代码和版本信息的主要位置
git add从工作区提交到暂存区 git commit从暂存区提到本地仓库
文件状态 查看当前仓库的状态 git status 为跟踪untrack新创建还没有被git管理 未修改unmodifiedgit管理但是文件内容没有发生变化 已修改modifiedgit管理已经修改的文件但是还没有添加到暂存区中 已暂存staged已添加到暂存区中
添加和提交文件
创建文件 这里我创建了一个a.py用git status查看当前仓库的状态
红色就是未被跟踪的状态使用git add a.py添加到暂存区再用用git status查看当前仓库的状态现在的文件已经是绿色表示现在这个文件已经被添加到了暂存区等待被提交同时bash还提示我们使用git restore --staged file...可以取消暂存 提交到本地仓库 git commit -m 第一次提交测试
可以使用通配符提交文件 git add *.py 添加当前目录所有文件 git add .
交互式提交仓库 git commit 在第一行写下提交信息 :wq提交至仓库
查看提交记录
查看提交记录 git log 查看简洁的提交记录 git log --oneline reset 版本回退
git reset --soft id回退到某个版本并且保留工作区和暂存区的所有内容 git reset --hard id回退到某个版本并且丢弃工作区和暂存区的所有内容 git reset --mixed id--mixed是默认参数回退到某个版本只保留工作区而丢弃暂存区内容 id使用git log --oneline查看
一般来说当我们连续提交了多个版本但是又觉得这些提交有没有太大的意义可以合并成一个版本的时候就可以通过–soft或者–mixed这两个参数回退之后再重新提交使用--soft 可以节省一步git add的操作
一般谨慎使用--hard这个参数工作区都删除了那么就无法找回了
误操作可以使用git reflog查看操作的历史记录找到误操作之前的版本号 再使用git reset --hard id回到之前版本即可
diff 查看版本差异
diff可以查看工作区、暂存区、本地仓库之间的差异 也可以查看不同版本之间的差异 或者两个分支之间的差异
开发的时候我们更多会使用GUI工具
我在a3.py添加了一行123 使用git diff查看修改内容默认比较工作区和暂存区之间的内容 git会将文件的内容使用hash算法生成一个40位的hash值 e69de29..d800886就是hash值的前7位和后7位 100644 表示文件权限 红色表示删除绿色表示添加
比较工作区和版本库之间的差异 git diff HEAD
比较工作区和版本库之间的差异 git diff --cached
比较两个版本之间的差异 git diff id1 id2
比较版本和当前版本之间的差异 git diff id1 HEAD
比较上个版本和当前版本之间的差异 git diff HEAD~ HEAD
比较上两个版本和当前版本之间的差异 git diff HEAD~2 HEAD
比较上个版本和当前版本中具体文件的差异 git diff HEAD~ HEAD a.txt
删除文件
删除文件 再用git add提交暂存区
这样有的人觉得太麻烦可以使用 git rm 将上面的两步合并
只删除版本库的文件保留工作区文件 git rm --cached
但是最后都是需要用git commit提交至版本库
.gitignore 忽略文件
应该忽略哪些文件 系统或者软件自动生成的文件 编译生成的中间文件 运行过程中生成的日志文件、缓存文件、临时文件 涉及身份、密码、口令、密钥等敏感信息文件
.idea要不要提交到仓库里我看了下这篇知乎文章
.idea目录下的文件中有包含隐私的内容比如你的文件操作变动、用户词典、系统环境变量、数据库密码等等所以我为了安全考虑就不提交到仓库了 在git项目的根目录下添加一个 .gitignore 文件
.gitignore 文件中写上我们将要屏蔽的文件.idea/ 注意文件夹格式是以/结尾的
.idea/再用git status查看就屏蔽了这两个文件了
注意不会忽略doc下子目录下的.txt文件 doc/*.txt 如果要忽略可以使用 doc/**/.txt
关联远程
… or create a new repository on the command line
echo # test README.md
git init
git add README.md
git commit -m first commit
git branch -M main
git remote add origin https://github.com/yyz159756/test.git
git push -u origin main… or push an existing repository from the command line
git remote add origin https://github.com/yyz159756/test.git
git branch -M main
git push -u origin main:mainGUI
https://git-scm.com/downloads/guis
推荐SourceTree
分支branch
创建一个dev分支 git branch dev
切换到dev分支 git switch dev
模拟一下dev的分支情况现在main分支和dev分支已经分叉了实际工作中这样情况是非常常见的现在我们需要把dev分支合并到主线代码中
切换到main使用 git merge dev 将dev合并到main分支中
如果一个分支已经被合并到其他分支了那么可以使用 git branch -d dev 来删除dev分支
解决冲突
我们创建一个feat分支修改a.py 切换回main分支我们也修改a.py 这样我们就有两个分支同时修改了a.py 我们在main分支尝试合并feat分支 git merge feat
就会出现conflict提示
使用git status查看冲突文件列表 git diff 查看具体的冲突的内容
号上面的内容是main分支修改的内容 号下面的内容是feat分支修改的内容
我们需要手动编辑这个文件 经过修改我们解决冲突 再进行git add和git commit 那么就自动完成了合并的过程
rebase变基
变基操作会找到当前两条分支的共同祖先再把当前分支上从共同祖先到最新提交记录的所有提交移动到目标分支最新的提交的后面 变基到main可以形象的表示成当前分支嫁接到main
切换dev变基到main那么就dev分支就会变基到dev 切换到main变基到dev那么main分支会变变基到dev 我们用之前学习的版本回退git rest来继续做实验
切换到dev然后rebase
这时候dev分支就变基到了main上
merge和rebase优缺点
merge优点不会破坏原分支的提交历史方便回溯和查看 缺点会产生额外提交节点分支图复杂
rebase优点不会新增额外的提交记录形成线性历史比较直观 缺点改变提交历史改变了当前分支branch out的节点避免在共享分支上使用
工作流 gitflow
gitflow
main只允许合并分支修改 hotfix从main分支分离修复完成后合并到main分支一般会将hotfix分支删除 dev从main分支分离项目的核心分支 feat从dev分支分离用于开发新的功能 release预发布分支从dev分支分离稳定后合并到主分支中再将预发布分支删除
GitHubflow
只有main分支长期存在 1.git clone // 到本地 2.git checkout -b feat 切换至新分支feat 相当于复制了remote的仓库到本地的xxx分支上 3.修改或者添加本地代码部署在硬盘的源文件上 4.git diff 查看自己对代码做出的改变 5.git add 上传更新后的代码至暂存区 6.git commit 可以将暂存区里更新后的代码更新到本地git 7.git push origin feat 将本地的featgit分支上传至github上的git 如果在写自己的代码过程中发现远端GitHub上代码出现改变 1.git checkout main 切换回main分支 2.git pull origin master(main) 将远端修改过的代码再更新到本地 3.git checkout xxx 回到xxx分支 4.git rebase main 我在xxx分支上先把main移过来然后根据我的commit来修改成新的内容 中途可能会出现rebase conflict -----》手动选择保留哪段代码 5.git push -f origin xxx 把rebase后并且更新过的代码再push到远端github上 -f —》强行 6.原项目主人采用pull request 中的 squash and merge 合并所有不同的commit 远端完成更新后 1.git branch -d xxx 删除本地的git分支 2.git pull origin master 再把远端的最新代码拉至本地