赞
踩
下载比较慢
windows:Git-2.44.0-64-bit.exe
一路默认
sudo apt-get install git
设置一下名字和email地址
- $ git config --global user.name "Your Name"
- $ git config --global user.email "email@example.com"
获取要git的文件夹地址:例如D:\project\my_project
git init
使用git init命令创建仓库,并会生成一个.git文件
git只能追踪文本文件比如代码,网页,txt等而像视频,图片甚至ms word这种二进制文件是无法具体追踪的
注意:尽量不使用微软自带的txt编辑工具
在创建仓库的目录下D:\project\my_project写一个readme.md文件为例,放入仓库中
- # 添加到仓库
- git add readme.md
- #提交
- git commit -m "wrote a readme file"
可以修改readme文件--> git add -->git commit -->修改readme文件--> git add -->git commit
反复做几个版本
git log
查看更改记录
如何回退到第一个版本呢
图片中的HEAD表示当前版本,所以上一个是HEAD^,上上个是HEAD^^,上100个是HEAD~100
所以回退到上一个版本就是:
git reset --hard HEAD^
也可以直接回退到哪个版本的id
git reset --hard 60e4583db96cbd1daccc9656218f3e65ffc55352
但是这样出现一个问题,就是只剩下那个版本之前的记录了,也就是时空穿越回过去但是却回不来了,靠之前的id吗?也可以但是太麻烦了
git reflog
可以查看自己的每一次的操作命令
此时可以看到之前的ID是6aeefdf,同时你也发现ID那么长其实只需要前几位就可以回溯了
当然不做改动工作区就是干净的,暂存区就是先不断收集修改行为,然后一起commit到仓库中
而且commit只是把暂存区的行为添加到仓库,而无法提交工作区的修改
Git管理的是修改,而不是文件
使用:
git checkout --readme.md
这样把工作区的readme.md状态重新恢复到上一次commit或add的状态
为了更深的理解checkout看这个例子的应用
删除文件后使用git status 查看状态:
会发现deleted: readme.md,但是此时如果是误删,那么可以用版本库的文件即暂存区或仓库最近的版本恢复,也是使用:
注意空格:
git checkout -- readme.md
如果确实是要删除,那么删除后使用git add<file>的效果和直接使用git rm <file>的效果一样,因为删除也是一种修改
首先在github创建一个新的空仓库,老感觉不带梯子卡卡的
按照说明把之前的本地仓库同步过去
报错:fatal: unable to access 'https://github.com/CscZhang/HelloGit.git/': Failed to connect to github.com port 443 after 21082 ms: Couldn't connect to server
只需要刷新 DNS 解析缓存即可:
ipconfig/flushdns
然后再输入:
- git remote add origin git@github.com:michaelliao/learngit.git
- git branch -M main
- git push -u origin main
其中,最后的-u是第一次不仅仅push,而且还完成了关联的操作
然后做了修改直接git push
报错: Failed to connect to github.com port 443 after 21094 ms: Couldn't connect to server
关了代理试试
git clone不赘述了
为什么创建分支,将产品的功能分发给多个人做,然后将测试稳定的功能合并到主干上
即,HEAD指向当前分支,master(我的是main)指向主分支
创建分支并切换到这个分支:
- git switch -c dev
- #等同于
- #创建 git branch dev
- #切换 git switch dev
用git branch
命令查看当前分支:
git branch
星号则为当前分支
合并:
git merge dev
合并完成后就可以删除分支了:
git branch -d dev
使用git branch查看是否删除成功
先分别在两个分支下做不同的修改,此时快速合并就失效了,那么可以通过git status发现改变,更好的是直接打开发生冲突的修改的文件会有很清晰的标示说明冲突
非常清晰
通过下面这个加参可以看到明显修改
git log --graph --pretty=oneline --abbrev-commit
主要是理解这个功能的意义和作用,它的作用就是在你修改分支写一半时不想写时也不想commit时,就会用stash储存到一个文件里单独放到一个地方,之后也不上传,但是这样有丢的风险,具体意义的话还理解不够透彻
git stash
- git stash list
- #恢复并删除:
- git stash pop
- #恢复:
- git stash apply
- #删除:
- git stash drop
不需要重新操作一次,直接把修bug的操作复制过来
git cherry-pick 4c805e2
有些聪明的童鞋会想了,既然可以在main的分支issue01上修复bug后,在feature分支上可以“重放”这个修复过程,那么直接在dev分支上修复bug,然后在master分支上“重放”行不行?当然可以,不过你仍然需要
git stash
命令保存现场,才能从dev分支切换到master分支。
- $ git branch -d feature-vulcan
- error: The branch 'feature-vulcan' is not fully merged.
- If you are sure you want to delete it, run 'git branch -D feature-vulcan'.
但是没有合并的话,git会要求你使用 -D来确认删除
查看远程库的信息
- git remote
- #更详细的
- #git remote -v
使用-v的话可以看到推送和抓取的地址:
推送分支,就是commit到分支的所有修改的操作要同步到远程库时:
可以:
- #git push <远程库> <要推送的本地分支名称>
- git push origin main
- #或者
- #git push origin dev
但是,并不是一定要把本地分支往远程推送,那么,哪些分支需要推送,哪些不需要呢?
main
分支是主分支,因此要时刻与远程同步;
dev
分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;
feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。
一样的git clone就可以了
但是会发现这样只是抓取了main的分支,而没有feature,需要再抓取一次:
git checkout -b feature
回顾一下:
当另一个user git clone并做了修改后想要push到远程仓库,出现错误:
因为远程仓库的内容被其他user做了修改,这时两个人的修改出现了冲突
提示:更新被拒绝,因为您当前分支的尖端落后于其远程对应分支。如果您想集成远程更改,请在再次推送之前使用 'git pull'。详情请参阅 'git push --help' 中的“关于快速前转的说明”。
按照提示将远程仓库版本的分支抓取下来,然后本地合并解决冲突
- # git pull <remote> <branch>
- git pull origin feature
注意:直接使用git pull是会出错的,因为没有链接本地feature与远程库的feature的分支,需要:
git branch --set-upstream-to=origin/feature feature git pull
然后再git push自己的修改
这样会导致提交历史不是一条直线,对于有强迫症的人来说也可以使用
git rebase
来使得提交历史是一条直线:
- #查看:
- git log
然后再推送到远程仓库
注意:标签总是和某个commit挂钩。如果这个commit既出现在master分支,又出现在dev分支,那么在这两个分支上都可以看到这个标签。
git tag <tag_name> <id>
没有id默认是对最新的一次commit打标签
- #查看所有标签
- git tag
- #查看具体标签信息
- git show <tag_name>
也可以加上说明文字:
git tag -a v0.1 -m "version 0.1 released" 1094adb
同时发现,可以给一个commit打两个标签
- #删除标签
- git tag -d v0.1
标签只存在于本地不会推到远程仓库,除非把特定标签推到远程仓库
git push origin v1.0
或者把所有标签都推到远程仓库:
git push origin --tags
删除远程仓库的标签比较麻烦:
- #先删除本地的
- git tag -d v0.1
- #再推到远程
- git push origin :refs/tags/v0.1
本文大概由自身学习路线出发学习精简集合一些心得体会所作总结,难免有错误之处希望指正!
最后git学起来很快但还是要有需求去使用,附廖雪峰老师的指令表:git-cheat-sheet (gitee.io)
1.廖雪峰老师博客:期末总结 - 廖雪峰的官方网站 (liaoxuefeng.com)
2.git网络出现问题:Git报错: Failed to connect to github.com port 443 解决方案-CSDN博客
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。