常用命令备忘录(git)

git

基础设置

git config --global user.name "用户名"
git config --global user.email 邮箱

获取推送代码至远程仓库的ssh权限

HTTPS 方式:GitHub 需用 “用户名 + PAT 令牌”(2021 年起停用账号密码),PAT 令牌需在 GitHub 的 “Developer settings” 中创建,配置仓库读写权限。

本地生成 SSH 密钥(一路yes/Enter)

ssh-keygen -t rsa -C 邮箱

终端找到 "your public key has been saved in ...(路径)" 按路径找到这个文件,全选复制 → 在github settings找到 "SSH and GPG keys" → "New SSH Key" → title随便取名,刚刚复制的内容粘贴到Key输入框 → 点击add (本设备绑定后无需重复校验)

Git 与远程仓库协同基础

  1. 本地与远程仓库绑定(两种方式)
  • 方式一:

    git clone + 仓库链接HTTPS
    

    适合本地无代码的场景,可自动绑定并下载远程仓库内容,也可用于拉取他人项目代码。

  • 方式二:

    git init 
    git remote add origin(别名) 仓库链接https。
    

    适合本地已有代码的场景,“别名” 默认用origin,可自定义(如区分 GitHub 和 Gitee 平台)。

  1. 代码提交与推送

    代码提交

    git add .(添加所有文件到暂存区)

    git add . 
    git commit -m "提交说明"
    

    添加所有文件到暂存区 → 完成本地提交

    推送代码

    git push origin(别名) main(分支名)
    
  2. 远程最新代码拉取到本地

    git pull origin main
    

单人与多人开发流程

1. 单人开发流程

  1. 绑定本地与远程仓库,默认生成main分支(存稳定代码)。git branch可以查看分支。
  2. 如果想进行开发,就执行git checkout -b develop创建并切换到develop分支。并编写代码
  3. 开发完成之后通过git add .git commit -m "说明" 提交代码。
  4. 切换回master分支(git checkout master),执行git merge develop合并代码。
  5. git push origin main将代码推送到远程,完成开发。

2. 多人协作流程(以 “开发点赞功能” 为例)

  1. 项目长期保留master(稳定代码)和develop(开发代码)两个分支。
  2. 基于develop创建功能分支:git checkout develop(切换到开发分支)→ git checkout -b dianzan(创建并切换到功能分支)。
  3. 完成开发并提交代码:git add .git commit -m "说明"
  4. 拉取远程最新代码:git checkout developgit pull origin develop(同步同事已上传的代码)。
  5. 合并与推送:git merge dianzan(合并功能代码到develop)→ git push origin develop(推送到远程),确保团队代码同步。

git rebase

git rebase 是 Git 中用于整合分支修改的重要命令,其核心作用是将一个分支的提交 “移植” 到另一个分支的基础上,形成更线性、清晰的提交历史。与 git merge 相比,rebase 能避免产生合并提交(merge commit),让历史记录更简洁。

核心原理

假设你在分支 feature 上开发,同时主分支 main 有了新的提交,rebase 会将 feature 分支的所有提交 “重新基于” main 的最新提交,相当于把 feature 的开发过程 “搬到” main 的最新状态之后,仿佛你是在 main 最新版本的基础上开始开发 feature 一样。

基本用法

1. 将当前分支基于目标分支重新提交

git checkout 待整合的分支  # 例如 feature 分支
git rebase 目标分支        # 例如 main 分支

示例:将 feature 分支基于 main 最新提交重新调整

git checkout feature
git rebase main

2. 解决冲突

在 rebase 过程中,如果两个分支修改了同一文件的同一部分,会产生冲突,此时 Git 会暂停 rebase 并提示冲突文件。解决步骤:

  1. 手动编辑冲突文件,解决冲突(保留需要的内容)。

  2. 将解决后的文件标记为已解决:

    git add <冲突文件>
    
  3. 继续 rebase 过程:

    git rebase --continue
    

    若想放弃 rebase,执行

    git rebase --abort
    

交互式 rebase(git rebase -i

通过 git rebase -i 可以修改、合并、删除提交历史(仅建议修改本地未推送的提交),让历史更整洁。

用法:

git rebase -i <基准提交ID或分支名>

例如,修改最近 3 次提交:

git rebase -i HEAD~3  # HEAD~3 表示当前提交的前 3 次提交

执行后会打开编辑器,显示最近 3 次提交的列表,格式如下:

pick a1b2c3d 第一次提交信息
pick e4f5g6h 第二次提交信息
pick 7i8j9k0 第三次提交信息

常用命令(修改每行开头的 pick 为以下命令):

  • pick:保留该提交(默认)。
  • reword:保留提交内容,但修改提交信息。
  • edit:保留提交,但暂停 rebase 以便修改提交内容(如补充文件)。
  • squash:将当前提交合并到上一个提交(保留所有提交信息)。
  • fixup:将当前提交合并到上一个提交(只保留上一个提交的信息)。
  • drop:删除该提交。

修改后保存退出,Git 会按指令处理提交历史。

git merge 的区别

场景 git merge git rebase
历史记录 保留分支合并痕迹(会产生 merge commit) 历史线性化,无合并提交
适用场景 公共分支(如 main)合并功能分支 功能分支开发中同步主分支最新代码
对提交的影响 不修改已有提交,新增合并提交 会改写提交的哈希值(相当于创建新提交)

注意事项

  1. 不要在公共分支(如 main)上执行 rebase:公共分支的提交被多人依赖,rebase 会改写历史,导致团队成员冲突。
  2. rebase 后推送需谨慎:如果已将分支推送到远程,rebase 后需要强制推送(git push -f),但可能覆盖他人修改,仅建议在个人分支或确认无冲突时使用。
  3. rebase 是 “改写历史” 的操作:修改已推送的提交可能导致协作混乱,尽量只对本地未推送的提交使用 rebase -i

总结

git rebase 的核心价值是整理提交历史,让分支演进更清晰。合理使用(如功能分支开发中同步主分支、美化本地提交)能提升代码管理效率,但需注意避免在公共分支上滥用,以免破坏协作。

其他命令

查看工作区状态

git status
  • 红色文件:未跟踪(新文件)或已修改但未暂存

修改最近一次提交:

如果提交后发现遗漏或信息写错,可补充修改后执行:

git commit --amend -m "新的提交说明"

回退版本

查看提交历史,确定要回退的版本,首先需要找到目标版本的 commit ID(通过哈希值标识),使用以下命令查看提交记录:

git log  # 显示详细提交历史(按 q 退出)
# 简化显示(只显示 commit ID 和提交信息):
git log --oneline

记住目标版本的 commit ID(如 e4f5g6h)。

1. 回退本地版本(未推送到远程)

如果只是本地提交需要回退,常用以下两种方式:

方式 1:git reset(彻底回退,适合未推送的提交)

  • 硬回退(--hard:彻底删除目标版本之后的所有提交,工作区代码也会恢复到目标版本(谨慎使用,会丢失后续修改):

    git reset --hard <commit ID>
    
  • 软回退(--soft:仅回退提交记录,保留工作区和暂存区的修改(后续可重新提交):

    git reset --soft <commit ID>
    

方式 2:git revert(创建新提交抵消旧提交,适合需要保留历史的场景)

revert 不会删除历史提交,而是生成一个新的提交来抵消目标版本的修改,适合已推送或需要保留历史的情况:

git revert <commit ID>

执行后会自动打开编辑器,填写 revert 提交信息,保存退出即可。

2. 回退已推送到远程的版本

如果错误版本已经推送到远程仓库(如 GitHub/GitLab),需要同步远程版本:

情况 1:使用 git reset 后强制推送(谨慎!会覆盖远程历史)

适合团队内部且确认其他人没有基于错误版本开发的场景:

# 先本地回退
git reset --hard <目标 commit ID>
# 强制推送到远程(覆盖远程历史)
git push -f origin <分支名>  # 如 main 或 master

情况 2:使用 git revert 后正常推送(推荐,安全)

生成抵消提交后,正常推送到远程,不影响历史:

git revert <错误 commit ID>
git push origin <分支名>

3. 撤销工作区 / 暂存区的修改(未提交)

如果还没提交,只是想撤销工作区或暂存区的修改:

  • 撤销工作区修改(恢复到最近一次提交的状态):

    git checkout -- <文件名>  # 单个文件
    git checkout .            # 所有文件
    
  • 撤销暂存区修改(放回工作区):

    git reset HEAD <文件名>  # 单个文件
    git reset HEAD .        # 所有文件
    

注意事项

  • git reset --hard 会彻底删除目标版本后的提交,且无法恢复,操作前建议备份或确认。
  • 远程仓库回退时,git push -f 可能需要仓库权限,且可能影响协作成员,尽量用 revert
  • 若回退后想恢复到最新版本,可通过 git reflog 查看所有操作记录,找到最新 commit ID 再 reset 回去。

删除git记录

如果需要删除所有提交历史,只保留当前工作区的内容作为 “第一次提交”,可以通过创建一个新的空白分支来实现(这种方式会彻底清除历史记录,操作需谨慎)

操作步骤:

  1. 创建一个新的空白分支以当前工作区内容为基础,创建一个没有任何历史记录的分支(例如命名为 new-main):

    git checkout --orphan new-main
    

    --orphan 选项会创建一个新分支,该分支没有父提交,因此历史记录为空。

  2. 暂存当前所有文件将工作区的所有文件添加到暂存区:

    git add .
    

    (如果有不需要提交的文件,确保已在 .gitignore 中配置,避免误提交)

  3. 提交当前内容作为新分支的第一次提交提交暂存区的文件,这将成为新分支的唯一历史记录:

    git commit -m "初始化项目(清除历史记录后)"
    
  4. 删除原主分支(如 mainmaster删除原来的主分支(注意:确保当前已切换到 new-main 分支,否则无法删除):

    git branch -D main  # 假设原主分支是 main,若为 master 则替换为 master
    
  5. 将新分支重命名为原主分支名new-main 分支改回原主分支的名称(如 main):

    git branch -m main
    
  6. 强制推送到远程仓库(覆盖远程历史)如果需要同步到远程仓库,需强制推送(会覆盖远程的所有历史记录,团队协作时需提前通知成员):

    git push -f origin main
    

注意事项:

  • 此操作会彻底删除所有历史提交记录,且无法恢复,执行前建议备份仓库。
  • 强制推送(git push -f)会覆盖远程仓库的历史,若团队中有其他人基于旧历史开发,会导致冲突,需确保所有人都切换到新的历史。
  • 如果只是想 “隐藏” 历史而不是删除,可考虑使用 git rebase -i 合并历史,但本质上历史仍可追溯;上述方法是真正清除历史的唯一方式。
posted @ 2025-10-19 22:49  byxxx  阅读(0)  评论(0)    收藏  举报