Git 个人使用

本文介绍了Git的基本概念和快速使用方法,包括安装初始化、分支管理、提交历史查看、远程仓库关联、版本比对及回退。还涵盖了Gerrit的使用,Git小技巧,常见场景以及在CentOS 7上自编译Git的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Git

相关概念

Git 作为一款分布式版本控制系统,常被用来管理项目的版本更迭。

  • 工作区:在你的计算机上能看到的目录。

  • 暂存区:在 Git 的版本库中,需要提交的文件修改通通放到暂存区,然后一次性提交暂存区的所有修改,git add .之后存放的位置。

  • 版本库:即本地仓库,是新建版本库时在工作区下生成的一个隐藏目录.git,通过 ls -a 命令可以看到。git commit之后存放的位置。

  • 远程库:关联的远程仓库(github/gerrit)。

img

快速使用

安装并初始化

安装 git,配置基本信息,以及创建版本库

sudo apt-get install git
git config --global user.name "Your Name"
git config --global user.email "email@example.com" 
git init 

可以看到在当前目录下生成 .git 文件,以及名字邮箱配置成功

ls -a
git config user.name
git config user.email

添加修改文件到暂存区,并提交到版本库

git commit -am "<JIRA-num> module: short description"	# 生成新节点
git commit --amend										# 复用原有节点

在 title 和 change-ID 之间添加详细描述的 commit msg,如果需要描述的内容过多,在 JIRA 中说明

创建与合并分支
# 在 master 上 checkout
git checkout -b patch1		
# 在 v5.0.x 上开发完成后,回到主分支合并当前分支
git checkout master
git merge patch1
git branch -d patch1
# 对于不需要合并的分支可以通过 git branch -D patch2 删除

始终保持 master 与远程 master 同步,每个 patch 在单独的分支上开发

查看提交历史
git log
# 查看最新提交的 log commit ID
git rev-parse --short HEAD
关联远程仓库

在 GitHub 上添加开发机上的公钥,这样可以免密 ssh push/pull/clone 代码

img

本地没有仓库,从远程 clone

# 推荐配置公钥使用
git clone git@github.com:your_github_name/your_hub.git	

# 设置 http 许可,并通过 http 下载
git config --global http.sslVerify false
# 如果遇到 RPC failed, curl 18 transfer closed with outstanding read data remaining
# 增加 git 可允许传输的项目大小
git config --global http.postBuffer 1024288000

git clone http://github.com/your_github_name/your_hub.git
# 通过 https 下载,速度较慢
git clone https://github.com/your_github_name/your_hub.git 		

本地已有仓库,关联到远程仓库

git remote add <init_remote_name> git@github.com:your_github_name/your_hub.git
# 如果本地仓库非空
git pull <init_remote_name> master --allow-unrelated-histories 
# 第一次推送 master 分支到远程需要加 -u 参数
git push -u <init_remote_name> master

通过以下命令查看配置

git remote -v
git remote remove <delete_remote_name>
比对版本
  • 查看工作区和暂存区的代码版本区别:git diff
  • 查看工作区和版本库的代码版本区别:git diff HEAD
  • 查看工作区和远程库的代码版本区别:git diff origin/master
  • 查看版本库和远程库的代码版本区别:git diff origin/master HEAD
回退版本
  • 放弃工作区的修改:git checkout .

  • 放弃从工作区已经提交到版本库的修改:git reset --hard HEAD^

  • 放弃从工作区已经提交到远程库的修改:git reset --hard <commitID>

  • git reset 的三种 mode 说明

    • –mixed:仅 reset 暂存区,工作区还会有一份修改保留,这也是默认模式
    • –hard:reset 暂存区和工作区,之前的修改不会有任何保留
    • –soft:仅 reset 版本库,暂存区和工作区还会有一份修改保留
Gerrit 使用

把 Gerrit 看成一个带有更方便 review/comment 的 GitHub

# 远程仓库名必须是 gerrit
git remote add gerrit ssh://yiwu.cai@gerrit.smartx.com:29518/zbs
# 拉取远程分支版本
git checkout -b local-v4.0.x gerrit/v4.0.x
# 注意是在项目的主目录下提交
git commit --am "xxx"
# 确保 Change ID 前后一致在多次修改提交中都是一致的
git commit --amend
# 如果不指定,默认 push 到远程的 master 分支
git review v4.0.x

git review 实际上会 rebase 创建一个临时分支,当 git review 时跟远程有冲突

git review -t 5.x.x
# 这时提示有冲突,手动修改之后
git add .
git rebase --continue
git checkout -f dev_path
git commit --amend
git review
管理指定文件

在项目根目录下添加 .gitnore 文件,下面是一些.gitignore文件忽略的匹配规则:

*.a       # 忽略所有 .a 结尾的文件
!lib.a    # 但 lib.a 除外
/TODO     # 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
build/    # 忽略 build/ 目录下的所有文件
doc/*.txt # 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt

下面给出一个 demo :

.ieda
.xml
out
gen

.gitignore 只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,那么解决方法就是先把本地缓存删除(改变成未track状态),然后再提交:

git rm -r –-cached .   #把所有暂存区里的文件删了
git add . 
git commit -m “refactor: update .gitignore”
小技巧
  • 列出该文件每行的修改记录:git blame filename

  • 更新子模块:git submodule update --init --recursive

常见场景
  • code reiew 期间开发其他 feature 时,先 checkout 到 master 并 git pull 远程最近的改动,在master 的基础上 checkout 出一个新分支。如果直接在上一个 dev branch 上 checkout 就会产生不必要的依赖关系,尽可能保证每一个 Change 的完整性以及独立性,且越小越好。

  • git stash 用以在当前 branch 修改了部分代码,没到 commit 的地步,这时要去看其他 branch 的代码情况,可以先 git stash 再 git checkout master,要回到 dev 时,git checkout dev、git stash pop。git stash 还有一个常见用法。如果发现在 1st dev branch 上修改的代码应该放在另一个 branch 上时,可以先 git stash,然后切换到 2nd dev branch 上 git stash pop,这时可能存在冲突,需要手动修改(有冲突的时候,stash里面还会暂存着改动)。并回到 1st dev branch 中通过 git checkout . 把还未 git add . 的代码删掉

  • push 代码到远程,发现相同部分代码已被他人更新,此时陷入合并中间状态,应对方法:

    git merge --abort	# 暂停 merge
    git reset --merge
    git pull 			# 解决冲突
    git add .
    git commit --amend
    git push
    
  • git 合并远程多个 commit

    # 合并这个commit之后的所有commit (不包括这个)
    git rebase -i <log-id>
    # 在窗口中修改,将除了第一个的 pick 保留,其他都改成 s,保存退出
    # 这时 git log 发现本地的多个 commit 已经合并
    # 强制 push 到远程,这样就能把远程的多个 commit 合并,这种情况适用于这个远程仓库就你一个人在维护
    git push -f
    
CentOS 7 自编译 Git

CentOS 7 yum 中自带的 Git 版本过低,需要自行下载高版本 Git 源代码编译 Git

  1. 安装依赖、卸载旧版本

    yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel asciidoc
    yum install gcc perl-ExtUtils-MakeMaker
    yum remove git
    
  2. 安装新版 git

    cd /usr/local/src/
    wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.23.0.tar.xz
    tar -xvf git-2.23.0.tar.xz
    rm -y git-2.23.0.tar.xz && cd git-2.23.0/
    make prefix=/usr/local/git all
    make prefix=/usr/local/git install
    echo "export PATH=$PATH:/usr/local/git/bin" >> /etc/profile
    source /etc/profile
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值