1.Git使用技巧-常用命令2

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 1.Git使用技巧-常用命令2

一、本地仓库整理


提示:这里可以添加本文要记录的大概内容:

本地仓库整理分为整理上一次提交和整理多次提交

1.整理上一次提交:

把当前暂存区里的内容合并到上一次commit里,而且还可以修改上一次提交的message信息。

git commit --amend //把此次提交追加到上一次的commit内容里

上面命令执行后,跳出一个VIM编辑框(如左下图),此时我们可以修改提交内容格式(如右图)

Git会新增加一个commit-id覆盖了上一次的commit-id, 这样漏掉的文件会合并到上一次的提交,然后我们也修改了提交message的规范,大家可以通过git log –p去查看这次内容。当然我们除了添加“漏掉”的文件,也可以删除“误修改”的文件。最后使用git push –fore强制推送修改后的commit。

2.整理多次提交

git rebase –i commesh1  //-i后面的参数表示不要合并的commit的hash值
// -i 后为空,就是整理所有的

demo:

执行 git rebase -i 打开如下文件

文件内容解析:

可以看到其中分为两个部分,上方未注释的部分是填写要执行的指令,而下方注释的部分则是指令的提示说明。指令部分中由前方的命令名称、commit hash 和 commit message 组成。

此时的commit内容的排列和git log里的排列是反的,也就是倒序的。

pick 和 squash的意思如下。我们将 ad777ea和a271901这两个commit前方的命令改成 squash 或 s,然后输入:wq以保存并退出

pick 的意思是要会执行这个 commit;

squash 的意思是这个 commit 会被合并到前一个commit;

如果我们仅仅修改commit message,需要把打算修改的commit的对应pick命令修改为reword,然后保存。


退出后会弹出如下界面,即需要我们重新编辑合并后的commit信息,未注释掉的是会包含在commit message里的,按”wqa”保存后即完成了此次commit的合并

只能使用如下提交命令

上述配置修改保存后:

You can amend the commit now, with
  git commit --amend
Once you are satisfied with your changes, run
  git rebase --continue
  如果在修改前所有的commit都已经push到远程仓库的话,我们需要使用git push --force强制推送到远程仓库

进入分支奠基状态

Administrator@DESKTOP-TH29QNR MINGW64 /j/git-test/mathlib-test (master|REBASE 
1/2)

注意:

如果在修改前所有的commit都已经push到远程仓库的话,我们需要使用git push --force强制推送到远程仓库。


二、查看本地仓库


查看在暂存区提交本地仓库的信息。

查看

git  log   // 不带任何参数
git log --onelie  //每条日志显示一行
git log -[length]  //只显示前面的length 条日志
git log --skip=[skip] -3   # 跳过前面的skip条日志
git log -p   # 显示一些统计信息以及文件的改动内容和行信息
git log --stat   # 显示提交的作者 日期 message 和文件内容统计信息
git shortlog   # 显示每个author提交commit和多少条commit
git show commit-id   # 显示commit-id的提交内容,包括所有文件的修改信息


过滤

按日期
       $ git log --after="2018-7-1"    # 2018年7月1好之后的所有日志
       $ git log –-before="2014-7-1"
按作者
       $ git log --author="Dounin"  
按照提交信息
       $ git log --grep=“issue”  # 按照提交本中是否包含issue的日志
按文件
       $ git log -- ./src/http/modules/ngx_http_xslt_filter_module.c
按照内容
       $ git log -S “ngx_free” # 即所有文件中包含了 ngx_free字符串的修改
按照范围 
       $ git log <since>..<until> # 比如 git log master..feature这可以显示出自从master分支fork之后,feature分支上所有的提交


二、逆向操作


1. 检出覆盖本地文件 workspace -> NULL

文件checkout 是从本地仓库检出文件,覆盖workspace 和index 内容

git checkout命令就是从本地仓库中或暂存区检出文件,并且覆盖工作目录的内容。

Demo:

$ git checkout branches/stable-1.14  # 检出到branches/stable-1.14分支上,即用1.14分支的内容覆盖了工作区所有内容
$ git checkout 9bfbacdd  # 检出到9bfbacdd(commit id)上,即用这个commit 内容覆盖了工作区所有内容
$ git checkout main.cpp # 从暂存区中检出内容,并且覆盖main.cpp文件内容,即尚未添加到暂存区的修改会被丢弃掉
git checkout .  # 注意有一个“.”,会从暂存区里取出所有内容覆盖掉工作区的所有修改,如果连暂存区的内容也不想要
                   # 则可以git checkout commit-id
git clean -xdf  # 删除当前目录下所有的修改
如果我们想要放弃本地某个文件的修改:
git checkout file-name  # 从暂存区里


1.1 删除workspace 文件

文件已经存在工作区了,但是尚未提交到暂存区,文件状态是未标记即是untracked的内容,那么我们可以使用

git clean命令来删除这些文件,用法如下:


git clean -n :是一次clean的演习,告诉你哪些文件会被删除,记住他不会真正的删除文件,只是一个提醒。

git clean –f :删除当前目录下所有没有track过的文件,他不会删除.gitignore文件里面指定的文件夹和文件,不管这些文件有没有被track过。

git clean -f :删除指定路径下的没有被track过的文件

git clean -df :删除当前目录下没有被track过的文件和文件夹

git clean -xf :删除当前目录下所有没有track过的文件,不管他是否是.gitignore文件里面指定的文件夹和文件。


2. 本地仓库回滚

本地有三个commit,现在想针对这三个commit作回滚,可

以使用git reset命令来做,reset参数如下意思:

–soft – 缓存区和工作目录都不会被改变

–mixed – 默认选项。你指定的提交同步,但工作目录不受影响

–hard – 缓存区和工作目录缓存区和都同步到你指定的提交

git reset --hard HEAD~{n}就是把HEAD指针回退n个版本(commit),并且使用该commit的内容覆盖掉工作区的内容,即丢弃了前面n个commit的修改和当前工作区的修改。然后调用**git push origin master**推送到远程仓库。


3. 远程仓库

1. 远程仓库未基于代码做修改

使用git revert 回滚,会保留commit记录,


示例:

现在我想d061cb3这个分支不是我想要的,要回退掉:

流程如下:


git revert d061cb3 # 因为4bff67b是晚于d061cb3的,如果这两个修改的内容有依赖,是会有冲突的,当然如果想取消这次回退可以使用,git revert --abort

fix conflict # 手动去解决冲突

git commit # 然后提交,此时使用git log会发现原理的git commit记录还在,但是增加了一个revert的记录

git push # 推送至远程库


逆操作总结


三、删除


1. 删除远程仓库普通文件

流程:

    // 本地仓库
      git rm -rf xx
      git add  xx
       git commit –m “remove timer mudlue”
       git push

2. 永久删除

静默删除:

比如上传了保密文件,一般开发人员不应该能看到这样的秘钥文件,需要永久删除

git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch sort.hpp’ 
        --prune-empty --tag-name-filter cat -- --all  # sort.hpp也可以替换成文件夹, 此时要在git rm后添加-r参数
// 提交远程仓库
git push origin master --force  # 从上图我们也能看出来远程仓库没有被修改


四.查看文件


  1. 查看某个文件的全部commit
git log --oneline filename   # 显示文件的所有修改记录
  1. 查看文件所有commit 内容
$ git log –p filename  # 显示所有commit的修改
  1. 查看某个文件gommit 内的修改
$ git show commit-id filename   # 显示某个commit里文件的修改
  1. 查看本地修改的差异
$ git diff filename   # 查看本地对某个文件做了那些具体修改

5.与某个commit 比较

$ git diff commit-id filename   # 显示与某个commit间所有的差异,commit-id可以替换成HEAD,比如HEAD~2

6.两个commit 之间的额差异

$ git diff commit-id1 commit-id2   # 显示两个commit所有的差异


五、暂存文件


1.常用命令

$ git stash   # 将工作区的修改保存到缓存区,默然取名为:
          WIP on <branch_name> :<latest_commit_id> <latest_commit_message>
$ git stash save <name>   # 将工作区的修改保存到缓存区,且取名为name
$ git stash pop    # 取出缓存区栈顶(即最近一次)的内容,并且会删除此次pop的内容
$ git stash list   # 查看缓存里所有存储的修改
$ git stash apply stash@{X} #  取出stash里的内容,X为序号,但是不会删除stash@{X}
$ git stash drop stash@{X}  # 删除stash@{X}
$ git stash clear    # 删除缓存区里所有的记录


2. 暂存如何使用

两个分支:master FT-12345

git stash   #  暂存修改
        git stash pop  # 从缓存里取出修改


调用git stash后就可以使用git checkout master分支上去修复bug了,修复完了之后再git checkout FT-12345后git stash pop


总结


文章主要是讲解本地仓库,回滚,查看提交记录等信息的命令


参考


Git教程

文章参考与<零声教育>的C/C++linux服务期高级架构系统教程学习:

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
3月前
|
存储 开发工具 git
|
7天前
|
缓存 Java Shell
[Git]入门及其常用命令
本文介绍了 Git 的基本概念和常用命令,包括配置、分支管理、日志查看、版本回退等。特别讲解了如何部分拉取代码、暂存代码、删除日志等特殊需求的操作。通过实例和图解,帮助读者更好地理解和使用 Git。文章强调了 Git 的细节和注意事项,适合初学者和有一定基础的开发者参考。
22 1
[Git]入门及其常用命令
|
3月前
|
开发工具 git
【GIT 第二篇章】GIT常用命令
Git常用命令涵盖初始化、状态管理、提交、分支处理、远程操作等关键流程。`git init`启动本地仓库,`git clone`下载远程仓库。通过`git status`和`git diff`检查工作状态与差异。利用`git add`暂存文件,`git commit`保存更改。借助`git branch`、`git checkout`、`git merge`和`git rebase`管理分支。使用`git fetch`、`git pull`和`git push`同步远程仓库。通过`git reset`、`git revert`和`git checkout`实现版本回退。
65 0
|
30天前
|
开发工具 git
git学习四:常用命令总结,包括创建基本命令,分支操作,合并命令,压缩命令,回溯历史命令,拉取命令
这篇文章是关于Git常用命令的总结,包括初始化配置、基本提交、分支操作、合并、压缩历史、推送和拉取远程仓库等操作的详细说明。
99 1
git学习四:常用命令总结,包括创建基本命令,分支操作,合并命令,压缩命令,回溯历史命令,拉取命令
|
11天前
|
开发工具 git 开发者
|
11天前
|
开发工具 git 开发者
提升Git效率:掌握这5个高级命令
【10月更文挑战第17天】
33 0
|
2月前
|
存储 Linux 开发工具
掌握 Git 命令:每个开发者的必备技能
无论团队项目还是个人开发,掌握 Git 命令都是必备技能。本文介绍 Git 的基本概念与命令,如初始化仓库 (`git init`)、添加文件 (`git add`)、提交更改 (`git commit`)、检出分支 (`git checkout`)、合并分支 (`git merge`) 等,还分享了高级技巧如查看差异 (`git diff`)、撤销提交 (`git revert`)、修复合并冲突 (`git mergetool`) 和使用别名简化命令 (`git config --global alias.ci commit`)。
|
2月前
|
机器学习/深度学习 Shell 开发工具
Python使用管道执行git命令报错|4-7
Python使用管道执行git命令报错|4-7
|
2月前
|
存储 Linux 开发工具
Git基础命令,分支,标签的使用【快速入门Git】
本文详细介绍了Git版本控制系统的基础概念和常用命令,包括工作区、暂存区和版本库的区别,文件状态的变化,以及如何进行文件的添加、提交、查看状态、重命名、删除、查看提交历史、远程仓库操作和分支管理,还涉及了Git标签的创建和删除,旨在帮助读者快速入门Git。
Git基础命令,分支,标签的使用【快速入门Git】
|
2月前
|
存储 Linux 开发工具
掌握 Git 命令:每个开发者的必备技能
本文介绍 Git 的核心概念,如仓库、提交、分支与合并,并提供了常用命令,如初始化仓库 (`git init`)、提交更改 (`git commit -m &quot;Commit message&quot;`)、拉取 (`git pull`) 和推送 (`git push`) 等。此外,还分享了高级技巧,如撤销提交 (`git revert &lt;commit&gt;`)、交互式暂存 (`git add -i`) 和使用别名简化命令 (`git config --global alias.ci commit`) 等,帮助开发者提升效率。无论是初学者还是资深开发者,都能从中受益。