文章

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 查看暂存区与本地仓库的差异

分支操作命令

命令 功能描述
git branch 查看本地所有分支(当前分支前标 *
git branch <分支名> 创建新分支(基于当前分支)
git checkout <分支名> 切换到指定分支
git checkout -b <分支名> 创建(基于当前分支)并切换到新分支
(等价于 git branch + git checkout
git checkout -b <分支名> <远端分支名> 创建(基于目标分支)并切换到新分支
例如:git checkout -b dev upstream/dev
git merge <分支名> 将指定分支合并到当前分支(需先切换到目标分支)
git branch -d <分支名> 删除本地已合并的分支(未合并分支需用 -D 强制删除)
git push origin <分支名> 将本地分支推送到远程仓库
(首次推送需加 -u 关联,如:
git push -u origin <分支名>
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 操作,或本地合并后推送)

撤销操作

  • 撤销工作区修改: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 命令将自己的远端仓库(origin)与源仓库(upstream)同步。手动同步单个仓库与上游(上游)代码库其实很简单,只需 5 步核心操作,无需复杂脚本。以下是详细步骤(以 GitHub 为例,适用于所有 Git 平台):

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

# 2. 拉取上游分支的最新代码(仅下载,不合并)
git fetch upstream dev

# 3. 切换到要同步的本地分支,这里以 dev 开发分支为例:
git checkout dev

# 4. 将上游分支同步到当前分支:
git merge upstream/dev

# 5. 推送到自己的仓库的对应分支:
git push origin dev

每次上游仓库(upstream)有更新,只需重复步骤 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 进行授权