主要内容来自参考文章,以个人理解整理。

git add . 和 git add * 的区别

git add .:把本地所有untrack的文件都加入暂存区,并且会根据.gitignore做过滤

git add *:忽略.gitignore把任何文件都加入

删除 GitHub 上 repository 里的文件

代码 push 到 GitHub 上后,便 rm 了本地 repository 的某个文件,如何也删除掉 GitHub 上的这个文件呢

git add .
git commit -a -m ""
git push

git add 只能加入原来没有被跟踪的文件,没有把删除这个行为也加入版本控制,-commit时添加 -a 选项。

撤销 git commit 的内容

git reset --soft HEAD^

HEAD^的意思是上一个版本,也可以写成HEAD~1

如果你进行了2次commit,想都撤回,可以使用HEAD~2

其他参数:

参数意思
--mixed不删除工作空间改动代码,撤销commit,并且撤销git add . 操作。
这个为默认参数,git reset --mixed HEAD^ 和 git reset HEAD^ 效果是一样的。
--soft不删除工作空间改动代码,撤销commit,不撤销git add .
--hard删除工作空间改动代码,撤销commit,撤销git add .
注意完成这个操作后,就恢复到了上一次的commit状态。

如果commit注释写错了,只是想改一下注释,只需要:

git commit --amend

此时会进入默认vim编辑器,修改注释完毕后保存就好了。

git默认不关心大小写

git是默认不区分大小写的,如果先有一个Atest文件夹,后来将文件夹的名称改为了atest,然而在Github上是不会将大写改为小写的。

进入.git文件夹,将config文件的 ignorecase=true 改为 ignorecase=false

git问题

假如你刚clone了远程仓库dev分支,然后基于dev分支创建了自己的本地开发分支xyz,并进行了一些代码修改工作,这时候同事A告诉你他修复了一个重要bug,并已经merge到远程dev分支了。请问如何同步你本地的xyz分支并解释为什么?

git checkout dev && git pull -r && git checkout - && git rebase dev

如果bug不影响我的分支就不着急更新,我倾向于尽量保持分支间的依赖关系简单点。 如果需要更新的话,方法其实很多了,我一般是先pull dev,然后再把xyz重新rebase一下,原因还是希望分支的关系尽量简单。

提交合并前 rebase 一下推上去

参考文章

git commit之后,想撤销commit

https://docs.github.com/en/free-pro-team@latest/github/authenticating-to-github/removing-sensitive-data-from-a-repository

git add .和git add *有什么区别