linux下git的使用_linux git使用

同创建本地标签一样,删除了本地标签之后也要同时删除远程仓库的标签。

新版本Git (> v1.7.0)
git push origin --delete <版本号>

6、fork别人的代码后如何保持和原作者同步的更新

在GitHub上我们会去fork别人的一个项目,这就在自己的Github上生成了一个与原作者项目互不影响的副本,自己可以将自己Github上的这个项目再clone到本地进行修改,修改后再push,只有自己Github上的项目会发生改变,而原作者项目并不会受影响,避免了原作者项目被污染。但经过一段时间, 有可能作者原来的代码变化很大, 你想接着在他最新的代码上修改, 这时你需要合并原作者的最新代码过来, 让你的项目变成最新的。

1、先克隆项目到本地:
Git clone https://github.com/iakuf/mojo
cd mojo

2、添加原作者项目的 remote 地址, 然后将代码 fetch 过来
git remote add sri https://github.com/kraih/mojo
git fetch sri
‘sri’相当于一个别名
查看本地项目目录: git remote -v

3、合并
git checkout master
git merge sri/master
如果有冲突的话,需要丢掉本地分支:
git reset –hard sri/master

4、这时你的当前本地的项目变成和原作者的主项目一样了,可以把它提交到你的GitHub库
git commit -am ‘更新到原作者的主分支’
git push origin
git push -u origin master -f –强制提交

7、.gitignore规则不生效的解决办法

把某些目录或文件加入忽略规则,按照上述方法定义后发现并未生效,原因是.gitignore只能忽略那些原来没有被追踪的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。那么解决方法就是先把本地缓存删除(改变成未被追踪状态),然后再提交:

git rm -r --cached .
git add .
git commit -m 'update .gitignore'

8、GIT 查看/修改用户名和邮箱地址

用户名和邮箱地址的作用

  1. 用户名和邮箱地址是本地git客户端的一个变量,不随git库而改变。
  2. 每次commit都会用用户名和邮箱纪录。每次commit都会用用户名和邮箱纪录。
  3. github的contributions统计就是按邮箱来统计的。

查看用户名和邮箱地址:

$ git config user.name

$ git config user.email

修改用户名和邮箱地址:

$ git config --global user.name "username"

$ git config --global user.email "email"

其中,加上 --global 是全局设置的意思,不加是局部设置的意思。

  • git push 报错 403:
The requested URL returned error:
403

可以清楚缓存后,在尝试。命令如下:

git config --local --unset credential.helper
git config --global --unset credential.helper
git config --system --unset credential.helper


关于 credential 可以参见:

https://blog.csdn.net/u012163684/article/details/52433645

9、git 对比两个分支差异

比如我们有 2 个分支:master, dev,现在想查看这两个 branch 的区别,有以下几种方式:

1.查看 dev 有,而 master 中没有的:

git log dev ^master 

同理查看 master 中有,而 dev 中没有的内容:

git log master ^dev

这里写图片描述

2 查看 dev 中比 master 中多提交了哪些内容:

git log master..dev

注意,列出来的是两个点后边(此处即dev)多提交的内容。同理,想知道 master 比 dev 多提交了什么:

git log dev..master

3 不知道谁提交的多谁提交的少,单纯想知道有什么不一样:
git log dev…master

4.在上述情况下,再显示出每个提交是在哪个分支上:
git log --left-right dev…master

10、改写提交 (commit)

  • git commit --amend : 该命令可以使将这一次的提交合并到上一次最后的提交 commit 里。
  • git revert HEAD: 通过修改 HEAD 的指向就可以实现撤销恢复。HEAD 表示工作区当前指针。
  • git reset --hard HEAD~~ : 如果想删除当前分支最前面的两个提交, 可以使用该命令。如果撤销失败,可以使用 git reset --hard ORIG_HEAD 恢复到原来的状态。
  • git cherry-pick 99daed2: git cherry-pick 可以将任意分支上的指定的 hash commit (如 99daed2) 合并导入到当前操作(如 master)分支。
  • rebase -i:合并过去的几个提交成一个提交。如 git rebase -i HEAD~~。这样两个提交就合并成一个提交了。可以用 log命令确认历史记录。若其中还要修改某些文件内容,则可以修改后使用 git commit --amend 合并至上一次提交后,在执行 git rebase --continue.
  • merge --squash: 本地端的历史记录的状态如下图显示。把issue1分支的所有提交合并成一个提交,并导入到master分支。
    在这里插入图片描述
  • 切换到master分支后,指定 --squash选项执行merge。git checkout master , git merge --squash issue1 . 若有冲突,解决后, add 冲突文件后,再 commit 即可。

11、git 中 submodule 子模块的使用

背景:我们经常会遇到:某个工作中的项目需要包含并使用另一个项目。 也许是第三方库,或者你独立开发的,用于多个父项目的库。 现在问题来了:你想要把它们当做两个独立的项目,同时又想在一个项目中使用另一个。

如果将这个库包含进来,那么无论用何种方式都很难定制它,部署则更加困难,因为你必须确保每一个客户端都包含该库。 如果将代码复制到自己的项目中,那么你做的任何自定义修改都会使合并上游的改动变得困难。

Git 通过子模块来解决这个问题。 子模块允许你将一个 Git 仓库作为另一个 Git 仓库的子目录。 它能让你将另一个仓库克隆到自己的项目中,同时还保持提交的独立。git 提交日志的独立,代码管理的独立性。从而避免将主项目和子项目混成一谈,从而避免 git 代码管理的混乱。

下面我们介绍子模块相关的基础命令,详细使用请参考 man page

子模块的添加

添加子模块非常简单,命令如下:

git submodule add <url> <path>

其中,url为子模块的路径,path为该子模块存储的目录路径。执行成功后,git status会看到项目中修改了.gitmodules,并增加了一个新文件(为刚刚添加的路径)

git diff --cached 查看修改内容可以看到增加了子模块,并且新文件下为子模块的提交hash摘要
git commit提交即完成子模块的添加

子模块的使用

克隆项目后,默认子模块目录下无任何内容。需要在项目根目录执行如下命令完成子模块的下载:

git submodule init
git submodule update

或:

git submodule update --init --recursive

执行后,子模块目录下就有了源码,再执行相应的makefile即可。

子模块的更新

子模块的维护者提交了更新后,使用子模块的项目必须手动更新才能包含最新的提交。
在项目中,进入到子模块目录下,执行 git pull更新,查看git log查看相应提交。

完成后返回到项目目录,可以看到子模块有待提交的更新,使用git add,提交即可。

删除子模块

有时子模块的项目维护地址发生了变化,或者需要替换子模块,就需要删除原有的子模块。

删除子模块较复杂,步骤如下:

rm -rf 子模块目录 删除子模块目录及源码
vi .gitmodules 删除项目目录下.gitmodules文件中子模块相关条目
vi .git/config 删除配置项中子模块相关条目
rm .git/module/* 删除模块下的子模块目录,每个子模块对应一个目录,注意只删除对应的子模块目录即可
执行完成后,再执行添加子模块命令即可,如果仍然报错,执行如下:

git rm --cached 子模块名称

完成删除后,提交到仓库即可。

12、git batch 打补丁

根据 commit 记录生成的 patch,一般我们可以通过 git log 查看有哪一些 commit

1、使用git format-patch生成所需要的patch
  • 当前分支所有超前master的提交:git format-patch -M master
  • 某次提交以后的所有patch: git format-patch 4e16 --4e16指的是commit名
  • 从根到指定提交的所有patch: git format-patch --root 4e16
  • 某两次提交之间的所有patch: git format-patch 365a..4e16 --365a和4e16分别对应两次提交的名称
  • 某次提交(含)之前的几次提交:git format-patch –n 07fe --n指patch数,07fe对应提交的名称
  • 故,单次提交即为:git format-patch -1 07fe

git format-patch 生成的补丁文件默认从1开始顺序编号,并使用对应提交信息中的第一行作为文件名。如果使用了-- numbered-files选项,则文件名只有编号,不包含提交信息;如果指定了–stdout选项,可指定输出位置,如当所有patch输出到一个文件;可指定-o <dir>指定patch的存放目录;

2、应用patch
  • 先检查patch文件:git apply --stat newpatch.patch
  • 检查能否应用成功:git apply --check newpatch.patch
  • 打补丁:git am --signoff < newpatch.patch
    (使用-s或–signoff选项,可以commit信息中加入Signed-off-by信息)

如果应用patch出现问题,发生冲突:

  • 最简单方法是先使用 git am --abort,然后手动的添加此patch, patch -p1 < PATCH,手动解决掉代码冲突,最后使用 git commit -a 提交代码。但是这样做有个问题就是你会失去PATCH中原本包含的commit信息(比如From,Date,Subject,Signed-off-by等)
    更多详细可参见: http://linux.die.net/man/1/git-format-patch

13、参见其他更加完整的 git 使用命令文档说明,如下:

https://backlog.com/git-tutorial/cn/reference/

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前在阿里

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Linux运维全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上运维知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以点击这里获取!

中…(img-x58pIb2X-1714141106036)]
[外链图片转存中…(img-bw56y207-1714141106037)]
[外链图片转存中…(img-uvXJONZS-1714141106037)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上运维知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以点击这里获取!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值