Git学习笔记
特别注意
避免使用包含中文的路径;
没事别改.git里的文件;
不要使用windows自带的记事本;
0. 初识Git
Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.
Git是一个免费的开源分布式版本控制系统,旨在快速高效地处理从小型到大型项目的所有内容。其作者为Linus,就是熟为人知的开源系统Linux的作者,Git的初衷就是为了管理Linux代码。
1. Git安装
2. Git使用
2.1 配置用户信息
git config --global user.name "Your User Name"
git config --global user.email "Your Email Address"
#配置完成后,使用以下命令查看配置信息
git config --list
注意使用了–global参数,这一步更改的信息位于用户目录下的配置文件,~/.gitconfig ,表示以后的项目都是用这个配置信息,当然可以通过更改当前项目的 .git/config 文件来配置特定的信息,去掉 –global即可。
2.2基本命令
#初始化仓库
git init
git init name
#添加文件到暂存区,可多次使用
git add <filename>
#提交暂存区文件到分支
git commit -m "message"
#查看仓库状态
git status
#查看不同
git diff
#查看提交历史记录
git log
git log --graph
git log --pretty=oneline
#版本回退,到上n个,HEAD指向当前版本
git reset --hard HEAD~n
#查看命令历史
git reflog
#丢弃工作区的修改,回到上一次add时状态,实际上是用版本库里的版本替换工作区的版本
git checkout -- <file>
#撤销暂存区的修改到工作区
git reset HEAD <file>
#删除文件
git rm <file>
#关联远程仓库
git remote add origin git@github.com:username/reponame.git
#推送本地库到远程仓库
git push -u origin master #首次推送,-u参数关联本地与远程master分支
git push origin master
#克隆,ssh协议最快
git clone git@github.com:username/reponame.git
#创建分支
git branch dev
#切换分支
git checkout dev
git switch master
#创建并切换分支
git checkout -b dev
git switch -c dev
#查看当前分支
git branch
#合并指定分支到当前分支
git merge dev #Fast Forward模式,合并后看不出来曾经合并过
git merge --no-ff -m "merge with no-ff" dev #禁用Fast Forward,可以看出合并
#删除分支
git branch -d dev
git branch -D <name> #强制删除未合并的分支
#暂存当前工作
git stash
#恢复
git stash apply
#删除
git stash drop
#恢复并删除
git stash pop
#复制特定的提交到当前分支
git cherry-pick <commit>
#查看远程库信息
git remote (-v)
#推送分支
git push origin dev
#创建并切换到远程库dev分支
git checkout -b dev origin/dev
#拉取更新,push前一般先pull
git pull
#创建标签
git tag v1.0
git tag -a <tagname> -m "blablabla..."
#查看标签
git tag
#删除标签
git tag -d v1.0
#推送标签到远程
git push origin v1.0
2.3重要概念
工作区(Working Directory)指的是电脑里能看到的目录
版本库隐藏目录.git,不算是工作区
暂存区(stage , index).git目录下的index文件
3. Gitee与Github
#同时关联Github与Gitee
git remote add github git@github.com:username/reponame.git
git remote add gitee git@gitee.com:username/reponame.git
git push github master
git push gitee master
Gitee和Github同时配置ssh key
#生成key
cd ~/.ssh
ssh-keygen -t rsa -C "X@163.com" -f "github_id_rsa"
ssh-keygen -t rsa -C "X@163.com" -f "gitee_id_rsa"
#添加到对应平台
cat github_id_rsa
cat gitee_id_rsa
#创建config解决冲突
# gitee
Host gitee.com
HostName gitee.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/gitee_id_rsa
# github
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/github_id_rsa
#测试,返回welcome或successful等字样成功
ssh -T git@gitee.com
ssh -T git@github.com
4.自定义Git
–global对当前用户起作用
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.ci commit -m
git config --global alias.br branch
#撤销暂存区修改
git config --global alias.unstage 'reset HEAD'
#显示最后一次提交信息
git config --global alias.last 'log -1'
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"
5. 一些问题
git pull origin master 时出现错误
fatal: refusing to merge unrelated histories
原因一般是建仓库时初始化了readme.md
解决办法一
强制合并无关历史,不建议
git pull origin master --allow-unrelated-histories
解决办法二
从远端库clone到本地,把本地要加入的代码放到远端库下载到本地的库,然后再提交。
本作品采用知识共享署名 4.0 国际许可协议进行许可。