Git
一、安装
二、设置签名
1、系统用户级别:登录当前操作系统的用户范围
git config --global user.name wang
git config --global user.email 123@qq.com
信息保存位置:~/.gitconfig 文件
2、项目级别/仓库级别:仅在当前本地库范围内有效
git config user.name wang
git config user.email 123@qq.com
信息保存位置:./.git/config 文件
查看如图所示
3、级别优先级
就近原则:项目级别优先于系统用户级别,二者都有时采用项目级别的签名,如果只有系统用户级别的签名,就以系统用户级别的签名为准,二者都没有不允许。
三、SSH 登录
进入当前用户的家目录查看是否有ssh
cat ~/.ssh/id_rsa.pub
cd ~
删除.ssh 目录
rm -rvf .ssh
运行命令生成.ssh 密钥目录
ssh-keygen -t rsa -C 123@qq.com
[注意:这里-C 这个参数是大写的 C]
进入.ssh 目录查看文件列表
cd .ssh
ls -lF
查看 id_rsa.pub 文件内容
cat ~/.ssh/id_rsa.pub
复制 id_rsa.pub 文件内容,登录 GitHub,点击用户头像→Settings→SSH and GPG keys→New SSH Key,输入复制的密钥信息。
四、创建仓库
已有仓库:
cd existing_folder
git init
git remote add wang(远程分支名称自己定义) ssh://git@gitlab.hyshi.com:2222/wangfc/huyou.git
推送到远程仓库
git push -u wang master
五、分支
创建分支
git branch [分支名]
查看本地分支,前面带有*号的是当前分支
git branch
查看所有分支,包含本地和远程
git branch -a
删除本地分支
git branch -d [branchname]
删除远程分支
git push origin --delete [branchname]
切换分支
git checkout [分支名]
合并分支,比如master合并develop分支
git checkout master
git merge develop
将本地分支上传至远程分支
git remote add origin 远程仓库地址
git push origin 分支名
git强制覆盖本地命令(单条执行)
git fetch --all && git reset --hard origin/master && git pull
六、tag
查看本地tag
git tag -l
查看远程tag
git show-ref --tag
删除本地tag
git tag -d [tag名]
批量删除本地tag
git tag -l | xargs git tag -d
删除远程tag
git push origin :refs/tags/[tag名]
七、拉取冲突
方法一:
先将本地修改存储起来
git stash
暂存了本地修改之后,就可以pull了
git pull origin master
还原暂存的内容
git stash pop stash@{0}
最后解决冲突并提交
方法二:
服务器代码完全替换和覆盖本地的代码改动
git reset --hard origin/master
git pull origin master
git pull 失败 ,提示:fatal: refusing to merge unrelated histories
其实这个问题是因为两个根本不相干的 git 库,一个是本地库,一个是远程库, 然后本地要去推送到远程, 远程觉得这个本地库跟自己不相干, 所以告知无法合并。
具体的方法:
一种方法:是从远程库拉下来代码 ,本地要加入的代码放到远程库下载到本地的库,然后提交上去 ,因为这样的话,你基于的库就是远程的库, 这是一次update了。
第二种方法:使用这个强制的方法
git pull origin master --allow-unrelated-histories
后面加上 --allow-unrelated-histories,把两段不相干的分支进行强行合并后面再push就可以了。
八、回滚
如果你在本地做了错误提交,那么回退版本的方法很简单,先用下面命令找到要回退的版本的commit id
git reflog
接着回退版本:
git reset --hard a7e1d279
a7e1d279就是你要回退的版本的commit id的前面几位。
远程分支版本回退的方法
如果你的错误提交已经推送到自己的远程分支了,那么就需要回滚远程分支了。
首先要回退本地分支:
git reflog
git reset --hard a7e1d279
紧接着强制推送到远程分支
git push -f origin master
删除文件并找回
前提:删除前,文件存在时的状态提交到了本地库。
操作:git reset --hard [指针位置]
删除操作已经提交到本地库:指针位置指向历史记录
删除操作尚未提交到本地库:指针位置使用 HEAD
git reset --hard HEAD
比较文件差异,将工作区中的文件和暂存区进行比较
git diff [文件名]
将工作区中的文件和本地库历史记录比较
git diff [本地库中历史版本] [文件名]
不带文件名比较多个文件
强制覆盖本地文件
git fetch --all
git reset --hard origin/master
git强制覆盖本地命令(单条执行):
git fetch --all && git reset --hard origin/master && git pull
说明:
git fetch从远程下载最新的,而不尝试合并或rebase任何东西。
然后git reset将主分支重置为您刚刚获取的内容。 --hard选项更改工作树中的所有文件以匹配origin/master中的文件。
本地文件强制覆盖远程仓库
git push -u origin master
8、.gitignore 规则不起作用解决办法
语法规则
配置语法:
以斜杠“/”开头表示目录
以星号“*”通配多个字符
以问号“?”通配单个字符
以方括号“[]”包含单个字符的匹配列表
以叹号“!”表示不忽略(跟踪)匹配到的文件或目录
#为注释
常用规则:
/mtk/ 过滤整个文件夹
*.zip 过滤所有.zip文件
/mtk/do.c 过滤某个具体文件
fd1/* 忽略目录 fd1 下的全部内容
/fd1/* 忽略根目录下的 /fd1/ 目录的全部内容;
/*
!.gitignore
!/fw/bin/
!/fw/sf/ 忽略全部内容,但是不忽略 .gitignore 文件、根目录下的 /fw/bin/ 和 /fw/sf/ 目录;
gitignore 不起作用的解决办法:文件里的规则对已经追踪的文件是没有效果的.所以我们需要使用rm命令清除一下相关的缓存内容.这样文件将以未追踪的形式出现.然后再重新添加提交一下,.gitignore文件里的规则就可以起作用了。
git rm -r --cached .
git add .
git commit -m 'update .gitignore'
git push origin master
九、错误总结
1、
error: src refspec master does not match any.
error: failed to push some refs to ‘git@gitee.com:there_is_love_and_war_in_the_world/xxl-job.git’
warning: LF will be replaced by CRLF in .github/ISSUE_TEMPLATE.
解决方法:
git rm -r --cached .
git config core.autocrlf false
git add .
git commit -m 'wang'
git push -u wang master
十、git stash drop 误用恢复
代码正在开发中不想commit,但是要切换其它分支去处理临时紧急任务,于是git stash 备份当前的工作区的内容。
切换回来时不小心使用了:git stash drop ,于是暂存的修改全部没有了。
方法一、通过IDEA,鼠标右键项目名称,找到你那次stash的动作的记录后revert。
方法二、通过命令
通过命令找到最近的一些删除的提交
git fsck –lost-found
找到id查看修改情况比如 f3106e*
git show f3106e*
恢复删除掉的内容
git stash apply f3106e*
或者
git merge apply f3106e*
十一、忽略文件
以.idea为开头的
git rm -rf --cached .idea
以iml为结尾的
git rm -rf --cached *.iml
十二、error: failed to push some refs to,本地和远程仓库文件不一致
git pull --rebase origin master
git push -u origin master