git

作者: taadis

发布于 2019-12-28 | 最后更新于 2021-10-06


Git Download

几个实用的 git 下载地址: - https://git-scm.com/ - http://gitforwindows.org/ - https://tortoisegit.org/ - https://npm.taobao.org/mirrors/git-for-windows/ - 网络不好,可以使用淘宝提供的镜像,会快很多…

托管服务

Gogs

参考

git add

# 添加所有文件跟踪
git add .

# 假设某个文件不再变更(add时会忽略未改动的文件)
git update-index --assume-unchanged FILENAME       路径+文件名

# 若以后需要该文件的修改, 则输入命令非不再变更(负负得正)
git update-index --no-assume-unchanged FILENAME   

git commit

git 取消上一次 commit 操作, 但保留 add 操作

场景重现

删除了代码中的一些空白行,习惯性添加&提交

git add .

git commit -m "溢出一些空白行"

然后马上发现提交信息中的移除打成溢出了,

现在需要取消这次提交commit,但保留添加add

解决办法

找到上面这次提交hash信息,然后

git reset --soft hash

当然也可以这样操作

# 撤销本次commit操作,保留add操作.
git reset --soft HEAD^

回去后重新 commit & message

当然更建议使用 --amend 参数

git commit --amend -m "移除了一些空白行"

Git Branch

# 查看分支
git branch

# 创建分支
git branch <name>

# 修改分支名称
# a改成b
git branch -m <name_a> <name_b>

# 切换分支
git checkout <name>

# 创建+切换分支
git checkout -b <name>

# 创建分支+切换分支+拉取远程分支
git checkout -b feature/xxx origin/feature/xxx

# 切换上一个分支
git checkout -

# 合并某分支到当前分支
git merge <name>

# 删除分支
git branch -d <name>

# 推送本地分支到远程,并和远程分支关联起来
git push --set-upstream origin <branch_name>

Git Tag

# 查看标签 
git tag

# 新建标签
git tag tagName

# 推送远程标签
git push --tags

# 删除标签
git tag --delete tagName

# 删除远程标签
git push origin --delete tag <tagName>

Git Stash

暂存操作

# 查看暂存列表
git stash list
# 如果有修改的内容, 添加跟踪
git add .

# 暂存本次操作内容
git stash save "本次暂存标识"

# 使用某次暂存的内容, 执行pop会移除暂存记录
git stash pop stash@{n}

# 清除指定暂存内容,不指定时候默认最上面那条
git stash drop stash@{n}

# 查看指定暂时条目的变更内容
git stash show stash@{n}

# 清除所有暂存内容
git stash clear

git diff

# 查看所有不同
git diff

# 查看指定文件不同
git diff path/file

# 查看指定目录下所有文件不同
git diff path/*

# 查看所有文件不同(排除指定内容)
# 比如:查看不同时,排除 proto 生成的内容
git diff -- ':!pkg/*'

# 查看已添加跟踪缓存的不同
# 适用于新增的文件用git diff看不出来
git diff --cached

参考

Git Log

# 查看某个文件的 commit 历史日志
git log filename

# 查看每次提交的diff
git log -p filename

# 查看某次提交中的某个文件的改动
git show abe69804bbd9725b5dece57f8cbece4a96b9f827 filename

# 美化日志输出,以单行格式输出
git log --pretty=oneline

# 以ASCII图形表示分支的合并历史
git log --graph

# 显示n个日志
git log -{n}
git log -1

git clean

所有未跟踪 (untracked) 的目录及文件, 可以通过 git clean 命令来移除.

# 移除所有untracked的目录及文件
git clean

# 参数 n 表示:显示将要移除的目录及文件
git clean -n

# 参数 d 表示:移除所有untracked的目录(directory)
git clean -d

# 参数 f 表示:移除所有untracked的文件(file)
git clean -f

git clean 使用场景

一般这么用…

# 首先查看将要移除的目录及文件
git clean -n

# 移除所有未跟踪 (untracked) 的目录及文件
git clean -df

.gitignore 无效及解决办法

对应已经归档到git控制中的文件及目录,在.gitignore忽略会出现无效的情况,留爪.

##.gitignore介绍 如果想忽略掉某文件或目录,不让这个文件或目录提交到git版本库中,可以通过修改根目录中.gitignore文件(没有这个文件的话,需要手搓创建)来实现.
.gitignore实例:每行一条实例

#井号开头的这行都是注释 
*.md #忽略根目录下所有.md后缀的文件
!README.md #但README.md除外
dir #忽略根目录dir目录
dir/ #忽略根目录下的dir/目录下的所有文件
*/dir #忽略根目录下的dir目录及dir目录下的所有文件
**/dir 忽略所有目录下的dir目录及dir目录下的所有文件,**表示多级目录,git1.8.2及更高版本才支持

实例的规则比较简单,同时支持正则表达(个人用的不多,就不介绍了).

##.gitignore无效场景 在项目开发中,已经添加到git版本中的某些文件(如:xxx.pro.user),需要把这些用户文件移除(忽略掉),按照上面介绍的方式提交后,版本库中并没有生效,

##.gitignore无效解决办法 1. 首先删除本地库缓存(不要忘了修改.gitignore) 2. 然后再commitpush

# 移除git跟踪缓存,<dir/file/.>可以是指定的目录/文件/库目录下所有
git rm -r --cached . 
git add . 
git commit -m '更新.gitignore'
git push origin master
git bash命令行也可以修改,最终也是修改.gitconfig配置文件: 
分别执行:

git config --global core.autocrlf false
git config --global core.filemode false
git config --global core.safecrlf true
https://blog.csdn.net/huangning1995/article/details/93487021

git diff ^m windows/linux 换行符问题

问题描述: 使用win10中的ubuntu1804的git查看windows上的文件, 发现都是’modified’状态 原因: windows 使用 CR LF 作为换行符, Linux 使用 LF 作为换行符, 文件多了个 CR, 就变成modified状态了 解决方法: git 忽略换行符的差别 git config –global core.autocrlf true 查看设置git config -l

参考

有点意思

自打活着来到这个世界就没打算活着回去