当前位置:   article > 正文

Git常用操作

Git常用操作

目录

设置相关

设置用户名和邮箱

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

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

历史版本相关

回滚到任意历史版本

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

获取指定的历史版本代码

补丁相关

补丁生成

应用补丁

注意事项

分支相关

重命名本地分支

跟踪远程分支

删除远程分支

重命名远程分支

推送本地分支到远程仓库

合并指定commits到另一个分支

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

从指定提交创建分支

撤销相关

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

撤销暂存区所有修改

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

日志相关

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

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

子模块相关

初始化子模块

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

更新子模块

添加子模块

删除子模块

标签相关

创建轻量标签

创建附注标签

在之前的提交上打标签

推送单个标签

推送多个标签

删除远程标签

重命名标签

列出所有标签

查找标签

查看标签对应的提交信息

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

问题解决

No submodule mapping found in .gitmodule

暂存

保存本地修改

恢复暂存的修改

删除暂存的修改

查看所有暂存的修改

查看暂存修改的内容

其他

修改默认编辑器

参考文章


设置相关

设置用户名和邮箱

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

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

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

  1. 进入项目文件夹
  1. 执行下面的命令
  2. git config user.name "xxxx"
  3. 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到另一个分支

  1. git checkout dst_branch_name
  2. git cherry-pick commit_id

例如:

  1. git checkout master
  2. 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分支以外的分支,可以使用一下命令

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

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

添加子模块

  1. git submodule add https://xxx/otherprj [path]
  2. 如果不带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开头的提交创建轻量标签

创建附注标签

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

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

在之前的提交上打标签

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

推送单个标签

git push origin tag_name

推送多个标签

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

删除远程标签

  1. git tag -d tag_name
  2. git push origin :refs/tags/tag_name

重命名标签

  1. git tag new_tag old_tag
  2. git tag -d old_tag
  3. git push origin :refs/tags/old_tag
  4. git push --tags

列出所有标签

git tag

查找标签

git tag -l 'v1.8.5*'

查看标签对应的提交信息

git show v1.4

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

  1. git checkout -b branch_name tag_name
  2. 例如: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"

暂存

保存本地修改

  1. //保存本地修改
  2. git stash
  3. //本地修改并附加消息
  4. git stash save "message"

恢复暂存的修改

  1. //恢复暂存修改到本地,同时从暂存栈中删除最近的暂存
  2. git stash pop
  3. //恢复最近暂存的修改到本地,但不从暂存栈中删除最近的暂存
  4. git stash apply
  5. //恢复指定暂存的修改到本地,但不从暂存栈中删除该暂存
  6. git stash apply stash@{xxx}

删除暂存的修改

  1. //清除所有暂存的修改
  2. git stash clear
  3. //删除指定暂存的修改
  4. git stash drop stash@{xxx}

查看所有暂存的修改

git stash list

查看暂存修改的内容

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

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

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

  1. $ git stash show -p
  2. diff --git a/style.css b/style.css
  3. new file mode 100644
  4. index 0000000..d92368b
  5. --- /dev/null
  6. +++ b/style.css
  7. @@ -0,0 +1,3 @@
  8. +* {
  9. + text-decoration: blink;
  10. +}
  11. diff --git a/index.html b/index.html
  12. index 9daeafb..ebdcbd2 100644
  13. --- a/index.html
  14. +++ b/index.html
  15. @@ -1 +1,2 @@
  16. +<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用法小结

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/457985
推荐阅读
相关标签
  

闽ICP备14008679号