【嵌入式开发 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 : 遇到问题还是要多查查,小时候学的口号:"不懂就要问 " 应该改为 "不懂就去查"... 在查找分析结束后自己最好复盘下。即便别人告诉你答案,你还是不知其所以然!!!

相关推荐
Wanliang Li11 分钟前
Linux电源管理——CPU Hotplug 流程
linux·嵌入式硬件·嵌入式·armv8·电源管理·cpuhotplug
fnd_LN18 分钟前
Linux文件目录 --- mkdir命令,创建目录,多级目录,设置目录权限
linux·运维·服务器
会飞的土拨鼠呀28 分钟前
Flannel是什么,如何安装Flannel
运维·云原生·kubernetes
木与子不厌30 分钟前
微服务自定义过滤器
运维·数据库·微服务
达帮主36 分钟前
7.C语言 宏(Macro) 宏定义,宏函数
linux·c语言·算法
Domain-zhuo43 分钟前
Git和SVN有什么区别?
前端·javascript·vue.js·git·svn·webpack·node.js
行思理1 小时前
Linux 下SVN新手操作手册
linux·运维·svn
初学者丶一起加油1 小时前
C语言基础:指针(数组指针与指针数组)
linux·c语言·开发语言·数据结构·c++·算法·visual studio
沛沛老爹1 小时前
CI/CD是什么?
运维·git·ci/cd
一只搬砖的猹2 小时前
cJson系列——常用cJson库函数
linux·前端·javascript·python·物联网·mysql·json