全流程git操作命令
git -v 或者git --version查看版本号查看每个文件 / 文件夹的真实总占用大小du -sh * | sort -hrgit config --global user.name lyhgit config --global user.email 2012043702qq.com一、创建git仓库1.将文件初始化为git文件命令git init当你使用git init初始化一个项目或者用git clone下载一个项目时Git 会在你的项目根目录下创建一个名为.git的隐藏文件夹。你的工作区也就是你平时肉眼能看到的、用来写代码的那些文件和文件夹。本地仓库真正的归宿当你执行git add和git commit时Git 会把你当前代码的状态快照经过高度压缩后偷偷存放到这个.git文件夹里面的objects目录中。所以本地 Git 仓库本质上就是你项目目录下的一个隐藏文件夹它充当了一个“本地小型数据库”的角色记录了你代码所有的历史版本。2.从其他服务器上克隆git仓库二、git的三个区域工作区、暂存区、版本库git add . 到暂存区git ls-files 查看暂存区文件git commit -m 要写清楚该版本内容 生成快照版本记录git log --oneline 查看提交历史可以回退到已经提交过的版本三、git文件状态git文件状态未跟踪U和已跟踪新添加A(第一次被git暂存)未修改已修改Mgit status -s 查看暂存区和工作区的文件状态四、清除暂存区检查暂存区状态git status1.为了将多个代码的修改一次进行提交到版本区2.暂存区可以覆盖工作区也就是你修改的代码不想要了直接用之前提交到暂存区的版本git restore 目标文件刚刚在工作区的修改不想要了该修改没有git addgit rm --cached 目标文件 从暂存区删除文件并且该文件的状态变成未跟踪文件还在工作区git rm -r --cached .清除当前目录下所有文件的 Git 暂存缓存五、回退版本查看提交历史git log --onelinegit reflog --oneline 完整的记录包含回退造成的消失的记录想要查看的内容对应的 Git 命令已提交的历史版本列表git log --oneline某次已提交版本的代码详情git show commit-id哪些文件在暂存区待提交git status暂存区里具体的代码改动git diff --cached回退版本git reset --soft 版本号 在不属于该版本的其他文件也会在工作区和暂存区被保留并且状态改为Agit reset --mixed 版本号 在不属于该版本的其他文件会在工作区被保留并且状态改为U,但是在暂存区就没有常用git reset --hard 版本号在不属于该版本的其他文件会在工作区和暂存区被覆盖六、删除文件需求删除某文件并产生一次版本记录做法1.在工作区删除该文件然后git add . 覆盖原本的暂存区最后提交2.在工作区删除该文件然后删除暂存区的文件 git rm --cached 目标文件最后提交七、忽略文件项目根目录新建.gitignore文件填入相应文件名无论在任意文件夹下只写文件或者文件夹的名字就行也要提交.gitignore文件add commitnode_modulesdist.vscode*.log八、分支介绍在 Git 中创建一个新分支就相当于给你当前所在的代码状态拍了一张快照或者说是做了一次“另存为”。新分支会完美继承你创建它那一瞬间的所有代码。下面是具体的情况说明情况一你当前就在main分支上最常见如果你在终端里看到类似(main)的提示符然后你敲下这个命令来创建并切换到新分支git checkout -b lyh新版命令:git switch -c lyh创建名为lyh的新分支并立刻切换到该分支工作结果你的lyh分支会自动包含main分支当前所有的代码。这就好比你打开了main.doc然后点击“另存为”生成了lyh.doc。此时两边的内容一模一样。情况二你当前在别的分支上比如dev如果你当前在dev分支上然后直接运行了git checkout -b lyh。结果你的lyh分支继承的是dev分支的代码而不是main的代码。因为 Git 默认是基于你“当前所在的位置”来分叉的。情况三无论你在哪强制基于main创建新分支如果你不想管自己现在在哪个分支就想明确地基于main创建一个一模一样的lyh分支你可以直接在命令后面加上基础分支的名字git checkout -b lyh main结果无论你当前在哪Git 都会去找到main然后基于main的代码克隆出一个全新的lyh分支。核心总结新分支总是脱胎于一个“母体”。只要你的“母体”选的是main那么新分支lyh刚诞生时里面的代码和main就是完全一样的。之后你在lyh里修改代码、提交commit就只会影响lyh本身不会再影响到main了。创建HEAD指针创建分支命令 git branch 分支名切换分支命令 git checkout 分支名在切换分支以后提交的代码根据分支合并与删除步骤1.切回要合入的分支上 git checkout 分支名 被合并的主分支2.合并其他分支 git merge 分支名合并的你的分支业务3.删除分支 git branch -d 分支名多个分支合并到主分支时按照提交的顺序合并而不是合并的先后合并冲突不同分支中会同一个文件的同一个部分修改git无法干净合并产生合并冲突找到冲突文件并手动解决(vscode给出四种方式)解决后需要继续提交记录lunyilyh MINGW64 /d/git_test (main|MERGING)避免冲突不同分支公共代码在统一文件夹下维护软件库的版本统一九、git远程仓库一、需求创建远程版本库并把本地 Git 仓库推送上去保存二、操作步骤注册第三方托管平台网站账号新建仓库得到远程仓库 Git 地址已有本地 Git 仓库添加远程仓库原点地址基础命令git remote add 远程仓库别名 远程仓库地址示例git remote add origin ***.git本地 Git 仓库推送版本记录到远程仓库基础命令git push -u 远程仓库别名 本地和远程分支名简写示例git push -u origin master完整写法git push --set-upstream origin master:master三、流程示意图逻辑本地电脑仓库 → 执行git push命令 → 云端远程仓库完成本地代码上传至远程托管平台。git remote -v 查看仓库地址git remote remove 仓库别名 删除远程仓库重新配置远程仓库一个本地仓库最好对应一个远程仓库四、Gitee HTTPS 分步解决方案按顺序执行Gitee HTTPS 推送不支持账号登录密码必须使用「私人访问令牌」作为密码本地已缓存了错误的账号 / 密码Git 反复复用错误凭证不会弹出新的输入框步骤 1清空本地缓存的错误 Gitee 凭证二选一即可推荐方法 B方法 AGit Bash 命令行清除直接复制执行# 清除gitee.com域名下所有缓存的凭证 printf protocolhttps\nhostgitee.com\n | git credential reject方法 BWindows 图形化清除最稳妥不会出错按下Win R输入control keymgr.dll回车打开凭据管理器切换到「Windows 凭据」找到所有名称包含gitee.com的条目逐个点击「删除」清空所有 Gitee 相关凭证步骤 2生成 Gitee 私人访问令牌必须不能用登录密码浏览器登录 Gitee 官网点击右上角头像 → 「设置」左侧菜单栏找到「私人令牌」点击「生成新令牌」填写令牌描述如git-push权限至少勾选projects仓库读写权限点击提交复制生成的令牌字符串并保存仅显示一次关闭后无法查看步骤 3重新推送 main 分支回到 Git Bash 执行推送命令git push 远程仓库别名 本地分支名food远程仓库别名也就是你的目的地。你想把代码推送到project-handover.git而你已经把这个仓库地址命名为了food。main本地分支名也就是你要推送的内容来源。从你的终端提示符(main)可以看出你当前所在的分支叫main。git push -u origin main执行后会弹出账号密码输入框用户名填写你的 Gitee 正确用户名YH--L密码粘贴上一步复制的私人令牌不要填登录密码可选永久记住凭证不用每次输入推送成功后执行后续无需重复输入git config --global credential.helper manager-core多人协同开发首先需要clone仓库代码到本地后续进行拉取最新版本git pull 要拉取的仓库别名 要拉取的仓库分支git clone https://gitee.com/YH--L/git_study.gitgit pull originmain推送失败情况1远程仓库Gitee上存在你本地没有的提交Commit。报错提示非常直白hint: Updates were rejected because the remote contains work that you do not have locally.更新被拒绝因为远程仓库包含你本地没有的工作/提交。原因线上生成了新文件/修改你在 Gitee 上手动修改了文件比如直接在网页上编辑了README.md或者在创建仓库时勾选了“初始化 README”/“添加 .gitignore”。多端提交你在其他电脑上向这个仓库提交并推送过代码。Git 为了防止你本地的代码直接覆盖远程已有的修改所以强制拦截并要求你先拉取合并远程代码再推送。解决方案推荐按照以下步骤执行方法一先 Pull 再 Push推荐安全标准做法在终端中依次运行以下命令拉取远程代码并合并git pull route main --rebase参数说明route是你的远程仓库别名main是分支名。--rebase可以让你的提交“添加详细注释”树状图更加整洁避免产生额外的 Merge Commit。如果出现冲突按提示解决冲突后执行git rebase --continue即可若无冲突则会自动合并。重新推送到远程git push -u route main方法二强制推送⚠️ 谨慎使用如果你确定远程仓库里多出来的东西比如网页端自动生成的README.md不重要或者确定要完全以你本地的代码为准可以使用强制推送直接覆盖远程分支git push -u route main -f⚠️注意-f/--force会直接抹去远程仓库中领先于本地的提交如果是团队协作项目千万不要滥用如果是你个人新建的空仓库此操作是快捷有效的。情况二大量残余文件解决方案1. 彻底删除本地旧的 Git 历史文件夹rm -rf .git2. 把写错名字的 gitignore 重命名为标准的 .gitignore确保有个“.”mv gitignore .gitignore3. 重新初始化一个全新、干净的 Git 本地仓库git init4. 重新添加所有内容进暂存区此时正确的 .gitignore 会完美把 data 拦截在外git add .5. 检查暂存状态git status⚠️ 注意此时绿色的文件列表中应该只有你的几 KB 脚本文件绝对不能有 data/ 的影子6. 提交这个完全干净的首次版本git commit -m initial commit: 提交识别核心代码7. 重新关联你的 Gitee 远程仓库git remote add origin https://gitee.com/YH--L/dietary_milvus7_14.git8. 强制推送秒速成功git push -u origin master -f