新手必看:Git分布式版本控制与GitHub协作全攻略
你是否经历过这样的绝望:熬夜写完的代码被误删,想找回却无计可施?和新同事协作时,他的修改直接覆盖了你三天的成果,项目瞬间崩盘,你却连是谁改的都不知道?又或者,你想为项目添加一个新功能,却生怕把原本稳定运行的版本搞砸?
如果你点头了,那么恭喜你——Git,正是为你解决这些问题的“后悔药”与“时光机”。作为当今最强大的分布式版本控制系统,Git不仅能帮你精确记录每一次文件变动,让你在任意版本间自由穿梭,更是团队协作的基石。
然而,对于新手来说,Git那抽象的工作区和暂存区概念、动辄十几个参数的命令,确实像一堵高墙。别担心,这篇文章正是为你打破这堵墙而生。我将带你从零开始,用最通俗易懂的语言和实战命令,一步步掌握Git核心操作,并打通与GitHub远程仓库的协作全流程。无论你是学生、开发者还是技术爱好者,跟着这份攻略走一遍,你将从此告别“代码丢失恐惧症”,自信地驾驭你的项目。
git分布式控制系统
github远程仓库
cmd命令
查看文本文件内容:type 文件名 删除文件:del 删除文件夹啊:rd修改管理类
修改文件
cmd 变仓库:git init #文件多了.git文件——版本库 创建文件 添加文件到仓库(暂存区stages):git add 文件名 #添加多个空格分开 提交文件到仓库:git commit -m "说明内容" #全部提交,-m相当于添加注释 每次修改都要重复以上完整操作 git commit提交更改暂存区的所有修改提交到master分支查看
查看仓库状态:git status #modified:需要提交的修改 查看具体修改内容:git diff 文件名 #红色原内容、绿色现内容 查看工作区和版本库里面最新版本的区别:git diff HEAD -- 文件名 # 有输出说明有未提交改动 查看以往操作命令:git relog #可以得到commit id 查看修改历史:git log #显示-m后的说明内容,乱码是commit id 如果嫌输出信息太多加上--pretty=oneline参数回溯
回到之前的版本:git reset --hard HEAD^ ^是上一个版本,^^是上两个版本 也可写成HEAD~100,上100个版本,推荐这种写法 HEAD是当前版本 通过commit id(一般写前几位)git reset --hard 1094a(例)也可以回溯到后面的版本 撤销暂存区修改:git reset HEAD <文件名> --hard会回退到上个版本的已提交状态(一般使用这个) --soft会回退到上个版本的未提交状态 --mixed会回退到上个版本未添加撤销修改
从来没有被添加到版本库就被删除的文件,是无法恢复的!
丢弃工作区的修改:git checkout -- 文件名删除
先手动删除 git rm 文件名 #功能与git add文件名差不多远程仓库
github仓库可以作为备份,也可协作
登陆GitHub,打开“settings”,点击“SSH and GPG Keys”,然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴C:\Users\Administrator\.ssh\id_rsa.pub文件的内容
查看是否存在:dir %USERPROFILE%\.ssh ssh-keygen -t rsa -C "邮箱"- 创建SSH Key(git bash):
- 勾选
Initialize this repository with a README,自动我们创建一个README.md文件
查看远程仓库命令:git remote -v
添加远程仓库
- 右上角找到+按钮,点击new repository
- name填入文件名
- 关联命令:
git remote add origin git@github.com:Github账户名/仓库名.git远程库的名字为origin(在.git/config里)
4.本地库的所有内容推送到远程库:
git push -u origin master 第一次推送要加-u, 目的: 把本地的master分支内容推送到远程新的master分支 把本地的master分支和远程的master分支关联起来后续上传命令(去掉-u):
git push origin master删除远程仓库
1.
git remote rm 仓库名2.在github网站删除
远程仓库克隆
git clone git@github.com:Github账户名/仓库名.git多人协作开发时每人克隆一个
分支
在不影响已上线的功能情况下开发新功能,避免不可逆转的局面
主分支可以独立运行
将未push的分支整理为直线:git log --graph --pretty=oneline --abbrev-commit
1.创建分支:
git checkout -b 分支名(一般为dev) git switch -c 分支名2.查看当前分支:
查看分支合并图:git log --graph
git branch * 表示当前分支 git log --oneline --graph3.上传流程和master一样
4.切换分支:
git checkout -b 分支名 #未创建 git checkout 分支名 git switch -c 分支名 #未创建 git switch 分支名 #已创建5.合并分支:
Git默认Fast forward模式合并分支时可能丢失分支信息
不想删除合并时添加添加--no-ff参数
merge成功自动提交,merge失败不提交
git merge 分支名6.删除分支:
git branch -d 分支名 强行删除:git branch -D 分支名当前分支:<<<<<<<
分割:=======
合并分支:>>>>>>>
发生冲突时再次添加提交可以合并
Bug分支
创建分支来修复bug
存储未完成工作:git stash #可以存储多次 查看已存储的未完成工作:git stash list 删除存储内容:git stash drop 恢复存储内容(不删除):git stash apply 有多个存储内容时git stash apply 存储编号 恢复并删除存储内容:git stash pop. 把某个提交的操作复制到当前分支:git cherry-pick commidID分支多人协作
查看远程库信息:git remote 查看远程库详细信息:git remote -v #没有推送权限,就看不到push的地址 将本地提交推送到远程仓库:git push 远程仓库名(origin) 分支名抓取分支:
远程克隆:git clone git@github.com:账户名/仓库名.git 抓取最新提交:git pull #失败则说明本地和远程未链接 git pull失败:git branch --set-upstream-to=远程库名(origin))/本地分支名 本地分支名标签
在需要打标签的分支上:git tag 标签名 #打在最新提交上 如果要给标签指定说明:git tag -a 标签名 -m "说明内容" commitID 查看标签名:git tag 给历史提交打标签:git tag 标签名 commitID 查看标签信息:git show #按字母顺序排序 删除标签:git tag -d 标签名 删除远程标签: 先删除本地标签 再删除远程标签:git push origin :refs/tags/标签名 #冒号后是标签路径 推送标签到远程:git push origin 标签名 推送所有标签到远程:git push origin 标签名使用github
fork创建克隆仓库,clone下载
至此,你已经完成了从Git小白到能独立协作开发者的蜕变!
我们从一个文件的修改开始,逐步建立版本库,穿梭于时空之间;接着,我们登陆GitHub,学会了如何将本地代码安全地备份到云端,并与他人共享;最后,我们涉足了Git最强大的分支管理领域,掌握了并行开发、紧急修复Bug以及多人协作的标准流程。
这些操作和命令并不是死记硬背的“咒语”,而是你驾驭代码世界的“工具箱”。在未来的编程道路上,git status和git log将成为你最常使用的“眼睛”,而add、commit、push和pull将成为你与团队协作的肌肉记忆。
当然,Git的海洋远不止于此,还有更高级的钩子(Hooks)、子模块(Submodule)和交互式变基(Rebase)等待你去探索。但请相信,有了今天打下的坚实基础,你将能轻松理解并掌握它们。
最后,送给你三句心法:
多提交,勤推送—— 不要怕commit太多,这是你安全的“存档点”。
遇到冲突莫慌张—— 冲突不是bug,是沟通的契机,细心阅读冲突标记并解决它。
不熟悉的操作,先在测试仓库中练手—— 放心大胆地尝试,错了就
git reset,大不了重新克隆。
现在,就打开你的终端,从git init开始,亲手建立一个属于你自己的仓库吧!如果在实践过程中有任何疑问,或希望了解更深度的技巧,欢迎在评论区留言,我们一起交流成长。祝你在版本控制的世界里,游刃有余,尽享编码的乐趣!
