git操作1

git创建分支

step 1:克隆仓库到本地

命令:git clone git@192.168.2.67:slam_3d_lib/camera_calibration.git

这会创建一个名为 camera_calibration 的文件夹。

step 2: 查看所有分支

cd camera_calibration git branch -a

1
2
3
* master
remotes/origin/HEAD -> origin/master
remotes/origin/master

其中*master就是说明你正处于这个分支。

remotes/origin/HEAD -> origin/master就是说明

如果还是怀疑有人创建了新的分支,可以执行下面命令:

git fetch --all

git branch -a

注:它会把远程仓库的所有分支信息、最新的提交记录(commit)下载到你的本地数据库中。

注意它非常安全! 它只下载数据,不会自动合并到你正在写的代码里,也不会修改你本地的任何文件。

step3 : 创建并切换到新分支

git checkout -b <你的新分支名字>

提示: 如果你想基于远程的某个特定分支(比如 develop)创建新分支,可以先切换到那个分支,或者使用 git checkout -b <新分支名> origin/develop

切换分支:git checkout 分支名 # 或者(新版本推荐) git switch 分支名

情况 A:普通删除(安全模式)

如果这个分支的代码已经合并到了 master,或者你没写任何代码,使用:

Bash

1
git branch -d 分支名

注:-d--delete 的缩写。

情况 B:强制删除(暴力模式)

如果你在新分支上写了代码,但现在不想要了,直接用 -d 会报错(Git 会提醒你代码还没合并)。这时需要强制删除:

Bash

1
git branch -D 分支名

注:-D(大写)会直接抹掉该分支,慎用,因为没合并的代码会丢失。



保住我当前分支写的进度,同时把主分支(master)别人的更新合并过来”

注:方法一:先提交(Commit),再合并(Merge)

Step 1: 保存你当前的代码

先确认你在你自己的分支:

1
2
3
4
git status
# 如果有红色的修改文件
git add .
git commit -m "暂存我自己写的代码"

其中,注意不能仓库里面套仓库

解释:这一步相当于给你的代码拍了个快照。只要 commit 了,代码就永久保存在本地 Git 历史里了,绝对不会丢。

Step 2: 切换回主分支并更新

把你自己的代码存好后,现在去把主分支(master)的最新代码拉下来:

Bash

1
2
git checkout master
git pull origin master

解释:这一步保证你的本地 master 分支是最新的。注意:这不会影响你刚才在 dev-zhrp 分支写的代码。

Step 3: 切回你的分支,把主分支“合”过来

现在回到你的地盘,把刚才更新好的 master 内容合并进来:

Bash

1
2
git checkout <你的新分支名字>
git merge master

解释:这行命令的意思是:“我站在我自己的分支上,把 master 的新东西拿过来”

Step 4: 处理冲突(如果有)

  • 顺利的情况:Git 会自动合并,提示 Merge made by the 'recursive' strategy,你现在的代码既有你写的,也有 master 最新的。
  • 冲突的情况:如果 master 改了某行代码,你也改了同一行,Git 会停下来告诉你 CONFLICT
    1. 打开报错的文件。
    2. 你会看到 <<<<<<< HEAD>>>>>>> master 的标记。
    3. 手动修改代码,保留你想要的。
    4. 改完后执行:git add . 然后 git commit

在实际开发中,原本的 git log 信息太长了,我们通常会配合参数使用,让它更人性化:

  • 基础版:git log

    • 场景:查看详细的历史记录。
    • 效果:显示完整的作者、日期、提交哈希值和注释。适合需要仔细查阅某次提交细节时使用。
  • 精简版:git log --oneline (强推!)

    • 场景:你想快速浏览最近干了啥,不想看废话。

    • 效果:把每一次提交压缩成一行。

    • 例子

      Plaintext

      1
      2
      3
      a1b2c3d 修复了红外相机采集的bug
      e5f6g7h 增加了RGB相机的配置文件
      i8j9k0l 初始化项目
    • 博主提示:这是老手最爱用的命令,清爽直观。

  • 透视版:git log origin/master (配合 fetch 使用)

    • 场景:配合 git fetch 使用。
    • 效果:查看远程仓库(别人)提交了什么,但还没合并到你本地的代码。
    • 比喻:这就是在不拆快递的情况下,透过X光看包裹里的“发货清单”。

回退代码:

第一步:找到“存档 ID” (Commit ID)

每一个提交(Commit)都有一个身份证号,叫 Commit ID(也叫 SHA-1 哈希值)。

操作命令:

Bash

1
git log --oneline

输出示例:

Plaintext

1
2
3
a1b2c3d (HEAD -> master) 删除了无用的注释  <-- 最新的存档
e5f6g7h 修复了红外相机采集bug
i8j9k0l 增加了RGB配置文件 <-- 比如你想回退到这里
  • 解释:最前面那串黄色的乱码(如 i8j9k0l)就是 Commit ID
  • 技巧:通常只需要复制前 7 位就够了,Git 能认出来。

第二步:回退版本(两种方式)

找到 ID 后,你有两种方式“穿越时空”。

方式一:暴力回退 (git reset) —— “读档重来”

这是最彻底的回退。你告诉 Git:“忘掉过去吧,我要回到那个时候。”

  • 命令

    Bash

    1
    2
    # 比如你想回到 "增加了RGB配置文件" 那个状态
    git reset --hard i8j9k0l
  • 后果

    • i8j9k0l 之后的所有提交记录(修复bug、删除注释)会全部消失
    • 你的代码文件也会瞬间变回那时的样子。
  • 适用场景:你刚写的一堆代码完全写烂了,想彻底不要了,重头再来。

  • 警告慎用! 如果你已经把代码推送到远程服务器了,千万别用这个,否则会坑死同事。

方式二:优雅撤销 (git revert) —— “负荆请罪”

这是更安全的回退方式。你不是“删除”历史,而是“新增”一条历史来抵消之前的错误。

  • 命令

    Bash

    1
    2
    # 撤销 "修复红外相机bug" 这一次提交
    git revert e5f6g7h
  • 后果

    • Git 会自动生成一个新的 Commit,内容是把那次修改反着做一遍(你删了它就加,你加了它就删)。
    • 历史记录不会丢失,而是多了一条“Revert …”的记录。
  • 适用场景:代码已经推送到远程服务器了,或者你只想撤销中间的某一次修改,但保留后续的工作。


如果你的同事更新了某个分支(比如叫 feature-A),你需要把这些更新“拉”到你电脑上,只需要两步。

核心步骤

第一步:切换到那个分支

先确保你人站在那个分支上。

Bash

1
git checkout feature-A

第二步:拉取更新

直接执行拉取命令。

Bash

1
git pull origin feature-A
  • origin:指远程仓库。
  • feature-A:指你要拉取的具体分支名。
  • 简写:如果你已经在这个分支上了,通常直接输入 git pull 也是可以的,Git 会自动知道你要拉取当前分支的更新。