# 1 基础流程 ## 1.1 克隆仓库:`git clone` ```bash git clone <远程仓库地址> ``` ## 1.2 添加修改:`git add` 将修改的文件添加到 **暂存区**,准备提交: ```bash git add <文件名> # 添加指定文件 git add . # 添加当前目录下所有修改文件 ``` ## 1.3 提交修改:`git commit` 将暂存区内容提交到本地仓库: ```bash git commit -m "提交说明" ``` 示例: ```bash git commit -m "修复首页按钮样式" ``` ## 1.4 拉取远程更新:`git pull` 获取远程仓库最新内容并合并到本地: ```bash git pull origin <分支名> ``` 示例: ```bash git pull origin master ``` > 💡 在多人协作时,最好先 `git pull` 再修改,减少冲突。 ## 1.5 推送到远程仓库:`git push` 将本地提交上传到远程仓库: ```bash git push origin <分支名> ``` 示例: ```bash git push origin master ``` > ✅ `origin` 是远程仓库默认名称,`master` 是分支名。 ## 1.6 简单流程总结 ```bash # 第一次获取仓库 git clone # 修改代码 git add . git commit -m "说明" # 上传修改 git push origin master # 更新最新远程内容 git pull origin master ``` ## 1.7 创建仓库并推送到远程 ```bash # 初始化git仓库 git init git add README.md git commit -m "first commit" # 将当前本地 Git 仓库关联到一个远程仓库地址,并命名为 origin git remote add origin http://admin@192.168.1.189:8443/r/test.git git push -u origin master ``` # 2 git常用命令流程图 ![img](./assets/%E5%9F%BA%E7%A1%80%E4%BD%BF%E7%94%A8/a30a9158772f0d90f1489d0549c82ea8.png) # 3 git命令速查表 ![在这里插入图片描述](./assets/%E5%9F%BA%E7%A1%80%E4%BD%BF%E7%94%A8/e52275e4370605057995993c4931d483.png) # 4 常见问题 ## 4.1 push之前未pull 报错信息: ```bash D:\code\test\test1>git push origin master To http://192.168.1.189:8443/r/test.git ! [rejected] master -> master (fetch first) error: failed to push some refs to 'http://192.168.1.189:8443/r/test.git' hint: Updates were rejected because the remote contains work that you do not hint: have locally. This is usually caused by another repository pushing to hint: the same ref. If you want to integrate the remote changes, use hint: 'git pull' before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details. ``` 解决方法: ```bash # 先拉取 git pull # 后推送 git push origin master ``` **注意:** 不要强推,可能覆盖他人修改,一般用不到。 ```bash git push -f origin master ``` ## 4.2 合并冲突(修改同一文件) 当 A 和 B 同时修改了同一文件的时候,本地文件和远程文件发生了冲突。Git 无法自动合并,需要你手动解决冲突。 例如: ```bash CONFLICT (content): Merge conflict in a.txt Automatic merge failed; fix conflicts and then commit the result. ``` 意思是: - Git 在合并文件 `a.txt` 时,发现本地和远程对同一部分代码进行了修改; - 无法判断以哪一方为准,自动合并失败; - 需要你手动处理这个冲突。 解决方案: 1. 打开冲突的 `a.txt` 文件,查看里面的内容: ``` <<<<<<< HEAD 12 # 这里是 A 修改的 ======= 1 # 这里是 B 修改的 2 >>>>>>> 6fe1e2d97eae79e0c5080ddea4bdef658841486d ``` 2. 手动修改内容,保留需要的部分。例如: ``` 12 ``` 3. 添加修改后的文件: ```bash git add a.txt git commit -m "解决 a.txt 冲突" git push origin master ``` ## 4.3 fatal: not a git repository 报错: ```bash fatal: not a git repository (or any of the parent directories): .git ``` 原因:你当前所在的目录**不是一个 Git 仓库**,也没有执行 `git init` 或 `git clone`。 解决方法: ```bash # 初始化仓库 git init # 或者你在项目目录外部,cd 回正确的目录 cd your-project-folder ``` ## 4.4 修改文件但 git status 显示未修改 可能的原因: - 你改的是换行符(LF/CRLF)但内容没变; - 编辑器保存规则设置导致未检测到真实修改; - 文件编码问题或隐藏字符。 解决方法: - 用 `git diff` 检查是否真的修改了; - 也可以尝试先改点内容,再恢复,重新保存。 ## 4.5 误删文件 ### 4.5.1 文件误删并已 add 误删了一个文件(比如 `b.txt`),然后执行了: ```bash git add a.txt ``` - 这时候 Git **把删除操作加入暂存区**,等待 commit。 - 文件还没有被 commit,但已经从工作区和暂存区记录为“删除”。 **查看哪些文件被误删** ```bash git status ``` 示例输出 ```bash Changes to be committed: (use "git restore --staged ..." to unstage) new file: a.txt Changes not staged for commit: (use "git add/rm ..." to update what will be committed) (use "git restore ..." to discard changes in working directory) deleted: a.txt ``` **恢复文件** 这会把文件从暂存区移除,但 **不会恢复工作区文件**。 ```bash git restore --staged a.txt ``` 这会把文件从最后一次 commit 的版本恢复到工作区。 ```bash git restore a.txt ``` 或者可以循环恢复多个误删文件: ``` git restore --staged . git restore . ``` > 🔹 `git restore .` 会把所有误删且未 commit 的文件恢复。 ### 4.5.2 文件已 commit,误删未 add 场景说明 - 文件 **已经被 Git commit**(也就是之前已经被保存到版本历史中) - 你在工作区 **误删了该文件** - **还没有执行 `git add`** > 这时候 Git 知道文件原本存在,但工作区已经缺失。 **查看被误删的文件** ```bash git status ``` 示例输出: ```bash Changes not staged for commit: (use "git add/rm ..." to update what will be committed) deleted: a.txt ``` > 🔹 `deleted: a.txt` 就是被误删的文件。 **恢复误删文件(未 add)** ```bash git restore a.txt ``` > 这会从 **最近一次 commit** 恢复文件到工作区。 **检查文件是否恢复成功** ``` git status ``` - 文件会出现在工作区 - `git status` 不再显示 `deleted` # 分支操作 ## 本地创建分支 ```bash git branch test ``` ## 查看分支 命令: ```bash git branch # 查看本地分支 git branch -r # 查看远程分支 git branch -a # 查看本地 + 远程分支 ``` 示例输入: ```bash master * test ================================================= origin/HEAD -> origin/master origin/master origin/test ================================================= master * test remotes/origin/HEAD -> origin/master remotes/origin/master remotes/origin/test ``` ## 切换分支 命令: ```bash git checkout test ``` 示例输入: ```bash Switched to branch 'test' ``` ## 推送分支到远程 假设本地分支名为 `test`,远程仓库名为 `origin`: ```bash git push -u origin test ``` 解释: - `origin` → 远程仓库 - `feature/login` → 分支名 - `-u` → 设置 **上游分支**(tracking branch),即本地分支会自动跟踪远程分支 - 之后可以直接 `git pull` 或 `git push`,Git 会知道对应的远程分支 ## 拉取分支 命令: ```bash git checkout -b test origin/test ``` 这将: 1. 从远程获取 `test` 分支; 2. 在本地创建一个同名分支 `test` 并切换过去; 3. 本地分支会追踪远程的 `origin/test` 分支。 ## 合并分支 ```bash # 切换到 master 分支 git checkout master # 更新 master 分支(可选,确保是最新的) git pull origin master # 合并 test 分支到 master git merge test # 如果有冲突,解决冲突后: git add . git commit # 推送到远程仓库 git push origin master ```