Git常用操作

3 篇文章 0 订阅

目录

设置相关

设置用户名和邮箱

为所有项目设置默认的用户名和邮箱

不同的项目设置不同的用户名和邮箱

历史版本相关

回滚到任意历史版本

从指定历史版本拉取新分支

获取指定的历史版本代码

补丁相关

补丁生成

应用补丁

注意事项

分支相关

重命名本地分支

跟踪远程分支

删除远程分支

重命名远程分支

推送本地分支到远程仓库

合并指定commits到另一个分支

从远程仓库获取最新代码合并到本地分支

从指定提交创建分支

撤销相关

撤销当前目录下工作区所有修改

撤销暂存区所有修改

撤销已经推送到远程的修改

日志相关

查看最近几条提交记录的日志

查找包含关键字的日志记录

子模块相关

初始化子模块

克隆项目时自动初始化并更新仓库中的每一个子模块

更新子模块

添加子模块

删除子模块

标签相关

创建轻量标签

创建附注标签

在之前的提交上打标签

推送单个标签

推送多个标签

删除远程标签

重命名标签

列出所有标签

查找标签

查看标签对应的提交信息

想要工作目录与仓库中特定的标签版本完全一样

问题解决

No submodule mapping found in .gitmodule

暂存

保存本地修改

恢复暂存的修改

删除暂存的修改

查看所有暂存的修改

查看暂存修改的内容

其他

修改默认编辑器

参考文章


设置相关

设置用户名和邮箱

为所有项目设置默认的用户名和邮箱

git config --global user.name"xxxxxx"
git config --global user.email"xxxxx@163.com"

不同的项目设置不同的用户名和邮箱

  1. 进入项目文件夹
执行下面的命令
git config user.name "xxxx"
git config user.email "xxxx@163.com"

历史版本相关

回滚到任意历史版本

  1. 查找需要回滚版本的哈希值,例如e377f60e28c8b84158;
  2. 回滚到指定版本,git reset --hard e377f60e28c8b84158

从指定历史版本拉取新分支

  1. 查找需要创建新分支的版本的哈希值,例如e377f60e28c8b84158;
  2. 创新新分支,git checkout -b 新分支名 e377f60e28c8b84158

获取指定的历史版本代码

  1. 查找需要获取代码的历史版本的哈希值,例如e377f60e28c8b84158;
  2. 获取代码,git checkout e377f60e28c8b84158

补丁相关

补丁生成

当前分支所有超前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的存放目录;

应用补丁

1、先检查patch文件:git apply --stat newpatch.patch

2、检查能否应用成功:git apply --check newpatch.patch

3、打补丁:git am --signoff < newpatch.patch (使用-s或--signoff选项,可以commit信息中加入Signed-off-by信息)

注意事项

1、在使用git am之前, 你要首先git am --abort 一次,来放弃掉以前的am信息,这样才可以进行一次全新的am,不然会遇到如下错误:

 .git/rebase-apply still exists but mbox given.

2、git am 可以一次合并一个目录下所有的patch,例如:

git am somedir/*.patch

分支相关

重命名本地分支

git branch -m old_branch_name new_branch_name

跟踪远程分支

例如想要跟踪远程的serverfix分支,可使用如下命令

git checkout --track origin/serverfix

如果想要将本地分支与远程分支设置为不同名字(如sb),可将上述命令改为

git checkout -b sf origin/serverfix

删除远程分支

git push origin --delete remote_branch

重命名远程分支

  1. 删除远程分支:git push origin :remote_branch_name
  2. 将本地分支推送到远程分支上,如果远程分支不存在,则创建此远程分支:git push origin local_branch_name:remote_branch_name

推送本地分支到远程仓库

git push origin branch_local

合并指定commits到另一个分支

git checkout dst_branch_name
git cherry-pick commit_id

例如:

git checkout master
git cherry-pick 62ecb3

从远程仓库获取最新代码合并到本地分支

git merge origin/branch_name

从指定提交创建分支

方法一

git checkout -b branch_name commit_id

方法二

1、确定需要取出版本的commit值

2、基于该commit创建分支

git branch branch_name commit_id

3、切换到该分支

git checkout branch_name

撤销相关

撤销当前目录下工作区所有修改

撤销当前目录下没有add的修改

git checkout .

撤销暂存区所有修改

git reset

撤销已经推送到远程的修改

步骤一:使用“git reset --hard 版本号”在本地回退到相应的版本;

步骤二:使用“git push origin <分支名> --force”覆盖相应的分支。

日志相关

查看最近几条提交记录的日志

git log -2  //查看最近的2条提交的日志记录

查找包含关键字的日志记录

git log --grep xxx

子模块相关

初始化子模块

git submodule init

克隆项目时自动初始化并更新仓库中的每一个子模块

git clone --recursive https://xxx

更新子模块

方法一

进入子模块目录,运行git fetch和git merge目录,例如:

方法二

在父项目目录执行git submodule update --remote xxx,默认检出子模块仓库的master分支,例如:

如果想检出master分支以外的分支,可以使用一下命令

git config -f .gitmodules submodule.XXX.branch stable
以上目录将XXX子模块跟踪仓库的“stable” 分支。

如果不用- f .gitmodules选项,那么它只会为你做修改。但是在仓库中保留跟踪信息更有意义一些,因为其他人也可以得到同样的效果。 

添加子模块

git submodule add  https://xxx/otherprj [path]

如果不带path则子模块会将子项目放到一个与仓库同名的目录。

删除子模块

Git中目前尚无直接删除子模块的命令,但可以通过以下步骤删除:

  1. 从.gitmodules文件中删除相关部分;
  2. 保存.gitmodules更改:git add .gitmodules;
  3. 从.git / config中删除相关部分;
  4. 从工作树和索引中删除子模块文件:git rm --cached path_to_submodule (结尾没有斜杠);
  5. 删除子模块的.git目录:rm -rf .git/modules/path_to_submodule;
  6. 提交更改:git commit -m "Removed submodule <name>";
  7. 删除现在未跟踪的子模块文件:rm -rf path_to_submodule。

标签相关

创建轻量标签

git tag tag_name [commit ID]
例如:
git tag v1.4 在当前提交创建轻量标签
git tag v1.4 abcd 在Commit ID以abcd开头的提交创建轻量标签

创建附注标签

git tag -a tag_name -m tag_message
例如,git tag -a v1.4 -m 'my version 1.4'

-m 选项指定了一条将会存储在标签中的信息。 

在之前的提交上打标签

git tag -a tag_name commit_id
例如,git tag -a v1.2 9fceb02

推送单个标签

git push origin tag_name

推送多个标签

使用带有--tags 选项的git push命令。 这将会把所有不在远程仓库服务器上的标签全部传送到那里。

删除远程标签

git tag -d tag_name 
git push origin :refs/tags/tag_name

重命名标签

git tag new_tag old_tag
git tag -d old_tag
git push origin :refs/tags/old_tag
git push --tags

列出所有标签

git tag

查找标签

git tag -l 'v1.8.5*'

查看标签对应的提交信息

git show v1.4

想要工作目录与仓库中特定的标签版本完全一样

git checkout -b branch_name tag_name

例如:git checkout -b version2 v2.0.0

问题解决

No submodule mapping found in .gitmodule

描述:有时候.gitmodule有对应的子模块的条目,但在执行git submodule update --init时仍然会报类似No submodule mapping found in .gitmodules for path 'XXX/YYY'的错误信息

解决:将.gitmodules文件中对应模块条目的path中的反斜杠改为斜杠。

示例:"path = thirdsrc\boost" 改为 "path = thirdsrc/boost"

暂存

保存本地修改

//保存本地修改
git stash

//本地修改并附加消息
git stash save "message"

恢复暂存的修改

//恢复暂存修改到本地,同时从暂存栈中删除最近的暂存
git stash pop

//恢复最近暂存的修改到本地,但不从暂存栈中删除最近的暂存
git stash apply

//恢复指定暂存的修改到本地,但不从暂存栈中删除该暂存
git stash apply stash@{xxx}

删除暂存的修改

//清除所有暂存的修改
git stash clear

//删除指定暂存的修改
git stash drop stash@{xxx}

查看所有暂存的修改

git stash list

查看暂存修改的内容

可以使用git stash show命令,后面可以跟着stash名字。示例如下:

$ git stash show
 index.html | 1 +
 style.css | 3 +++
 2 files changed, 4 insertions(+)

在该命令后面添加-p或--patch可以查看特定stash的全部diff,如下:

$ git stash show -p
diff --git a/style.css b/style.css
new file mode 100644
index 0000000..d92368b
--- /dev/null
+++ b/style.css
@@ -0,0 +1,3 @@
+* {
+  text-decoration: blink;
+}
diff --git a/index.html b/index.html
index 9daeafb..ebdcbd2 100644
--- a/index.html
+++ b/index.html
@@ -1 +1,2 @@
+<link rel="stylesheet" href="style.css"/>

其他

修改默认编辑器

方法一:git config --global core.editor vim

方法二:打开.git/config文件,在core中添加 editor=vim即可

参考文章

git回滚到任意版本

git 为不同的项目设置不同的用户名和邮箱

指定某个git的版本代码拉取新的分支

[Git] 获取指定的历史版本代码

《Pro Git Second Edition》

git pull和git merge区别&&Git冲突:commit your changes or stash them before you can merge. 解决办法

How do I remove a submodule?

git分支重命名

No submodule mapping found in .gitmodule for a path that's not a submodule

如何使用git 生成patch 和打入patch

Git合并特定commits 到另一个分支

git撤销已经push到远端的commit

git基于历史commit创建分支

修改git默认的编辑器nano为vim的方法

git-stash用法小结

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值