git/github 常用操作

git/github 常用操作

1. git删除远程文件夹或文件的方法

预览将要删除的文件

git rm -r -n --cached 文件/文件夹名称
加上 -n 这个参数,执行命令时,是不会删除任何文件,而是展示此命令要删除的文件列表预览。

确定无误后删除文件

git rm -r --cached 文件/文件夹名称

提交到本地并推送到远程服务器

git commit -m "提交说明"
git push origin master

2. git删除本地/远程分支

先切换到别的分支: git checkout dev20180927

删除本地分支: git branch -d dev20181018

如果删除不了可以强制删除,git branch -D dev20181018

有必要的情况下,删除远程分支(慎用):git push origin --delete dev20181018

3. git commit --amend 用法

有时你提交过代码之后,发现一个地方改错了,你下次提交时不想保留上一次的记录;或者你上一次的commit message的描述有误,这时候你可以使用接下来的这个命令:git commit --amend。
git log之后,可以看到你之前提交过的git历史:

接下来,在bash里输入wq退出log状态,执行

git commit --amend

这时bash里会出现以下内容:

其中,second commit是你上次提交的描述,下面是一下说明信息,有告诉你上次提交的文件信息等等,可忽略。接下来你要是想修改描述信息的话。直接键入:i,此时进入了输入模式,变成这样子:

可用键盘上下键转到描述所在的那一行,然后进行修改:

修改完成后,按下 Esc键退出编辑模式,在键入 :wq 回车退出并保存修改,完成提交。这是你再git log 看一下提交日志:

已经修改了提交描述信息,且原来的git版本没有了,喜大普奔!

但是有个地方要注意,就是该操作会改变你原来的commit id哦。

适用场景:

  • 场景1.本地开发代码已提交,提交后发现这次提交的代码有问题,或者漏提交了一些文件,此时,希望达到以下目的:

①修改有问题的代码。

②补足漏提交的文件(一般是新增的文件没有git add .)

③把以上2点相关的代码,和前一次提交的代码合并成1个提交。

④给合并后的这个提交添加新的注释。

解决办法:

--》修改问题代码

--》git add . (把漏提交的文件假如暂存区)

--》执行git commit --amend -m "这里填写提交的注释"

  • 场景2.新接到需求,需要基于master分支拉取一个feature分支,且这个feature分支只有你自己使用(这一点极其重要),由于开发周期较长,你不想每一次都产生一个新的commit,而是每一次commit都修改前一次提交,这样做的好处是,等到你的feature分支提测时,就只有1个干净的commit,没有乱七八糟的提交历史,你只要把这1个commit合并到master里就好了 。

解决办法:在feature分支上,

第1次提交代码时,使用git commit -am "第1次提交的注释"

第2次以后提交代码时,使用git commit --amend -m "这里填写提交的注释"

这样,整个分支可以只有1个commit。

4. 修改配置用户名,邮箱

git config --global user.email "you@example.com"
git config --global user.name "Your Name"

5. git clean用法

删除 untracked files
git clean -f
连 untracked 的目录也一起删掉
git clean -fd
连 gitignore 的untrack 文件/目录也一起删掉 (慎用,一般这个是用来删掉编译出来的 .o之类的文件用的)
git clean -xfd
在用上述 git clean 前,墙裂建议加上 -n 参数来先看看会删掉哪些文件,防止重要文件被误删
git clean -nxfd
git clean -nf
git clean -nfd

6. git 递归拉 子目录用法

git submodule update --init --recursive

7. 撤销git add添加的文件

git add 添加了多余文件
git add . 表示当前目录所有文件,不小心就会提交其他文件
git add 如果添加了错误的文件的话
撤销操作
git status 先看一下add 中的文件
git reset HEAD 如果后面什么都不跟的话 就是上一次add 里面的全部撤销了
git reset HEAD XXX.py 就是对某个py文件进行撤销了
git reset HEAD file 即使对file文件夹进行撤销
git reset --mixed HEAD^ 和 git reset HEAD^ 效果是一样的,不删除工作空间改动代码,撤销commit,并且撤销git add . 操作
git reset --soft HEAD^ 不删除工作空间改动代码,您写的代码仍然保留 撤销commit,不撤销git add .
git reset --hard HEAD^ 删除工作空间改动代码,撤销commit,撤销git add . 注意完成这个操作后,就恢复到了上一次的commit状态。

8. git reset --hard commit_id

git reset --hard commit_id // 强制切到某commit

9. git rebase

在dev分支上执行git rebase master 操作时,这个命令会将dev分支上的所有提交保存为patch,并存放到“.git/rebase”目录下,然后dev分支会去同步master上的最新提交,紧接着将dev上的patch接到dev分支上。这样看来也比较好理解了。
总结一下操作命令:
$ git checkout dev
# 执行这个命令后可能会产生一些冲突,解决完冲突后执行git add操作,然后执行 git rebase --continue
$ git rebase master
$ git checkout master
$ git merge dev

https://juejin.cn/post/7018768725226553375
https://zhuanlan.zhihu.com/p/437636081
http://jartto.wang/2018/12/11/git-rebase/
https://git-scm.com/book/zh/v2/Git-分支-变基
https://juejin.cn/post/6969101234338791432
https://www.cnblogs.com/cheery-go/p/15654584.html

10. git rebase 合并多次 commit 、 删除某次 commit

https://blog.csdn.net/Al_assad/article/details/81145856

ctrl + x, 退出当前编辑, -- 下一个页面 y(英文), -- enter 键
如果有冲突,记得解决冲突后,使用 git rebase --continue 重新回到当前的 git 压缩过程;
同样的,利用 git 压缩 rebase 指令来删除某个 commit,过程和以上是类似的;
将需要删除的 commit 设置操作指令 drop ,保存退出即可;

11. git revert 用法

git revert 撤销 某次操作,此次操作之前和之后的commit和history都会保留,并且把这次撤销作为一次最新的提交

git revert HEAD 撤销前一次 commit
git revert HEAD^ 撤销前前一次 commit
git revert commit (比如:fa042ce57ebbe5bb9c8db709f719cec2c58ee7ff)撤销指定的版本,撤销也会作为一次提交进行保存。

git revert是提交一个新的版本,将需要revert的版本的内容再反向修改回去,版本会递增,不影响之前提交的内容

git revert 和 git reset的区别

  1. git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit。
  2. 在回滚这一操作上看,效果差不多。但是在日后继续merge以前的老版本时有区别。因为git revert是用一次逆向的commit“中和”之前的提交,因此日后合并老的branch时,导致这部分改变不会再次出现,但是git reset是之间把某些commit在某个branch上删除,因而和老的branch再次merge时,这些被回滚的commit应该还会被引入。
  3. git reset 是把HEAD向后移动了一下,而git revert是HEAD继续前进,只是新的commit的内容和要revert的内容正好相反,能够抵消要被revert的内容。

https://blinkfox.github.io/2018/09/24/ruan-jian-gong-ju/git/git-zhi-shi-dian-zheng-li/

12. git cherry-pick

git help cherry-pick
git cherry-pick [--edit] [-n] [-m parent-number] [-s] [-x] [--ff]
[-S[<keyid>]] <commit>…​
git cherry-pick --continue
git cherry-pick --quit
git cherry-pick --abort
其中:
-n, --no-commit 不自动提交
-e, --edit 编辑提交信息

https://blog.csdn.net/u014163312/article/details/105718464
https://blog.csdn.net/a1056244734/article/details/112908080

13. git diff/patch

看下format-patch命令的帮助文档:

usage: git format-patch [<options>] [<since> | <revision-range>]
-n, --numbered use [PATCH n/m] even with a single patch
-N, --no-numbered use [PATCH] even with multiple patches
-s, --signoff add Signed-off-by:
--stdout 指定输出位置,如所有patch输出到一个文件
--cover-letter generate a cover letter
--numbered-files 文件名只有编号,不包含提交信息
--suffix <sfx> 指定patch文件名后缀,默认'.patch',比较常用的还有`.diff`
--start-number <n> start numbering patches at <n> instead of 1
-v, --reroll-count <n> mark the series as Nth re-roll
--rfc Use [RFC PATCH] instead of [PATCH]
--cover-from-description <cover-from-description-mode> generate parts of a cover letter based on a branch's description
--subject-prefix <prefix> Use [<prefix>] instead of [PATCH]
-o, --output-directory <dir> 指定patch的存放目录
-k, --keep-subject don't strip/add [PATCH]
--no-binary don't output binary diffs
--zero-commit output all-zero hash in From header
--ignore-if-in-upstream don't include a patch matching a commit upstream
-p, --no-stat show patch format instead of default (patch + stat)

当前分支所有超前master的提交

git format-patch -M master

某次提交以后的所有patch

git format-patch commitId

从根到指定提交的所有patch

git format-patch --root commitId

某两次提交之间的所有patch

git format-patch commitId1..commitId2

某次提交(含)之前的几次提交
-n指patch数

git format-patch -n commitId

比如单次提交,生成commitId这次提交的patch

git format-patch -1 commitId

生成commitId前一次到commitId这两次修改的patch

git format-patch -2 commitId

14. git查看一个commit属于哪个分支

git branch -r --contains COMMIT_ID

15 python 里面获取git commit short

import subprocess
git rev-parse --short=8 HEAD
def get_git_revision_hash() -> str:
return subprocess.check_output(['git', 'rev-parse', 'HEAD']).decode('ascii').strip()
def get_git_revision_short_hash() -> str:
return subprocess.check_output(['git', 'rev-parse', '--short', 'HEAD']).decode('ascii').strip()
print(get_git_revision_hash())
print(get_git_revision_short_hash())

https://blog.csdn.net/csfchh/article/details/123902952
https://blog.csdn.net/liuhaomatou/article/details/54410361

posted @   michaelchengjl  阅读(60)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Blazor Hybrid适配到HarmonyOS系统
· 万字调研——AI生成内容检测
· 解决跨域问题的这6种方案,真香!
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· 一套基于 Material Design 规范实现的 Blazor 和 Razor 通用组件库
点击右上角即可分享
微信分享提示