一直用SourceTree,Git 指令用的很少,今天搜索了一下Git指令,虚心学习一下
1. git commit(提交代码)
git commit 用于将已暂存(git add)的修改提交到本地仓库。
使用步骤:
git add . # 将所有修改的文件添加到暂存区
git commit -m "提交信息" # 提交到本地仓库
示例:
git add .
git commit -m "修复了登录界面崩溃的 bug"
如果想一次性添加并提交,也可以用:
git commit -am "快速提交"
注意: -a 只会提交已跟踪的文件(新增的文件仍需要 git add)。
2. git pull(拉取远程代码)
git pull 用于从远程仓库拉取最新代码,并合并到当前分支。
语法:
git pull 远程名 分支名
如果远程名是 origin,当前分支是 main,则可以使用:
git pull origin main
如果你的分支已经和远程绑定了,直接用 git pull 也可以。
注意:
- 如果本地和远程代码冲突,Git 会要求你手动解决冲突后再提交。
3. git push(推送本地代码到远程)
git push 将本地的提交推送到远程仓库,让其他人可以看到你的更改。
语法:
git push 远程名 分支名
如果远程名是 origin,当前分支是 main,则可以使用:
git push origin main
如果是新分支,首次推送时可能需要:
git push -u origin 新分支名
-u 选项会将本地分支和远程分支关联起来,之后 git push 就可以直接推送。
总结
| 操作 | 作用 |
|---|---|
git commit -m "说明" | 提交代码到本地 |
git pull origin 分支 | 拉取远程代码并合并 |
git push origin 分支 | 推送本地代码到远程 |
建议使用 git pull 先同步代码,再 git push,避免冲突。
另外Git 容易遇到各种异常,比如提交错误、推送失败、拉取冲突等。下面是一些常见的异常场景及解决方法。
1. git commit 相关问题
1.1 提交了错误的代码,想要撤回
情况1:还没 push,只是本地提交错误
可以使用 git reset 撤回:
git reset --soft HEAD~1 # 撤回上一次提交,代码保留在暂存区
git reset --mixed HEAD~1 # 撤回上一次提交,代码保留在工作区
git reset --hard HEAD~1 # 彻底删除上一次提交的内容
⚠️
--hard操作不可逆,请谨慎使用!
情况2:已经 push 了,想要撤回
如果你已经 git push 了代码,就需要强制回退,并推送到远程:
git reset --hard HEAD~1
git push --force # 强制推送
⚠️
--force可能会覆盖远程代码,团队协作时需谨慎使用。
2. git pull 相关问题
2.1 git pull 出现冲突
如果你拉取代码时出现类似这样的错误:
CONFLICT (content): Merge conflict in 文件名
说明你的本地修改和远程代码有冲突,需要手动解决:
- 查看冲突的文件(Git 会在文件中标记冲突位置)
- 手动修改冲突部分
- 标记已解决并提交
git add 冲突文件
git commit -m "解决合并冲突"
git push
2.2 git pull 失败,提示 fatal: refusing to merge unrelated histories
如果两个仓库没有共同的提交历史(比如刚 init 的仓库),可以用:
git pull origin main --allow-unrelated-histories
3. git push 相关问题
3.1 git push 失败,提示 rejected (non-fast-forward)
这个错误通常是因为远程有新的提交,而你的本地分支落后了,需要先 pull:
git pull --rebase origin main # 拉取最新代码并变基
git push origin main
如果冲突较多,可以改用 git pull 解决后再 push。
3.2 git push 失败,提示 remote: Permission to xxx denied
这个通常是 没有权限 或 SSH 认证失败:
- 检查你的 SSH key 是否配置正确:
ssh -T git@github.com # 测试 GitHub 连接 - 如果提示
Permission denied (publickey),需要重新添加 SSH key:ssh-keygen -t rsa -C "你的邮箱" cat ~/.ssh/id_rsa.pub # 复制公钥到 GitHub/GitLab
4. 其他异常情况
4.1 fatal: Not a git repository
如果运行 Git 命令时报:
fatal: Not a git repository (or any of the parent directories): .git
说明当前目录 不是 Git 仓库,解决方法:
git init # 如果是新项目,先初始化
或者检查是否进入了正确的项目目录。
4.2 误删了某个文件,想要恢复
git checkout -- 文件名 # 恢复工作区的文件
git reset HEAD 文件名 # 取消暂存区的更改
4.3 想丢弃所有本地修改
git reset --hard HEAD # 撤回所有未提交的修改
git clean -df # 删除未被 Git 追踪的文件
⚠️ 这个操作会删除所有未提交的更改,请谨慎使用!
总结
| 错误情况 | 解决方案 |
|---|---|
git commit 错误提交 | git reset --soft HEAD~1 撤回 |
git pull 冲突 | 手动解决冲突,git add + git commit |
git pull 提示 unrelated histories | git pull --allow-unrelated-histories |
git push 失败,提示 non-fast-forward | git pull --rebase 先同步 |
git push 权限错误 | 检查 SSH key |
fatal: Not a git repository | git init 或进入正确目录 |
| 误删文件 | git checkout -- 文件名 恢复 |
| 丢弃所有本地修改 | git reset --hard HEAD |