导图社区 git命令
简单介绍了git命令的使用,忽略跟踪 .gitignore 文件(工程文件不跟踪,放在压缩包中跟踪),有兴趣的可以看看哟。
编辑于2023-09-19 10:11:11 四川省git命令
配置相关
git在win客户端和cygwin下的配置文件位置不同
C:\cygwin64\home\sdkjd
C:\Users\sdkjd
创建SSH Key:ssh-keygen
然后一直回车。说明:在用户目录中生成.ssh目录,里面有id_rsa(私钥)和id_rsa.pub(公钥)两个文件
全局配置:git config(如果配置不生效,可能是本地覆盖了全局)
git config --global user.name "name"
git config --global user.email "my_email@mail.com"
缩写
git config --global alias.st status
git config --global alias.ck checkout
git config --global alias.ci commit
git config --global alias.br branch
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
代理(如果有本地代理)
git config --global http.proxy 'socks5://127.0.0.1:1080'
git config --global https.proxy 'socks5://127.0.0.1:1080'
git config --global http.https://github.com.proxy socks5://127.0.0.1:1080 #只针对github.com
行尾转换
多平台协作仓库保留LF:
true:windows下git config --global core.autocrlf true
仓库签出CRLF,提交转LF
input:Linux下git config --global core.autocrlf input
签出不转换,提交转LF
单平台:仓库保留默认
git config --global core.autocrlf false
取消转换
Linux或Mac系统使用LF作为行结束符
win使用CRLF作为行结束符
参考:
忽略空格的差异:git config --global core.whitespace cr-at-eol
模式忽略:git config --global core.filemode false
大小写敏感:git config --global core.ignorecase false
错误后,删除重新更改名字后添加即可解决
删除设置:git config --global --unset user.name
编辑配置文件:git config --global --edit
查看配置:git config --list
Linux全局配置文件:/etc/gitconfig
[alias]
st = status
co = checkout
ci = commit
br = branch
lg = log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit
[user]
name = my_name
email = my_email@live.com
[core]
whitespace = cr-at-eol
autocrlf = false
[http]
proxy = socks5://127.0.0.1:1080
[https]
proxy = socks5://127.0.0.1:1080
当前用户的Git配置文件:~/.gitconfig
每个仓库的Git配置文件都放在.git/config文件中
图形工具:gitk
忽略跟踪 .gitignore 文件(工程文件不跟踪,放在压缩包中跟踪)
只对未跟踪过的文件有效,编辑完立即生效。
1)以“/”开头表示目录;
2)以“?”通配单个字符
3)以“*”通配多个字符;
4)以方括号“[]”包含单个字符的匹配列表;
5)以叹号“!”跟踪某个文件或目录;
6)以“#”开头为注释
eg:doc/* 忽略所有doc目录下的所有文件
/doc/* 忽略根目录下的doc目录的全部内容
基本操作
git初始化:git init
查看状态:git status
查看变化:git diff
暂存与上次提交变化:git diff --staged/cached
查看文件变化:git diff readme.txt
未暂存区别:git diff
工作区和HEAD差别:git diff HEAD
简单结果:git diff --stat
当前目录和其他分支:git diff dev
$ git diff HEAD^ HEAD
$ git diff SHA1 SHA2
取消工作空间文件的修改:git checkout .
添加到暂存区:git add .
git add readme.txt
git add . :将所有的修改添加到暂存区
git add *
将所有的修改添加到暂存区
git add *Controller
将以Controller结尾的文件的所有修改添加到暂存区
git add Hello*:将所有以Hello开头的文件的修改添加到暂存区
git add Hello?:将以Hello开头后面只有一位的文件的修改提交到暂存区
提交到仓库并加说明:git commit
git commit -m "wrote a readme file"
撤销暂存区:git reset .
提交:git commit -m ""
修改最后一次提交:git commit --amend
追加提交并忽略注释:git commit --amend --no-edit
查看版本记录:git log --pretty=oneline
git log --graph --pretty=oneline
git log -1:显示最后一次提交
git log -p -1:显示最近一次更改
回退版本 :git reset --hard 00aabb
HEAD:当前版本
HEAD^:上个版本
HEAD^^:上上个版本
反做commit:git revert -n 00aabb
合并多个提交:git rebase -i
除第一个外更改为s
将s保存到上一个commit
有错误修改后continue
放弃:git aboard
查看历史版本:git reflog
撤回暂存区的修改(到工作空间):git reset HEAD .
保存/恢复工作现场:git stash/git stash pop
git stash:保存当前更改
git stash -m "暂存":保存并添加注释
git stash pop:应用,并删除
git stash apply:应用不删除
git stash list:查看保存的工作现场
git stash drop stash@{0}:删除第一个
git stash clear:清空所有
git stash show:查看diff
删除未跟踪文件:git clean -df
-n 不实际删除,只是进行演练,展示将要进行的操作,有哪些文件将要被删除。(可先使用该命令参数,然后再决定是否执行)
-f 删除文件
-i 显示将要删除的文件
-d 递归删除目录及文件(未跟踪的)
-q 仅显示错误,成功删除的文件不显示
分支
创建并切换新分支:git checkout -b dev
切换到分支:git checkout dev
删除分支:git branch -d dev
查看分支情况:git branch
创建本地新分支:git branch dev
合并到当前分支:git merge dev
转移到当前分支:git cherry-pick branch
分支最新提交:git cherry-pick feature
多个提交(无A):git cherry-pick A..B
多个提交(有A):git cherry-pick A^..B
变基:git rebase master
将当前分支指向master分支
远程
从远程库克隆: git clone 地址
获取远程分支(不合并):git fetch origin dev
需要手动checkout过去
获取远程更改(并合并):git pull
远程更改放在修改后:git pull master --rebase
修改后再提交即可解决冲突,git add git commit
下载远程dev分支:git checkout -b dev origin/dev
克隆后本地只有master分支
推送:git push
将本地分支推送到远程分支:git push origin develop:develop
删除远程分支: git push origin :develop
关联远程仓库:git remote add origin 地址
删除远程关联:git remote rm origin
查看远程仓库:git remote
查看远程网址:git remote -v
查看详细信息:git remote show [remote-name]
把最近分叉的提交合成一条线:git rebase
查看对应:git remote show origin
清理掉远程已经删除的分支在本地的缓存:git remote prune origin
tag
新建标签:git tag v1.0
给f52c63版本打标签:git tag v0.9 f52c63
带有说明的标签:git tag -a v0.1 -m "version 0.1 released" 1094adb
查看标签:git tag
查看某个标签信息:git show v1.0
推送标签到远程:git push origin --tags
推送标签v1.0:git push origin v1.0
删除标签:git tag -d v0.1
从远程删除标签:git push origin :refs/tags/v0.1
补丁
diff补丁
生成补丁
git diff commitA commitB > my_patch.diff
应用补丁
git apply my_patch.diff
处理应用冲突
修改冲突
git add .
git apply --continue
patch补丁
生成补丁
git format-patch <commit1>...<commitN>
应用补丁
git apply my_patch.patch
处理问题
合作推送失败解决:
先拉取:git pull
合作拉取失败,先建立链接:git branch --set-upstream-to=origin/dev dev
再拉取:git pull
手动解决冲突再push
查看分支合并情况:git log --graph --pretty=oneline --abbrev-commit
空间优化
克隆到本地:git clone
获取所有分支
脚本:
#!/bin/bash for branch in `git branch -a | grep remotes | grep -v HEAD` do git branch --track ${branch##*/} $branchdone done
查看大文件
git rev-list --objects--all| grep-E`git verify-pack -v.git/objects/pack/*.idx | sort-k3 -n| tail-10| awk'{print$1}'| sed':a;N;$!ba;s/\n/|/g'`
或者:
git rev-list --objects--all| grep"$(git verify-pack -v.git/objects/pack/*.idx | sort-k3 -n| tail-15| awk'{print$1}')"
改写历史,去除大文件
命令
git filter-branch --tree-filter'rm -f path/to/large/files'--tag-name-filtercat----all
如果错误(操作两次会出现错误),在git filter-branch 后面加上参数 -f
清理仓库垃圾文件(不改写commit)
rm -rf .git/refs/original/
git reflog expire --expire=now --all git gc --prune=now git gc --aggressive --prune=now
推送远程
git push origin --force --all git push origin --force --tags
后续推送注意
push前需要pull rebase
或者重新克隆
参考文献
gitee帮助中心
git空间优化
其他
git仓库:github/码云
git常见问题
saba服务器权限问题
问题描述:当在window下新建文件复制到linux下,会产生权限不足的问题。提示未找到之前的跟踪。
解决方法:samba用户需要
小乌龟的使用
小乌龟的密钥只认ppk格式,需要使用小乌龟自带工具PuTTYgen导入现有密钥保存一下,然后导入小乌龟
注意事项
git对文件名的大小写不敏感,所以不要试图只通过大小写重命名