Git学习笔记

Git学习笔记

特别注意

  1. 避免使用包含中文的路径;

  2. 没事别改.git里的文件;

  3. 不要使用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安装

  1. 从Git官网下载安装包安装。
  2. 使用cmderFull 版本with Git for Windows,推荐使用。

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 国际许可协议进行许可。


  转载请注明: Dufan Git学习笔记

  目录