文章

Git相关

Git相关

[TOC]

git 常用命令

基础操作命令

序号 命令 功能描述
1 git init 初始化本地仓库(在当前目录创建 .git 文件夹)
2 git clone <远程仓库地址> 克隆远程仓库到本地(含完整历史记录)
3 git add <文件名>git add . 将工作区文件添加到暂存区(. 表示所有修改)
4 git commit -m "提交说明" 将暂存区内容提交到本地仓库,添加提交信息
5 git status 查看工作区、暂存区的文件状态(新增、修改、删除等)
6 git log 查看提交历史(按时间倒序,q 退出查看)
7 git log --oneline 简洁显示提交历史(每行一条,含哈希值和提交信息)
8 git diff 查看工作区与暂存区的差异
9 git diff --cached 查看暂存区与本地仓库的差异

分支操作命令

  命令 功能描述
1 git branch 查看本地所有分支(当前分支前标 *
2 git branch <分支名> 创建新分支(基于当前分支)
3 git checkout <分支名> 切换到指定分支
4 git checkout -b <分支名> 创建并切换到新分支
(等价于 git branch + git checkout
5 git merge <分支名> 将指定分支合并到当前分支(需先切换到目标分支)
6 git branch -d <分支名> 删除本地已合并的分支(未合并分支需用 -D 强制删除)
7 git push origin <分支名> 将本地分支推送到远程仓库
(首次推送需加 -u 关联,如 git push -u origin <分支名>
8 git branch -r 查看远程分支

远程仓库操作命令

  命令 功能描述
1 git remote 查看远程仓库别名(默认通常为 origin
2 git remote -v 查看远程仓库的详细地址(fetch/push 地址)
3 git remote add <别名> <远程地址> 添加远程仓库
(例如: git remote add upstream <地址>
4 git fetch <远程仓库别名> 拉取远程仓库最新代码到本地(不合并到当前分支)
5 git pull <远程仓库别名> <分支名> 拉取远程分支并合并到当前分支
(等价于 git fetch + git merge
6 git push <远程仓库别名> <分支名> 将本地分支推送到远程仓库
7 git push origin --delete <分支名> 删除远程仓库的指定分支

git 场景使用

初始化仓库+常规命令

  命令 功能描述
1 git clone https://xxx/yyy/zzz.git Clone 代码到本地
2 git remote add upstream https://xx.git 设置本地仓库的 upstream 为主仓库
3 git remote -v 查看当前配置的所有远端仓库的信息
4 git commit -m "commit message" 提交修改到本地库
5 git fetch upstream fetch 主仓库代码到本地(只是获取,还未合并)
6 git checkout master 本地代码切换到 master 分支
(如果已经在 master 分支就没有必要执行此命令)
7 git merge upstream/master 将主仓库的 master 分支与本地代码合并
8 git push origin master 提到代码到个人远程仓库

注意点:

  • 如果是 bug 修复,则以上 fetch/merge/push 都是 hotfix 分支。

  • 可以使用 pull 代替 fetch + merge

  • 添加了远程仓库 upstream 后,在 VS 中可以看到如下内容:

    image-20240514184459925

  • 【占位】

日常开发提交代码

  1. 本地终端进入仓库目录:cd /本地路径/My-Blog-Posts
  2. 查看修改:git status
  3. 添加修改到暂存区:git add .
  4. 提交到本地仓库:git commit -m "feat: 新增登录功能"
  5. 拉取远程最新代码(避免冲突):git pull origin master
  6. 推送本地提交到远程:git push origin master

基于主分支开发新功能(分支流程)

  1. 确保主分支最新:git checkout master && git pull origin master
  2. 创建功能分支:git checkout -b feature/login
  3. 开发完成后提交:git add . && git commit -m "完成登录页面开发"
  4. 推送功能分支到远程:git push -u origin feature/login
  5. (后续合并到主分支可通过 PR/MR 操作,或本地合并后推送)

修复线上 bug(热修复流程)

  1. 从主分支创建热修复分支:git checkout master && git checkout -b hotfix/fix-login-error
  2. 修复后提交:git add . && git commit -m "fix: 修复登录失败bug"
  3. 推送热修复分支:git push -u origin hotfix/fix-login-error
  4. 合并到主分支:git checkout master && git merge hotfix/fix-login-error && git push origin master
  5. 删除热修复分支:git branch -d hotfix/fix-login-error

撤销操作

  • 撤销工作区修改:git checkout -- <文件名>(未 add 的文件)
  • 撤销暂存区修改(放回工作区):git reset HEAD <文件名>
  • 撤销最近一次提交(保留修改,回到暂存区):git reset --soft HEAD~1
  • 彻底删除最近一次提交(谨慎使用):git reset --hard HEAD~1

查看当前修改

  • git status:这个命令会显示当前工作目录和暂存区的状态,包括哪些文件被修改、哪些文件被添加到暂存区、哪些文件未被跟踪等信息。
  • git diff:这个命令用于查看工作目录和暂存区之间的差异,即你对文件所做的具体修改内容。如果只想查看某个特定文件的修改,可以在 git diff 后面跟上文件名,例如 git diff flaskr/ViewBehaviorAccess.py
  • git diff --staged:用于查看暂存区和上次提交之间的差异,即你准备提交的修改内容。输出内容与 “git diff” 类似,但它显示的是即将提交的修改。

查看提交记录

  • git log:显示当前分支的所有提交记录,包括提交哈希、作者、日期和提交信息,按时间倒序排列(最新的在最上面)。
  • git log -p:在提交历史基础上,额外显示每个提交所做的具体修改(类似 diff 输出)。按空格键翻页,按 q 退出查看。
  • git log -n 5 :查看最近5次提交。
  • git log --graph --oneline --all:以图形化方式查看分支和提交历史。
  • git log --graph:图形化查看

本地分支变基

  • git branch -vv:查看当前分支的信息。
  • git remote -v:查看当前配置的所有远端仓库的信息。
  • git add .:添加所有修改到暂存区。
  • git commit -m "修改信息":提交暂存区的修改到本地仓库。
  • git fetch hansb master:从 hansb 远程仓库下载最新提交,但不合并到当前分支。
  • git rebase hansb/master:将当前分支(guopc/master)基于 hansb/master 进行变基。
  • git rebase --continue:如果有冲突,解决冲突后执行此命令。
  • git push hansb HEAD:master:推送到 hansb/master

修改分支url

使用git remote set-url命令来修改已存在的远程仓库的 URL。具体命令如下:

1
2
3
4
git remote set-url origin https://pscgit.bj.tkoffice.cn/hansb/TKMarkerService.git

git remote set-url upstream_guopc https://pscgit.bj.tkoffice.cn/guopc/tkespservice.git
git remote set-url upstream_guopc https://pscgit.bj.tkoffice.cn/guopc/tkmcaservice.git

执行完上述命令后,用以下命令来验证 URL 是否已经更新:

1
git remote -v

该命令会显示所有远程仓库的名称和对应的 URL。

查看所有远端分支

  • 执行下面这些命令前,建议先更新一下远程仓库的信息,以确保看到的是最新的分支列表:

    1
    
    git fetch origin
    
  • 列出所有远程跟踪分支(remote-tracking branches):

    1
    
    git branch -r
    
  • 如果本地还没有对应这个远程分支的本地分支,直接使用以下命令会自动创建一个与远程分支同名的本地分支并切换过去:

    1
    
    git checkout origin/目标分支名
    
  • 或者更推荐的方式是创建并切换到一个跟踪远程分支的本地分支:

    1
    
    git checkout -b 本地分支名 origin/目标分支名
    
  • 如果本地已有对应的分支,直接切换即可:

    1
    
    git checkout 本地分支名
    

让自己的仓库与上游代码库保持一致

使用 Git 命令手动同步单个仓库与上游(上游)代码库其实很简单,只需 5 步核心操作,无需复杂脚本。以下是详细步骤(以 GitHub 为例,适用于所有 Git 平台):

前提

  • 你的仓库是从「上游仓库」Fork 来的(比如你 Fork 了别人的项目,现在要同步原项目的更新);
  • 已通过 git clone 将自己的仓库(origin)克隆到本地。

步骤 1:添加上游仓库地址(仅需做一次)

首先需要告诉 Git「上游仓库」的地址(即你 Fork 的原仓库地址),命名为 upstream(约定俗成的名称):

1
2
3
4
5
6
7
# 查看当前已有的远程仓库(确认是否已有 upstream)
git remote -v

# 若没有 upstream,添加上游仓库地址(替换为实际的上游仓库 URL)
# 格式:git remote add upstream 上游仓库的 HTTPS 或 SSH 地址
git remote add upstream https://github.com/原作者用户名/原仓库名.git
# 例如:git remote add upstream https://github.com/jekyll/jekyll-theme-chirpy.git

步骤 2:拉取上游仓库的最新代码

从上游仓库(upstream)拉取所有分支的最新更新到本地(不会直接合并到你的代码):

1
git fetch upstream

执行后,本地会获取上游仓库的最新代码,存储在 upstream/分支名 中(比如 upstream/main)。

步骤 3:切换到你要同步的本地分支

通常同步主分支(mainmaster),先切换到该分支:

1
2
3
4
5
# 查看当前分支
git branch

# 切换到主分支(根据实际分支名调整,通常是 main 或 master)
git checkout main

步骤 4:合并上游的最新代码到本地分支

将上游主分支(如 upstream/main)的更新合并到你的本地主分支(main):

1
git merge upstream/main
  • 若提示「Already up to date」,说明本地已和上游同步,无需操作;
  • 若出现冲突,Git 会提示哪些文件有冲突,手动修改冲突文件后,执行 git add 冲突文件git commit -m "解决冲突" 即可。

步骤 5:推送到自己的远程仓库(origin)

将合并后的本地代码推送到你自己的仓库(origin),完成同步:

1
git push origin main

总结:同步单个仓库的完整命令(可复制粘贴)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 1. 添加上游仓库(首次执行)
git remote add upstream 上游仓库URL

# 2. 拉取上游最新代码
git fetch upstream

# 3. 切换到主分支
git checkout main

# 4. 合并上游更新
git merge upstream/main

# 5. 推送到自己的仓库
git push origin main

每次上游仓库有更新,只需重复步骤 2-5 即可,非常简单。如果需要同步多个仓库,只需对每个仓库重复这套命令即可(比脚本更直观可控)。

git 理论知识

git的分支管理策略

业界常见的两大主分支(master、develop)、三个辅助分支(feature、release、hotfix)的生命周期:12

分支合并流程规范640

遇到的一些问题

提交本地修改时远程分支缺失的问题

现象

“同步” 本地修改的时候失败,git 日志提示如下:

1
fatal: Couldn't find remote ref dev

原因

  1. 远程仓库中不存在 dev 分支
    • 可能是分支名称拼写错误(区分大小写)
    • 或者该分支根本没有被创建或推送至远程仓库
  2. 本地仓库未与远程仓库同步最新信息
    • 远程仓库可能最近删除了 dev 分支,而你的本地仓库还保留着旧的引用

解决方法

  • 检查远程分支列表
1
2
git fetch --prune  # 更新远程分支信息并移除已删除的分支引用
git branch -r      # 查看所有远程分支
  • 清除当前的关联配置
1
2
git config --unset branch.dev.remote
git config --unset branch.dev.merge
  • 重新获取所有远程分支信息(确保本地缓存最新)
1
git fetch --all --prune
  • 执行完上面的命令就可以使用 git pullgit push 同步分支了。

参考

本文由作者按照 CC BY 4.0 进行授权