【嵌入式开发 Linux 常用命令系列 4.1 -- git push 远程分支与本地分支查看】

文章目录

  • 概述
    • [git push 语法](#git push 语法)
      • [步骤1:git 远程主机名查看](#步骤1:git 远程主机名查看)
      • [步骤2:git 远程分支名查看](#步骤2:git 远程分支名查看)
      • [步骤3:git 本地分支名查看](#步骤3:git 本地分支名查看)
      • 示例演示

概述

在日常工作中,将代码 git clone 本地之后,或者使用repo init && repo sync 之后不知道使用什么命令将修改好的代码git push 到服务器上,本篇文章以自己工作中遇到的实际问题为例,介绍下如何在不知道 git push 的具体参数的情况下,一步一步查找到git push的正确命令。

git push 语法

我们都知道 push 命令的作用是将本地当前分支的代码推送到远程指定的分支上,其命令的格式如下:

powershell 复制代码
git push <远程主机名> <本地分支名>:<远程分支名>

使用 git push 命令将 <本地分支名> 的代码推送到 <远程主机名> 中的 <远程分支名> 上。

  • <远程主机名> :指的是你想要推送到哪个远程主机中,在我们克隆一个项目的时候,git 会自动帮我们把远程主机起名为 origin一般情况下是不会去修改这个名字的。
  • <本地分支名> :是本地分支的名字,可以使用命令 git branch 来查看本地有哪些分支。
  • <远程分支名>:指的是远程主机中的分支名,如果远程主机没有这个分支,则会新创建一个。

步骤1:git 远程主机名查看

使用 git remote 命令或者 git remote -v 命令

powershell 复制代码
[10:45:53]sam@linux (*^~^*) ~/sam/workbase/npu_code/device$ git remote
arm-val

or

powershell 复制代码
[10:47:31]sam@linux (*^~^*) ~/sam/workbase/npu_code/device$ git remote -v
arm-val ssh://codereview.armtech.com/arm_val/device (fetch)
arm-val ssh://codereview.armtech.com/arm_val/device (push)

所以可以看到远程主机名为 arm-val

步骤2:git 远程分支名查看

使用 git branch -vv, 可以看到远程分支名为arm-val/arm_main

powershell 复制代码
[10:54:31]sam@linux (*^~^*) ~/sam/workbase/npu_code/device$ git branch -vv
* test b3f0b95 [arm-val/arm_main: ahead 1] device: compile: support npu device compile

步骤3:git 本地分支名查看

HEAD 表示一个特别的指针,指向你正在工作的本地分支 的指针,可以当做是本地分支的别名。git 通过它可以知道当前工作区间在哪个分支。

refs/for 表示我们提交代码到服务器之后是需要经过 code review 之后才能进行merge 操作的,而 refs/heads 是不需要的。

所以 git push 的命令为:

powershell 复制代码
git push  <远程主机名> HEAD:refs/for/<远程分支名>

示例演示

查看远程分支名

powershell 复制代码
[10:45:26]sam@linux (*^~^*) ~/sam/workbase/npu_code/device$ git branch -vv
* test b3f0b95 [arm-val/arm_main: ahead 1] device: compile: support npu device compile

查看远程主机名

powershell 复制代码
[10:37:30]sam@linux (*^~^*) ~/sam/workbase/npu_code/device$ git remote -v
arm-val ssh://codereview.armtech.com/arm_val/device (fetch)
arm-val ssh://codereview.armtech.com/arm_val/device (push)

开始推代码

使用 git push arm-val HEAD:refs/for/arm_main 开始推代码:

powershell 复制代码
[10:37:00]sam@linux (*^~^*) ~/sam/workbase/npu_code/device$ git push arm-val HEAD:refs/for/arm_main
Enumerating objects: 7, done.
Counting objects: 100% (7/7), done.
Delta compression using up to 16 threads
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 485 bytes | 485.00 KiB/s, done.
Total 4 (delta 3), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (3/3)
remote: Processing changes: refs: 1, done
remote: ERROR: commit 4b80700: missing Change-Id in message footer
remote:
remote: Hint: to automatically insert a Change-Id, install the hook:
remote:   gitdir=$(git rev-parse --git-dir); scp -p -P 29418 sam@codereview.armtech.com:hooks/commit-msg ${gitdir}/hooks/
remote: or, for http(s):
remote:   f="$(git rev-parse --git-dir)/hooks/commit-msg"; curl -o "$f" https://codereview.armtech.com/tools/hooks/commit-msg ; chmod +x "$f"
remote: and then amend the commit:
remote:   git commit --amend --no-edit
remote: Finally, push your changes again
remote:
To ssh://codereview.armtech.com/arm_val/device
 ! [remote rejected] HEAD -> refs/for/arm_main (commit 4b80700: missing Change-Id in message footer)
error: failed to push some refs to 'ssh://codereview.armtech.com/arm_val/device'

按照提示操作:

powershell 复制代码
[10:37:46]sam@linux (*^~^*) ~/sam/workbase/npu_code/device$  gitdir=$(git rev-parse --git-dir); scp -p -P 29418 sam@codereview.armtech.com:hooks/commit-msg ${gitdir}/hooks/
powershell 复制代码
[10:38:01]sam@linux (*^~^*) ~/sam/workbase/npu_code/device$ git commit --amend --no-edit
[uefi_test b3f0b95] device: compile: support npu device compile
 Date: Wed Dec 6 14:38:57 2023 +0800
 1 file changed, 3 insertions(+), 3 deletions(-)

修改后再次重推:

shell 复制代码
[10:38:15]sam@linux (*^~^*) ~/sam/workbase/npu_code/device$ git push arm-val HEAD:refs/for/arm_main
Enumerating objects: 7, done.
Counting objects: 100% (7/7), done.
Delta compression using up to 16 threads
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 520 bytes | 520.00 KiB/s, done.
Total 4 (delta 3), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (3/3)
remote: Processing changes: refs: 1, new: 1, done
remote: commit b3f0b95: Missing issue-id in commit message
remote: Commit b3f0b957b0c5dd4911707855dec98f321dcfa737 not associated to any issue
remote:
remote: Hint: insert one or more issue-id anywhere in the commit message.
remote:       Issue-ids are strings matching (DPTS[WE][A-Z]*-[0-9]+)
remote:       and are pointing to existing tickets on its-jira Issue-Tracker
remote:
remote: SUCCESS
remote:
remote:   https://codereview.armtech.com/c/arm_val/device/+/9820 device: compile: support npu device compile [NEW]
remote:
To ssh://codereview.armtech.com/arm_val/device
 * [new reference]   HEAD -> refs/for/arm_main

至此,成功完成了 git push 的命令。
TIPS : 遇到问题还是要多查查,小时候学的口号:"不懂就要问 " 应该改为 "不懂就去查"... 在查找分析结束后自己最好复盘下。即便别人告诉你答案,你还是不知其所以然!!!

相关推荐
Lary_Rock31 分钟前
RK3576 LINUX RKNN SDK 测试
linux·运维·服务器
云飞云共享云桌面2 小时前
8位机械工程师如何共享一台图形工作站算力?
linux·服务器·网络
Peter_chq3 小时前
【操作系统】基于环形队列的生产消费模型
linux·c语言·开发语言·c++·后端
一坨阿亮4 小时前
Linux 使用中的问题
linux·运维
dsywws5 小时前
Linux学习笔记之vim入门
linux·笔记·学习
幺零九零零6 小时前
【C++】socket套接字编程
linux·服务器·网络·c++
晓理紫6 小时前
使用git lfs向huggingface提交较大的数据或者权重
git
wclass-zhengge6 小时前
Docker篇(Docker Compose)
运维·docker·容器
李启柱6 小时前
项目开发流程规范文档
运维·软件构建·个人开发·设计规范
小林熬夜学编程7 小时前
【Linux系统编程】第四十一弹---线程深度解析:从地址空间到多线程实践
linux·c语言·开发语言·c++·算法