git常用命令以及注意事项总结

news2024/11/22 18:50:07

Git 是一个分布式版本控制系统,它帮助开发者管理和记录代码的历史。以下是一些基本的 Git 操作:

1. 初始化一个 Git 仓库

首先,如果你有一个现有的项目或文件夹,并且想将它转换为 Git 仓库,可以使用以下命令:

git init

这将在当前目录中创建一个 .git 子目录,Git 会在这个目录中存储版本控制信息。

2. 克隆一个远程仓库

如果你想复制一个远程仓库到本地,使用 git clone 命令:

git clone https://github.com/username/repository.git

这将会将远程仓库的所有文件和历史记录下载到本地。

3. 查看 Git 状态

你可以使用 git status 来查看当前工作目录的状态,检查哪些文件已被修改或添加到暂存区。

git status

4. 查看 Git 提交历史

要查看项目的提交历史,可以使用 git log


git log

如果你希望简化输出,可以使用:

bash

git log --oneline

5. 添加文件到暂存区

在 Git 中,工作区的更改首先需要被“添加”到暂存区(staging area),然后才能提交。使用 git add 将文件添加到暂存区:

  • 添加单个文件:

    
    git add filename
    
  • 添加所有更改的文件:

    
    git add .
    

6. 提交更改

将文件从暂存区提交到本地 Git 仓库:


git commit -m "提交的消息"

每次提交时,建议提供一个简短而清晰的提交信息,以便团队成员理解你做了什么更改。

7. 推送你提交到本地git仓库的文件到远程仓库

git push 

7. 查看 Git 配置信息

你可以查看当前的 Git 配置信息:

 
git config --list

如果你还没有配置用户名和电子邮件(Git 会用它们来标识提交者),你可以使用以下命令设置:

git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"

8. 创建分支

分支是 Git 中的一个核心概念,用来在不同的工作流中独立开发而不会影响主分支。

  • 创建一个新分支:

    git branch new-branch
    
  • 切换到新分支:

    bash
    
    
     
    git checkout new-branch
    
  • 查看分支

    git branch
    

    当前所在的分支前会有一个 * 标记。

  • 或者,创建分支的同时切换到新创建的分支,当想要创建的分支已经存在,git checkout -b会报错:

bash


 
git checkout -b new-branch

10. 合并分支

合并分支的作用与使用场景

在 Git 中,合并分支git merge)是将一个分支的更改合并到另一个分支的操作。合并分支的主要作用是:

  1. 整合并行开发的工作:在多人协作或分支开发的过程中,每个人或每个功能模块通常会在自己的分支上进行开发。完成某个功能后,需要将该功能的修改合并到主分支(如 mainmaster),或合并到开发分支(如 dev)。
  2. 同步多个功能开发:假设你在多个功能分支上进行开发(例如 feature-1, feature-2),合并操作可以将不同功能分支的改动整合到一起,保证每个分支的改动都可以在主分支中得到体现。
  3. 团队协作:当团队成员分别在不同的分支上工作时,合并可以将他们的工作成果汇集到一起。

什么时候需要使用合并分支?

合并分支通常出现在以下几种场景中:

  • 功能开发完成:当一个分支(如 feature-branch)的功能开发完成,准备将该分支的更改合并到主分支(如 maindev)时,使用合并操作。
  • 合并工作进度:当多个开发人员在不同的分支上工作时,需要将他们的工作成果合并到主分支。
  • 解决冲突并合并:如果你在一个分支上进行了一些更改,其他人在主分支上也做了更改,在合并时可能会出现冲突,你需要手动解决冲突并完成合并。

将一个分支的更改合并到当前分支。假设你想将 feature-branch 合并到当前分支:

bash
 
git merge feature-branch

11. 删除分支

如果你不再需要一个分支,可以删除它:

  • 删除本地分支:

    bash
    
    
     
    git branch -d branch-name
    
  • 强制删除本地分支(如果分支未合并):

    bash
    
    
     
    git branch -D branch-name
    

12. 推送更改到远程仓库

将本地的提交推送到远程仓库:

bash


 
git push origin branch-name

如果是第一次推送,可能需要指定远程分支名(例如,推送 main 分支):

bash


 
git push -u origin main

13. 拉取远程仓库的更新

拉取远程仓库的最新更改并合并到当前分支:

bash


 
git pull origin branch-name

14. 查看远程仓库信息

查看配置的远程仓库信息:

bash


 
git remote -v

15. 解决冲突

在合并两个分支时,可能会遇到冲突。Git 会标记冲突的文件,你需要手动解决这些冲突,编辑文件并删除冲突标记,然后将文件添加到暂存区并提交:

bashCopy codegit add conflicted-file
git commit -m "Resolved merge conflict"

16. 删除远程分支

删除远程仓库中的分支:

bash


 
git push origin --delete branch-name

17. 查看文件差异

要查看当前工作区和暂存区、或者暂存区和最近提交之间的差异:

  • 查看工作区和暂存区的差异:

    bash
    
    
     
    git diff
    
  • 查看暂存区和最近提交的差异:

    bash
    
    
     
    git diff --cached
    

18. 回退提交

假如我提交错了,如何撤回,然后重新修改,再重新提交

1. 撤回最新的提交并保留修改

如果你想撤回最新的提交,但保留文件的更改以便修改后重新提交,可以使用 git reset

bash


Copy code
git reset --soft HEAD~1
  • --soft 选项会撤回最新的提交,并将更改保留在暂存区(staging area)中,允许你重新修改并提交。
  • HEAD~1 表示撤回上一个提交。如果你想撤回多个提交,可以调整 HEAD~n 中的 n

操作步骤:

  1. git reset --soft HEAD~1 会撤回最新的提交,并保留文件更改在暂存区。
  2. 你可以修改文件,然后再通过 git commit -m "新的提交信息" 提交。

2. 撤回最新的提交并不保留修改(只撤回提交)

如果你希望撤回最新的提交,并且不保留这些修改,可以使用 git reset --hard

bash


Copy code
git reset --hard HEAD~1
  • --hard 选项会撤回最新的提交,并将工作区和暂存区的文件都恢复到撤回前的状态。

3. 撤回错误的提交并修改,之后重新提交

如果你已经提交了错误的内容(例如,提交了不应该包含的文件),你可以:

  1. 撤回提交并保留更改(使用 git reset --soft,如上所述),然后修改文件,最后重新提交。

  2. 修改文件后重新添加到暂存区,使用 git add

    bash
    
    
    Copy code
    git add <modified-file>
    
  3. 重新提交修改

    bash
    
    
    Copy code
    git commit -m "修正后的提交信息"
    

4. 如果已经推送到远程仓库

如果你已经将提交推送到远程仓库,并希望撤回这些提交,你可以使用 git push --force 来强制推送本地的更改到远程仓库。但需要谨慎使用,因为这会重写远程仓库中的历史记录。

步骤:

  1. 使用 git reset --soft HEAD~1git reset --hard HEAD~1 撤回本地的提交。

  2. 重新修改代码并提交。

  3. 强制推送到远程仓库:

    bash
    
    
    Copy code
    git push --force
    

注意:如果其他人已经拉取了这个提交,强制推送可能会导致他们的本地仓库出现问题,所以在多人协作时需要特别小心。

git cherry-pick 是 Git 中用于从一个分支中选择特定提交并将其应用到当前分支的命令。它常用于将特定的修改或修复从一个分支应用到另一个分支,而不需要合并整个分支的内容。

使用场景

  1. 只需要某些提交:你可能在某个分支上做了多次提交,但只想将其中的一个或几个提交引入到当前工作分支。
  2. 从其他分支提取修复:你可以通过 cherry-pick 提取其他分支中的 bug 修复或重要提交,而不需要合并整个分支。
  3. 避免复杂的合并:有时合并可能会引入复杂的冲突或不必要的内容,cherry-pick 允许你更精确地选择哪些提交需要被引入。

基本语法

bash


Copy code
git cherry-pick <commit-hash>

其中,<commit-hash> 是你要挑选的提交的哈希值。

使用步骤

  1. 查看提交历史

    如果你不知道要选择哪个提交,可以查看历史提交记录:

    bash
    
    
    Copy code
    git log
    

    这会显示所有提交的日志记录,包括每个提交的哈希值(commit hash)。

    输出示例:

    bashCopy codecommit abc1234567890... (HEAD -> dev)
    Author: Your Name <you@example.com>
    Date:   Mon Oct 21 16:32:10 2024 +0800
    
        修复了一个 bug
    
    commit def2345678901... (master)
    Author: Your Name <you@example.com>
    Date:   Sun Oct 20 14:29:05 2024 +0800
    
        添加了新功能
    

    在这个例子中,abc1234567890def2345678901 是两个提交的哈希值。

  2. 切换到目标分支

    在执行 cherry-pick 之前,确保你已经切换到目标分支。例如,如果你想将某个提交引入到 dev 分支,先切换到 dev 分支:

    bash
    
    
    Copy code
    git checkout dev
    
  3. 执行 cherry-pick 操作

    使用 git cherry-pick 命令,指定你想要挑选的提交哈希值。假设我们要把 abc1234567890 这个提交从 master 分支应用到 dev 分支:

    bash
    
    
    Copy code
    git cherry-pick abc1234567890
    

    Git 会将该提交的更改应用到当前分支(此处为 dev)。

  4. 解决冲突(如果有):

    如果在应用 cherry-pick 时发生了冲突,Git 会停止并提示你手动解决冲突。你需要:

    • 编辑冲突文件,解决冲突。

    • 标记冲突已经解决,添加文件到暂存区:

       
      
      
       
      git add <conflicted-file>
      
    • 然后继续完成 cherry-pick 操作:

       
      
      
       
      git cherry-pick --continue
      

    如果不想继续操作,可以放弃 cherry-pick

     
    
    
     
    git cherry-pick --abort
    
  5. 完成操作并提交

    如果没有冲突,cherry-pick 会直接生成一个新的提交,并应用到目标分支。

    使用 git log 查看是否成功:

     
    
    
     
    git log
    

示例:挑选多个提交

如果你想选择多个提交,可以通过以下两种方式:

  1. 选择多个提交的哈希值(逐个 cherry-pick):

     
    
    
     
    git cherry-pick commit1 commit2 commit3
    
  2. 选择一段提交范围

    如果你需要选择一个提交范围(例如从某个提交到另一个提交),可以使用 .. 来指定范围:

    bash
    
    
    Copy code
    git cherry-pick commit1^..commit3
    

    这里 commit1^ 表示 commit1 的前一个提交,commit3 表示范围的结束提交。

处理冲突

如果你在 cherry-pick 时遇到冲突,可以手动解决冲突并继续。具体步骤如下:

  1. Git 会暂停 cherry-pick,你需要手动编辑冲突文件。

  2. 修改文件后,使用 git add 标记冲突已解决:

    bash
    
    
    Copy code
    git add <conflicted-file>
    
  3. 然后继续 cherry-pick

     
    
    
     
    git cherry-pick --continue
    

如果在 cherry-pick 过程中你决定放弃操作,可以使用:

 


 
git cherry-pick --abort

这将撤销所有未完成的 cherry-pick 操作。

注意事项

  • 提交历史线性化cherry-pick 会在当前分支上创建新的提交,这意味着即使你在两个分支上执行 cherry-pick,也会保留两个不同的提交记录(即使它们内容相同)。这可能会让提交历史看起来有点冗余。
  • 避免重复的提交:如果你在多个分支上 cherry-pick 相同的提交,可能会造成重复提交,Git 会试图避免冲突,但需要手动处理的冲突仍然可能发生。
  • 谨慎使用与多人协作:在多人协作时,cherry-pick 操作可能会导致不一致的提交历史,最好在清楚了解所有影响的情况下使用。

总结

这些是一些基本的 Git 操作,能够帮助你进行日常的版本控制和协作开发

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2245489.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Jmeter中的断言(四)

13--XPath断言 功能特点 数据验证&#xff1a;验证 XML 响应数据是否包含或不包含特定的字段或值。支持 XPath 表达式&#xff1a;使用 XPath 表达式定位和验证 XML 数据中的字段。灵活配置&#xff1a;可以设置多个断言条件&#xff0c;满足复杂的测试需求。 配置步骤 添加…

实验室管理解决方案:Spring Boot技术

6系统测试 6.1概念和意义 测试的定义&#xff1a;程序测试是为了发现错误而执行程序的过程。测试(Testing)的任务与目的可以描述为&#xff1a; 目的&#xff1a;发现程序的错误&#xff1b; 任务&#xff1a;通过在计算机上执行程序&#xff0c;暴露程序中潜在的错误。 另一个…

【STM32】USART串口数据包

数据包的作用是将一个个单独的数据打包起来&#xff0c;方便进行多字节的数据通信 数据包格式 HEX数据包 文本数据包 数据包接收 HEX数据包接收&#xff08;固定包长&#xff09; 文本数据包接收&#xff08;可变包长&#xff09; 串口收发HEX数据包 接线图 Serial模块 se…

Ubuntu下的Eigen库的安装及基本使用教程

一、Eigen库介绍 简介 Eigen [1]目前最新的版本是3.4&#xff0c;除了C标准库以外&#xff0c;不需要任何其他的依赖包。Eigen使用的CMake建立配置文件和单元测试&#xff0c;并自动安装。如果使用Eigen库&#xff0c;只需包特定模块的的头文件即可。 基本功能 Eigen适用范…

tcpdump交叉编译

TCPDUMP在Libpcap上开发。 首先需要编译libcap。 网上那么多教程&#xff0c;下载地址都只给了一个英文的官网首页&#xff0c; 你尽可以试试&#xff0c;从里面找到下载地址都要费半天时间。 \color{red}网上那么多教程&#xff0c;下载地址都只给了一个英文的官网首页&#…

【智谱开放平台-注册_登录安全分析报告】

前言 由于网站注册入口容易被机器执行自动化程序攻击&#xff0c;存在如下风险&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露&#xff0c;不符合国家等级保护的要求。短信盗刷带来的拒绝服务风险 &#xff0c;造成用户无法登陆、注册&#xff0c;大量收到垃圾短信的…

基于单片机的多功能跑步机控制系统

本设计基于单片机的一种多功能跑步机控制系统。该系统以STM32单片机为主控制器&#xff0c;由七个电路模块组成&#xff0c;分别是&#xff1a;单片机模块、电机控制模块、心率检测模块、音乐播放模块、液晶显示模块、语音控制模块、电源模块。其中&#xff0c;单片机模块是整个…

嵌入式硬件杂谈(二)-芯片输入接入0.1uf电容的本质(退耦电容)

引言&#xff1a;对于嵌入式硬件这个庞大的知识体系而言&#xff0c;太多离散的知识点很容易疏漏&#xff0c;因此对于这些容易忘记甚至不明白的知识点做成一个梳理&#xff0c;供大家参考以及学习&#xff0c;本文主要针对芯片输入接入0.1uf电容的本质的知识点的进行学习。 目…

内网安全隧道搭建-ngrok-frp-nps-sapp

1.ngrok 建立内网主机与公网跳板机的连接&#xff1a; 内网主机为客户机&#xff1a; 下载客户端执行 2.frp &#xff08;1&#xff09;以下为内网穿透端口转发 frp服务端配置&#xff1a; bindPort 为frp运行端口 服务端运行 ./frps -c frps.ini frp客户端配置&#xf…

.NET桌面应用架构Demo与实战|WPF+MVVM+EFCore+IOC+DI+Code First+AutoMapper

目录 .NET桌面应用架构Demo与实战|WPFMVVMEFCoreIOCDICode FirstAutoPapper技术栈简述项目地址&#xff1a;功能展示项目结构项目引用1. 新建模型2. Data层&#xff0c;依赖EF Core&#xff0c;实现数据库增删改查3. Bussiness层&#xff0c;实现具体的业务逻辑4. Service层&am…

Altium Designer学习笔记 6-10 异性元件库创建_原理图绘制

基于Altium Designer 23学习版&#xff0c;四层板智能小车PCB 更多AD学习笔记&#xff1a;Altium Designer学习笔记 1-5 工程创建_元件库创建 目录 6、光耦及二极管元件库模型创建 7、元件库模型的调用 二、原理图绘制及编译检查 8、元件的放置 9、器件的复制及对齐 10、…

实验三:构建园区网(静态路由)

目录 一、实验简介 二、实验目的 三、实验需求 四、实验拓扑 五、实验任务及要求 1、任务 1&#xff1a;完成网络部署 2、任务 2&#xff1a;设计全网 IP 地址 3、任务 3&#xff1a;实现全网各主机之间的互访 六、实验步骤 1、在 eNSP 中部署网络 2、配置各主机 IP …

Figma插件指南:12款提升设计生产力的插件

在当今的设计领域&#xff0c;Figma已经成为许多UI设计师和团队的首选原型和数字设计软件。随着Figma的不断更新和插件库的扩展&#xff0c;这些工具极大地提升了设计工作的效率。本文将介绍12款实用的Figma插件&#xff0c;帮助你在UI设计中更加高效。 即时AI 即时AI利用先进…

解决IDEA报包不存在,但实际存在的问题

前言 最近在把一个亿老项目交割给同事&#xff0c;同事在导入项目运行时遇到IDEA报包不存在&#xff0c;但实际存在的问题&#xff0c;最终通过以下方式解决 现象 在IDEA里启动运行项目&#xff0c;报某个类有问题&#xff0c;引入的包不存在。 点击这个引入的包&#xff0c;可…

SemiDrive E3 硬件设计系列---唤醒电路设计

一、前言 E3 系列芯片是芯驰半导体高功能安全的车规级 MCU&#xff0c;对于 MCU 的硬件设计部分&#xff0c;本系列将会分模块进行讲解&#xff0c;旨在介绍 E3 系列芯片在硬件设计方面的注意事项与经验&#xff0c;本文主要讲解 E3 硬件设计中唤醒电路部分的设计。 二、RTC 模…

vue中路由缓存

vue中路由缓存 问题描述及截图解决思路关键代码及打印信息截图 问题描述及截图 在使用某一平台时发现当列表页码切换后点击某一卡片进入详情页后&#xff0c;再返回列表页时页面刷新了。这样用户每次看完详情回到列表页都得再重新输入自己的查询条件&#xff0c;或者切换分页到…

Qt桌面应用开发 第五天(常用控件 自定义控件)

目录 1.QPushButton和ToolButton 1.1QPushButton 1.2ToolButton 2.RadioButton和CheckBox 2.1RadioButton单选按钮 2.2CheckBox多选按钮 3.ListWidget 4.TreeWidget控件 5.TableWidget控件 6.Containers控件 6.1QScrollArea 6.2QToolBox 6.3QTabWidget 6.4QStacke…

android studio无法下载,Could not GET xxx, Received status code 400

-- 1. 使用下面的地址代替 原地址: distributionUrlhttps\://services.gradle.org/distributions/gradle-6.5-all.zip 镜像地址: distributionUrlhttps\://downloads.gradle-dn.com/distributions/gradle-6.5-all.zips 上面的已经不好用了 https\://mirrors.cloud.tencent.c…

【SpringBoot】【log】 自定义logback日志配置

前言&#xff1a;默认情况下&#xff0c;SpringBoot内部使用logback作为系统日志实现的框架&#xff0c;将日志输出到控制台&#xff0c;不会写到日志文件。如果在application.properties或application.yml配置&#xff0c;这样只能配置简单的场景&#xff0c;保存路径、日志格…

【FPGA开发】AXI-Full总线接口介绍、FPGA搭建仿真平台

文章目录 协议解读接口介绍AW—写地址通道W—写数据通道B—写响应通道AR—读地址通道R—读数据通道 FPGA搭建仿真平台 本文主要介绍AXI-FULL的相关基础内容&#xff0c;AXI-Lite请移步&#xff1a; 【FPGA开发】AXI-Lite总线协议解读、Verilog逻辑开发与仿真、Alex Forencich代…