git命令参数总结及实例讲解附实例(快速)掌握

1 篇文章 0 订阅

一、简介

本文主要对git的常见参数进行讲解,并通过实例讲述git常见命令的使用。
Git是一个分布式的版本控制系统,与集中式的版本控制系统不同的是,每个人都工作在通过克隆建立的本地版本库中。也就是说每个人都拥有一个完整的版本库,查看提交日志、提交、创建里程碑和分支、合并分支、回退等所有操作都直接在本地完成而不需要网络连接。
首先要了解git的三个分区,分别是工作区、暂存区和版本库
在这里插入图片描述

二、常用命令

下面是git的常用命令,也是从下载源码、修改代码然后上传的一个过程;

1、git clone:从远程主机克隆一个版本库;
2、git remote:增加远程仓库地址;
[root@localhost /]# git remote add  git://github.com/octocat/Spoon-Knife.git
3、git config:配置邮箱名和作者名;
[root@localhost /]# git config --global user.email "xxx@163.com"
[root@localhost /]# git config --global user.name "xxx"
4、git init:初始化本地git仓库状态;
5、git add:是将当前更改或者新增的文件加入到Git的索引中,加入到Git的索引中就表示记入了版本历史中,这也是提交之前所需要执行的一步;
6、git branch:对分支的增、删、查等操作;
7、git checkout:Git的checkout有两个作用,其一是在不同的branch之间进行切换,另一个功能是还原代码的作用;
8、git commit:提交当前工作空间的修改内容;
[root@localhost /]# git commit -m "first commit"
9、git diff:对比不同的commit或者分支的差异;
10、git reset:回滚到指定状态;
[root@localhost /]# git reset —hard HEAD^   //回滚到上一次记录
11、git merge:合并分支
[root@localhost /]# git merge master  //合并当前分支到master分支
12、git rm:从当前的工作空间中和索引中删除文件;
13、git log:查看历史日志;
14、git status:查看本地代码情况
15、git revert:还原一个版本的修改,必须提供一个具体的Git版本号;
16、git push:将本地commit的代码更新到远程版本库中;
17、git pull:从其他的版本库(既可以是远程的也可以是本地的)将代码更新到本地;
[root@localhost /]# git pull -r origin patch //同步远程代码到本地并以rebase方式合并本地分支,git pull 就是 git fetch + git merge o/master
18、生成公钥的方法:
创建登录密钥和公钥
使用ssh-keygen -t rsa 建立密钥和公钥,即id_rsa 和 id_rsa.pub。然后将id_rsa.pub发送给服务器管理者,将其加入到授权列表中。
$ ssh-keygen -t rsa -C "ming.xing@xxx.com.cn"

三、具体命令常见用法

git add保存修改

删除文件后需要 git add -A, 使用git add .不行,区别如下:
[root@localhost /]# git add -A 保存所有的修改
[root@localhost /]# git add . 保存新的添加和修改,但是不包括删除
[root@localhost /]# git add -u 保存修改和删除,但是不包括新建文件。
所以默认使用git add -A就行
注意使用git add -A后,commit没有新增该文件,则需要排查该文件是否被忽略掉可用如下命令:
[root@localhost /]# git status --ignored 
//忽略的文件都记录在.gitignore中
可用通过如下命令强制加入:
[root@localhost /]# git add mytest_file -f

branch的增删改查:

git branch就会列出本地所有的分支
git checkout切换分支
[root@localhost /]#git checkout -b newBranchName
这相当于执行下面这两条命令:
[root@localhost /]#git branch newBranchName
[root@localhost /]#git checkout newBranchName(工作区一定要是clean的)
[root@localhost /]#git checkout -b newBranchName remote_branch_name:拉取远程分支remote_branch_name创建一个本地分支newBranchName,并切到本地分支newBranchName,采用此种方法建立的本地分支会和远程分支建立映射关系。
特性分支名称以feature/作为前缀,feature后可以接大模块名进行细分,比如要进行nvme ramdisk的开发:
//为nvme ramdisk的开发创建特性分支
[root@localhost /]#git checkout -b feature/nvme/ramdisk
[root@localhost /]#git branch -D new_branch就会强制删除叫做new_branch的分支,
还原代码的作用:git checkout app/model/user.rb就会将user.rb文件从上一个已提交的版本中更新回来,未提交的内容全部会回滚
[root@localhost /]# git branch -m patch test_patch  //重命名分支为test_patch
//删除远程分支
[root@localhost /]#git push origin --delete new_branch
//使用checkout命令新建一个空白分支
git checkout --orphan newBranchName

git reset回退版本或代码

git reset根据–soft –mixed –hard,会对working tree和index和HEAD进行重置

soft 参数:
git reset --soft HEAD~1 意为将版本库软回退1个版本,所谓软回退表示将本地版本库的头指针全部重置到指定版本,且将这次提交之后的所有变更都移动到暂存区
默认的mixed参数:
git reset HEAD~1 意为将版本库回退1个版本,将本地版本库的头指针全部重置到指定版本,且会重置暂存区,即这次提交之后的所有变更都移动到工作区
hard参数:
git reset --hard HEAD~1 意为将版本库回退1个版本,但是不仅仅是将本地版本库的头指针全部重置到指定版本,也会重置暂存区,并且会将工作区代码清空(工作区是clean状态)
注意,soft参数与默认参数都不会修改工作区代码,只有hard参数才会修改工作区代码。*/

git reset HEAD^
//回退版本,一个^表示一个版本,可以多个,另外也可以使用 git reset HEAD~n这种形式。
//也可以回退到指定版本:
git reset commit-id
git reset HEAD filename
//回退文件,将文件从暂存区回退到工作区(unstage),此时不能带hard,soft参数
git restore filename
//将暂存区的文件忽略更改

git revert反转提交,撤销某个提交

//主要用于撤销某个已提交的commit
git revert,反转提交, 撤销一个提交的同时会创建一个新的提交,也就是用一个新提交来消除一个历史提交所做的任何修改.
git revert commit-id revert指定的一个commit
git revert HEAD~3 revert指定倒数第四个commit
revert过程有可能遇到冲突,要么git revert --abort终止此次revert操作,代码还原至revert命令前。要么手动消除冲突(同普通的冲突解决),然后add commit

git merge合并分支

将 origin 分支合并到mytest分支最简单的办法就是用下面这些命令

git checkout mytest
git merge origin

或者,你也可以把它们压缩在一行里:

git merge origin mytest 
git merge --no-ff develop
//使用--no-ff参数后,会执行正常合并,在Master分支上生成一个新节点。为了保证版本演进的清晰,我们希望采用这种做法。

git rebase远程仓库和本地代码冲突解决

作为 merge 的替代选择,你可以像下面这样将test1分支并入origin分支:
git checkout test1
git rebase origin
它会把整个test1分支移动到origin分支的后面,有效地把所有master分支上新的提交并入过来。但是,rebase为原分支上每一个提交创建一个新的提交,重写了项目历史,并且不会带来合并提交。rebase的好处是避免了菱形的产生,保持提交曲线为直线,让大家易于理解。
git rebase --continue //修改冲突后直接提交
git rebase --abort	//中止本次rebase操作

git reflog查看所有记录版本

//如果在回退以后又想再次回到之前的版本,git reflog 可以查看所有分支的所有操作记录(包括commit和reset的操作),包括已经被删除的commit记录,git log则不能察看已经删除了的commit记录
615ce06 HEAD@{44}: rebase -i (finish): returning to refs/heads/my_test_branch
615ce06 HEAD@{45}: rebase -i (fixup): zancun_new
702356c HEAD@{46}: rebase -i (fixup): # This is a combination of 2 commits.
c997622 HEAD@{47}: rebase -i (reword): zancun_new
fb74ec2 (origin/master, origin/HEAD) HEAD@{48}: rebase -i (start): checkout FETCH_HEAD
f3ef592 HEAD@{49}: commit: zancun3
6b82c75 HEAD@{50}: commit: zancun2
e900fa0 HEAD@{51}: commit: zancun
//比如说,回退到commit: zancun3,只需要:
git reset --hard f3ef592 (或者HEAD@{49}) 即可
//这个命令对于找回丢失的代码非常有用。
//--soft的妙用
//使用--soft只回退commit,修改代码没有回退,此时可以重新生产commit,用于整合新修改的代码合并到同一个commit下

git pull --rebase origin  master  //远程代码与本地代码冲突时,更新当前本地仓库代码
//修改已提交commit
运行git rebase --interactive commitid^。注意^,我们要rebase到要修改的commit的前一个commit。
在跳出的编辑器中,将commitid所在行的pick改成edit
git commit --amend
git rebase --continue
git push origin  master -f  //强制推送至远程仓库

git stash暂存代码

git stash # 保存某次修改,所有未提交的修改都保存起来,用于后续恢复当前工作目录
git reflog # 查看历史命令
git revert # 回退某个修改
git stash pop / git stash apply
恢复最新缓存的工作目录(第一个),并删除缓存堆栈中的那一个stash删除(pop), apply则只恢复不删除
$ git stash list
查看现有所有stash
在使用git stash pop(apply)命令时可以通过名字指定使用哪个stash,默认使用最近的stash(即stash@{0})
$ git stash drop
移除最新的stash,后面也可以跟指定stash的名字

patch的生成

当前分支所有超前master的提交:
git format-patch -M master
某次提交以后的所有patch:
git format-patch 4e16 --4e16指的是commit名
某次提交的patch:
git format-patch -1 4e16 --4e16指的是commit名
打补丁:
常用命令git patch 、git apply、git am
git diff 和 git format-patch 生成的补丁文件都可以使用git patch 、git apply来打补丁,但是 git am 仅可以用于git format-patch 生成的补丁。
git patch -p1 < patch_files或者直接使用git apply patch_files
注意,在执行 patch 命令时,指定-p1,当 位置是在哪里制作的patch,就在哪里执行patch 或者 apply。
git am  patch_files
先检查patch文件:git apply --stat newpatch.patch
检查能否应用成功:git apply --check newpatch.patch
打补丁:git am  newpatch.patch
同时打多个补丁:
git format-patch+ git am 多个patch
1.生成多个patch(git format-patch commitid会生成这个commit之后的所有patch,不包含该commit)
2. 打补丁(git am *.patch可以打进去所有patch)

git diff的使用:
显示工作区与当前分支之间的差异。但是这个指令有一个问题,就是无法显示出 Untracked files ,所以用这个命令生成的patch就无法添加 untracked files 。
git diff  --cached > diff.patch或者git diff  --staged > diff.patch
显示暂存区与当前分支之间的差异,这个指令就可以对新增加的文件进行添加,前提是需要先 git add 将需要增加的文件,添加到暂存区。
git diff --cached/--staged/commit  commit > diff.patch

git push推送代码

将代码推到远程仓库
(1)一般形式为 git push <远程主机名> <本地分支名>:<远程分支名>

git push origin master:master //与下面省略远程分支名master等同

注:<本地分支名>:<远程分支名> 中间的分号两边不能有空格
(2)省略远程分支名,git push <远程主机名> <本地分支名>
推送到与本地分支同名的远程分支,如远程没有则创建

git push -u origin master 

//如果当前分支与多个主机存在追踪关系,则可以使用 -u 参数指定一个默认主机(第一次推送使用),这样后面就可以不加任何参数使用git push
注意:
在推送到远程仓库前记得git pull同步一下远程仓库代码。

git pull同步更新远程仓库代码及冲突处理

git pull origin branch
git pull //直接更新当前分支代码

冲突处理:
在这里插入图片描述1、修改nvme_data_xfer.c冲突部分代码;
2、制作commit;

git add .
git rebase --continue 
git commit -m "xxxx"     //此时重新制作commit即可

取消本次合并

git rebase --abort   

远程仓库有更新如何选择merge还是rebase方式pull最新代码
在这里插入图片描述git config pull.rebase false :Git 将默认使用 merge 的方式来合并分支,将本地代码和远程代码合并成一个新commit,从而避免了 rebase 带来的潜在问题。
git config pull.rebase true: rebase 的好处是可以保持提交历史的线性,避免了 merge 产生的分支合并记录。

git show查看更改代码内容

1、查看当前commit更改内容:
首先查看commit:

[root@localhost /]# git log //commit后面的数字
[root@localhost /]# git show  8290c4a7a6d83069ce3667e15306a84f60b228b4

2、查看前几次更改

[root@localhost /]# git show -2 //前两次更改
[root@localhost /]# git show HEAD~2 //第2次更改内容

git check-ignore查看被忽略文件

有时候发现提交一个文件被git忽略掉,想要查看哪里写了忽略规则把它忽略掉了。

git check-ignore -v  被忽略的文件或文件夹
root@LINUX:/home/test/linux/drivers# git check-ignore -v  ./scsi/scsi_devinfo_tbl.c

test/drivers/scsi/.gitignore:2:scsi_devinfo_tbl.c	./scsi/scsi_devinfo_tbl.c
//忽略某个文件不提交
git rm --cached src/test.sh
//新增.gitignore后建议将缓存文件清掉
git rm -r --cached .
[root@localhost /]# git status --ignored 
//忽略的文件都记录在.gitignore中

git config新增配置

1、增加远程仓库地址:

git config  remote.origin.url "ssh://xxx@192.168.1.98:xxx"

2、修改默认使用vim编辑器

git config --global core.editor vim  

3、删除全局git配置

git config  --global --unset user.name

git remote远程仓库操作

将本地代码和分支更新:

git remote update origin --prune

git cherry-pick合并其他分支某个commit

git cherry-pick feature
//上面代码表示将feature分支的最近一次提交,转移到当前分支
git cherry-pick <HashA> <HashB>
//上面的命令将 A 和 B 两个提交应用到当前分支。这会在当前分支生成两个对应的新提交。
//如果想要转移一系列的连续提交,可以使用下面的简便语法。
git cherry-pick A..B 
//上面的命令可以转移从 A 到 B 的所有提交。它们必须按照正确的顺序放置:提交 A 必须早于提交 B,否则命令将失败,但不会报错
git add .
git cherry-pick --continue
//修改冲突后,提交合并的commit

git rebase删除/修改/合并commit

在这里插入图片描述

1、删除
比如我的提交历史如下,我现在想删除commit_B,但是不影响commit_B之后的提交历史
commit_C
commit_B
commit_A
首先找到commit_B提交之前的一次提交的commit_A
执行如下命令

git rebase -i  commit_A

将commit_B这一行前面的pick改为drop,然后按照提示保存退出,可以使用git log查看已删除commit_B

2、修改

(1)执行如下命令

git rebase -i  commit_A

将commit_B这一行前面的pick改为edit,然后按照提示保存退出,可以使用git log查看已删除commit_B
注意:commit_A应为要修改的commit_B的前一个提交的commit
(2)修改某个log,保存退出

git commit --amend

(3)重定位到最新commit

git rebase --continue

3、合并多个commit

(1)执行如下命令

git rebase -i  commit_A

将commit_B这一行前面的pick改为squash,然后按照提示保存退出,可以使用git log查看已删除commit_B
(2)
此时会重新自动打开一个新的包含所有commit log的文件,将不需要的commit前面加入#注释,留下一个可以修改对应的log,保存即可。

修改某个commit的log

git commit --amend  <commit_A>

git restore回退单个文件

git restore <file>..." //丢弃工作区的改动

git add后回退成非add状态

git restore --staged  <file>

在远程仓库中新增key之后git pull还要输入账号密码

//设置远程仓库地址为ssh地址
git config --global  remote.origin.url  git@xxx
//或者
git config --global  remote.origin.url  ssh://xxx

git blame指定文件的内容,并在每一行注释上显示具体修改信息

//输出文件每行的提交记录
git blame <file>
git blame  drivers/spi/spi.c

在这里插入图片描述

//输出某文件从第几行到第几行的最近一笔提交记录
git blame -L <开始行数>,<结束行数> <file>
git blame  drivers/spi/spi.c -L 100,105

在这里插入图片描述

.gitignore不生效

解决方法就是先修改.gitignore文件,之后在执行以下内容先把本地缓存删除(改变成未track状态),然后再提交。

git rm -r --cached . 
git add .
git commit -m "xxx"

git tag打标签用于版本发布

打标签

git tag -a v0.0.2 -m "add dn200_2_port_pf_v0.0.2.bin for release"

提交标签到远程仓库

git push origin --tags

删除标签:

git tag -d v0.0.2

注解:-d 表示删除,后面跟要删除的tag名字;;

删除远程标签

git push origin :refs/tags/v0.0.2

查看某个tag的详情:git show v0.0.2

四、其他知识链接

Linux系统使用git命令制作patch补丁详解

  • 7
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: git rebase 命令可以用于将一个分支的修改合并到另一个分支上。具体的参数选项包括: 1. `--onto`: 将原来分支上的一段提交,移动到另一个分支上。语法为 `git rebase --onto <目标分支> <原始分支> <终止提交>`。例如,将 feature 分支上从 commit1 到 commit3 的提交移到 master 分支上:`git rebase --onto master feature commit1~3` 2. `--interactive` 或 `-i`: 允许交互式的 rebase 操作,可以对提交进行编辑、删除、修改等操作。语法为 `git rebase -i <终止提交>`。例如,编辑最近 5 个提交:`git rebase -i HEAD~5` 3. `--continue` 或 `-c`: 在解决冲突后,继续执行 rebase 操作。语法为 `git rebase --continue`。例如,解决完冲突后继续执行 rebase:`git rebase --continue` 4. `--abort`: 取消当前正在执行的 rebase 操作。语法为 `git rebase --abort`。例如,取消当前正在执行的 rebase:`git rebase --abort` 下面是一些示例: 1. 将 feature 分支上从 commit1 到 commit3 的提交移到 master 分支上: `git rebase --onto master feature commit1~3` 2. 编辑最近 5 个提交: `git rebase -i HEAD~5` 3. 解决完冲突后继续执行 rebase: `git rebase --continue` 4. 取消当前正在执行的 rebase: `git rebase --abort` ### 回答2: git rebase是Git中的一个命令,用于将一个分支中的提交添加到另一个分支的末尾。它可以用于合并分支或者修改提交记录。 git rebase命令参数选项有以下几个: 1. --onto:指定重演提交操作开始的基础提交。可以使用这个选项将一个分支的部分提交移动到另一个分支上,比如`git rebase --onto master develop feature`将feature分支中从develop分支分叉点开始的提交移动到master分支。 2. -i/--interactive:进入交互模式,可以编辑提交记录。使用这个选项可以修改提交记录、合并或删除提交,以达到想要的提交历史。 3. -m/--onto:在合并过程中,对于多个父提交,指定哪个提交应该用作重演的基础。这个选项可以用来解决分支合并时的冲突。 4. --ignore-date:在重演提交时,忽略提交的时间戳,将它们全部设置为当前时间。 下面是一些git rebase命令的示例: 1. `git rebase develop`:将当前分支的提交重演到develop分支的最新提交之后。 2. `git rebase --onto master develop feature`:将feature分支中从develop分支分叉点开始的提交重演到master分支之上。 3. `git rebase -i HEAD~5`:进入交互模式,对当前分支的最近5个提交进行编辑。 4. `git rebase -m`:在合并父提交时,指定使用多个父提交中的第一个作为基础。 5. `git rebase --ignore-date`:将当前分支的提交重演到目标分支上,并把所有提交的时间戳设置为当前时间。 以上是git rebase命令参数选项以及示例的详细介绍。使用这些选项可以更灵活地使用git rebase命令来管理分支和修改提交记录。 ### 回答3: git rebase 是 Git 提供的一个强大的命令,用于将一个分支上的提交修改应用到另一个分支上。它有几个常用的参数选项,下面详细介绍一下这些选项及其示例: 1. --onto:此选项允许你重新设置一个新的基准分支,将其设置为想要修改应用的目标分支。示例:git rebase --onto master dev1 dev2,表示将 dev1 分支到 dev2 分支之间的提交应用到 master 分支上。 2. --interactive 或 -i:该选项允许你以交互方式重新排列、编辑、删除、合并提交。示例:git rebase -i HEAD~3,表示将当前分支的最新 3 个提交显示在交互式界面上,你可以进行相关操作。 3. --continue:用于在解决冲突后,继续应用之前中断的 rebase 操作。示例:git rebase --continue,表示继续之前被中断的 rebase 操作。 4. --skip:在解决冲突后,使用该选项来跳过当前的提交,继续应用之后的提交。示例:git rebase --skip,表示跳过当前提交,继续应用其他提交。 5. --abort:用于取消之前的 rebase 操作,恢复到 rebase 之前的状态。示例:git rebase --abort,表示放弃当前正在进行的 rebase 操作,恢复到 rebase 之前的状态。 以上是 git rebase 命令的一些常用参数选项及其示例,这些选项能够帮助开发者更灵活地管理和应用提交修改,提高工作效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值