🧑💻 Git常用核心命令实操总结(新手避坑版)

作为常年跟代码打交道的程序员,Git命令用得多但总容易记混,整理了一套日常高频实操命令,全是工作中实打实会用到的,新手直接照抄,避开不必要的坑,建议收藏备用

✅ 核心场景划分:本地无项目(首次拉取)、本地已有项目(日常开发),每一步都带简单备注,不用死记硬背,跟着操作就行。


零、在使用前还需安装git bash工具

1、在https://git-scm.com/download/win下载、安装完成以后将"你的git路径\Git\cmd"加入环境变量,即可在命令行启动了;
2、配置:win+R输入cmd启动命令行,然后输入自己的username和email

git config --global user.name "username"
git config --global user.email "email"

3、查看一下是否配置成功

git config --list

4、最后你可以在你本地的代码工作区、右击点击启动git bash即可

一、本地无项目,从远程拉取仓库(最常用场景)

适合刚接手项目、第一次获取代码的情况,直接克隆远程仓库到本地,一步到位,不用手动初始化。

1. 克隆远程仓库到本地工作区

git clone git@gitlab.com:xxx.git

>博主这里用的是gitlab仓库,主流的仓库还有gitee,github,这个在自己的项目界面点击复制,下面会有让你复制的http链接
这个链接

📌 备注:克隆完成后,本地会自动生成和远程仓库同名的文件夹,里面包含完整的项目文件和Git配置,无需再手动关联远程。

2. 修改代码后,提交到本地仓库

先把修改的文件放到暂存区,再提交到本地仓库,提交说明一定要写清楚,方便后续回滚和查看记录。

# 方式1:添加指定文件(精准控制,适合修改少量文件)
git add xxx.cpp yyy.h

# 方式2:添加所有修改文件(懒人必备,推荐日常使用)
git add .

# 提交到本地仓库,-m 后面跟提交描述,必须写!
git commit -m "新增xxx功能/修复xxxbug/优化xxx逻辑"

3. 关联远程仓库(备用:克隆未自动关联/需切换远程地址时用)

git remote add origin git@gitlab.xxx.git

📌 备注origin 是远程仓库的固定别名,后续推送、拉取都用这个别名,不用重复写冗长的仓库地址。

4. 推送到远程仓库,完成代码更新

# 第一次推送必须加 -u,绑定本地master分支和远程master分支
git push -u origin master

# 后续推送无需加 -u,直接执行
git push

二、本地已有项目,日常拉取远程最新代码(避免冲突关键)

日常开发中,多人协作时每次写代码前一定要先拉取远程最新代码,避免出现代码冲突,分享两种常用方法,按需选择。

方法1:rebase方式(✅ 推荐!提交记录更干净)

这种方式会把本地未提交的修改临时存起来,拉取远程代码后线性合并,不会生成多余的合并节点,提交记录更整洁,适合多人协作场景。

# 1. 临时保存本地未提交的代码(防止拉取时冲突丢失)
git stash

# 2. 拉取远程master分支最新代码,并自动线性合并
git pull --rebase origin master

# 3. 恢复之前临时保存的本地代码,继续开发或提交
git stash pop

💡 补充:如果本地没有未提交的修改,可直接执行 git pull --rebase origin master,跳过stash步骤。

方法2:fetch + merge方式(✅ 手动合并,适合新手)

这种方式会先下载远程最新代码,不自动合并,需要手动对比差异后合并,适合对Git操作不熟悉、想手动控制合并过程的新手。

# 1. 只下载远程最新代码,不自动合并到本地
git fetch

# 2. (可选)查看本地代码和远程最新代码的差异,避免合并出错
git diff HEAD FETCH_HEAD

# 3. 手动合并远程代码,会生成一个新的合并节点
git merge

🆘 代码冲突简易解决方法(新手必看)

拉取代码(rebase或merge)时,最容易遇到代码冲突,新手不用慌,按以下步骤操作,轻松解决,不会丢失代码

# 1. 遇到冲突时,Git会提示 “both modified: 文件名”,先查看冲突文件
git status

# 2. 打开冲突文件,找到冲突标记(<<<<<<< HEAD 到 ======= 再到 >>>>>>> 分支名)
# 示例冲突内容:
# <<<<<<< HEAD
# 本地修改的代码内容
# =======
# 远程最新的代码内容
# >>>>>>> origin/master

# 3. 手动修改冲突内容:保留需要的代码,删除冲突标记(<<<<<<<、=======、>>>>>>>)
# 注意:一定要仔细核对,不要误删有用代码

# 4. 修改完成后,继续完成拉取/合并操作
# 若用rebase方式冲突,执行:
git add .
git rebase --continue

# 若用merge方式冲突,执行:
git add .
git commit -m "解决代码冲突:保留本地xxx逻辑,合并远程xxx修改"
git push

📌 备注:冲突解决核心是“手动筛选有用代码+删除冲突标记”,操作完成后记得add和继续对应流程,新手多操作1-2次就能熟练掌握,不用怕冲突~


三、高频辅助/应急命令(避坑必备)

这些命令平时用得不多,但遇到问题时能“救命”,尤其新手要注意用法,避免误操作丢失代码

⚠️ 重点警告:以下命令部分慎用,执行前务必确认本地代码是否已备份!

# 1. 丢弃本地所有未提交的修改(慎用!执行后未提交代码直接消失,无法恢复)
git checkout .

# 2. 临时存放/恢复本地修改(开发高频命令)
git stash       # 把本地未提交的修改藏起来
git stash pop   # 恢复最近一次藏起来的修改(最常用)
git stash list  # 查看所有藏起来的修改记录

# 3. 克隆指定分支(非默认master分支时用)
git clone -b 分支名称 仓库地址
# 示例:git clone -b dev git@gitee.com:HANDM-735/git-testing.git

# 4. 查看远程仓库关联信息(确认是否关联正确)
git remote -v

四、日常开发标准工作流(✅ 直接照抄,零出错)

整理了一套每天写代码都能用到的固定流程,新手按步骤来,不会踩坑:
一,每天上班第一件事就是更新main主分支代码到自己分支hm;现在先切换到自己的分支hm

  1. 临时保存本地修改(有未提交代码才执行)
    git stash
    
  2. 拉取远程最新代码,避免冲突
    git pull --rebase origin main
    
  3. 恢复本地修改,继续开发
    git stash pop
    
  4. 开发完成后,提交修改
    git add .
    git commit -m "提交说明(清晰明了)"
    
  5. 推送到远程仓库,完成更新
    git push
    #或git push origin hm --force-with-lease
    
    二,再切换到main分支,执行
    git merge hm
    

🚨 最后(新手避坑3大核心要点)

  1. 提交说明(-m后面的内容)必须清晰:比如「修复登录接口 bug」「新增用户列表页面」,不要写「修改代码」「更新」这种无效描述,后续回滚时根本不知道改了什么。
  2. 拉取优先用rebase:避免merge生成大量混乱的合并节点,让提交记录更整洁,方便后续排查问题。
  3. git checkout . 绝对慎用:本地有未提交的重要代码时,执行后会直接删除,无法恢复。

补充(如何上传到自己的分支)

将本地仓库,上传到远端hm_tar分支下

  1. 先确认本地是 Git 仓库
    git status
    如果提示 not a git repository,就先执行:
    git init

  2. 添加远程仓库地址
    git remote add origin git@gitlab.seichitech.com:cp_ft/board/usb-device-mgr.git

  3. 切换到 hm_tar 分支

尝试切换到远程已有的 hm_tar 分支

git checkout -b hm_tar origin/hm_tar

如果上面报错(说明远程还没有 hm_tar 分支),就执行这行新建分支:

git checkout -b hm_tar

  1. 添加并提交本地代码
    git add .
    git commit -m “feat: 上传本地代码到 hm_tar 分支”

  2. 推送到远端 hm_tar 分支

1. 先拉取远程 hm_tar 分支的代码并合并

git pull origin hm_tar --rebase

2. 再推送你的代码

git push -u origin hm_tar

如何将 hm 分支代码合入 main 分支的完整步骤

🔔 合并前必做准备

  1. 确保 hm 分支的代码已经提交完成(没有未提交的修改)
  2. 确保本地 main 分支是远程最新版本

✅ 方案一:Merge 合并(推荐团队协作,保留完整历史)

这是最安全、最常用的方式,会产生一个合并提交,清晰记录分支合并的历史。

完整步骤

# 1. 切换到 main 分支
git checkout main

# 2. 拉取远程 main 最新代码(必须做!避免合并冲突)
git pull origin main

# 3. 把 hm 分支的代码合并到当前 main 分支
git merge hm

处理冲突(如果出现)

  1. 打开冲突文件,手动修改保留最终需要的代码
  2. 标记冲突已解决:
    git add .
    
  3. 完成合并提交:
    git commit -m "merge hm branch into main"
    

推送到远程 main 分支

git push origin main

✅ 方案二:Rebase 合并(推荐个人项目,保持线性历史)

不会产生额外的合并提交,会把 hm 分支的所有提交接在 main 分支的最后面,提交历史非常干净。

完整步骤

# 1. 先切换到 hm 分支
git checkout hm

# 2. 把 hm 分支的提交 rebase 到最新的 main 上
git rebase main

# 3. 处理冲突(如果有),解决后执行:
git add .
git rebase --continue

# 4. 切换回 main 分支
git checkout main

# 5. 拉取远程 main 最新代码(必须做!避免合并冲突)
git pull origin main

# 6. 快速合并 hm 分支(此时不会产生合并提交)
git merge hm

# 7.  推送到远程 main 分支
git push origin main

⚠️ 合并后发现有问题?一键回滚

如果合并后发现代码有问题,想撤销这次合并:

# 撤销最后一次合并提交,代码保留
git reset --soft HEAD^

# 彻底撤销合并,回到合并前状态
git reset --hard HEAD^

🎯 推荐选择

  • 团队协作项目:用 方案一(Merge),保留完整的合并历史,方便追溯和回滚
  • 个人项目/特性分支:用 方案二(Rebase),保持提交历史线性整洁

🔍git pull 错误原因

fatal: refusing to merge unrelated histories
这个报错是 Git 的安全保护机制,意思是:
你的本地分支和远程分支没有任何共同的提交历史,Git 不知道怎么合并,所以默认拒绝操作。

常见于以下场景:

  • 本地是 git init 新建的仓库,然后直接关联了远程仓库
  • 远程仓库被重新初始化过,历史被清空了
  • 本地分支和远程分支来自两个完全不同的仓库

3种解决方案

方案1:允许合并不相关历史(保留两边代码和历史)

适合:你本地有代码,想和远程代码合并在一起

# 替换成你要拉取的分支名,比如 main/hm/devm_origin_all
git pull origin main --allow-unrelated-histories

执行后处理:

  1. 如果出现冲突,手动打开冲突文件修改,保留最终需要的代码
  2. 标记冲突已解决:
    git add .
    
  3. 完成合并提交(会弹出 Vim 编辑器,直接按 Esc 输入 :wq 退出即可)
  4. 之后就可以正常 git push

方案2:强制重置到远程版本

适合:你本地没有重要代码,想直接变成远程最新版本
假设当前在devm-hm分支,你的main分支代码是最新版本了,你想直接和main分支代码保持同步;

# 先拉取远程所有最新信息
git fetch --all

# 强制把本地分支重置成远程分支的最新状态
# 替换成你要同步的分支名
git reset --hard origin/main
# 强制push
git push origin devm-hm --force-with-lease

✅ 效果:

  • 本地所有未提交的修改和本地提交都会被删除
  • 本地代码 100% 和远程分支一致
  • 不会有任何冲突,一步到位

方案3:备份本地代码后再重置

适合:你本地有代码,但不想合并,想先备份再同步远程

# 1. 备份本地所有未提交的修改
git stash push -m "backup before reset"

# 2. 拉取远程并强制重置
git fetch --all
git reset --hard origin/main

# 3. (可选)恢复备份的代码
git stash pop

⚠️ 注意:恢复备份时可能会产生冲突,需要手动解决。


回滚到某一个提交

# 1. 【必做】先创建备份分支(防止误操作,后悔可恢复)
git branch backup-before-reset-ef58de6
# 如果回滚错了 可以随时恢复
git reset --hard backup-before-reset-ef58de6

# 2. 本地强制重置到目标提交,该版本之后的所有提交永久删除
git reset --hard ef58de66035ba3e8c21e195edf7e76844121ce6d


# 安全强制推送(优先用这个,避免误覆盖别人的新提交)
git push origin devm-main --force-with-lease
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐