Git教程

Git结构

Git结构

命令

查看commit日志
git log
git log --pretty=oneline
git log --oneline #--oneline相当于--pretty=oneline + --abbrev-commit
git reflog #查看命令历史,以便确定要回到未来的哪个版本
git log --graph #查看分支合并图
前进/后退历史版本
git reset --hard [索引] #本地库指针移动的同时,重置工作区,暂存区索引
git reset --mixed [索引] #本地库指针移动的同时,重置暂存区,工作区不动
git reset --soft [索引] #本地库指针移动的同时,暂存区,工作区都不动
git reset --hard HEAD #回到最新版本,用的比较多的是--hard
git checkout -- file #把文件在工作区的修改全部撤销,没有--,就变成了“切换到另一个分支”的命令
git reset HEAD file #可以把暂存区的修改撤销掉(unstage),重新放回工作区
#rm删除文件后,使用git add从暂存区删除文件
git rm file #版本库中删除文件
比较工作区和暂存区文件,比较暂存区和工作区文件
git diff #比较所有文件
git diff 文件名 #比较一个文件
git diff [索引] 文件名 #比较暂存区和本地库

分支

Git分支

Git branch

查看、创建、删除、切换分支

git branch -v #查看所有分支,当前分支前面带*标记
git branch 分支名 #创建新分支
git branch -d 分支名 #删除分支
git branch -D 分支名 #强制删除分支
git checkout 分支名 #切换分支, -b参数表示创建并切换,相当于git branch 分支名+git checkout 分支名
git switch 分支名 #更容易理解的切换分支方式,-c,-C从同名的远程分支中自动创建一个新分支

合并、解决冲突

合并:

git merge 分支名 #合并到当前分支,有冲突(同一文件同一位置)时会显示(分支名|MERGING)
git merge --no-ff -m "merge with no-ff" 分支名 #--no-ff参数,表示禁用Fast forward

解决:
修改冲突后,commit解决冲突, 不能携带文件名部分提交

暂存修改

stash:可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作

git stash
git stash list #查看暂存记录
git stash apply #恢复暂存,stash内容不会删除,需要用git stash drop来删除
git stash pop #恢复暂存的同时删除stash记录

合并单次提交

cherry-pick:

git cherry-pick 提交记录

整理提交记录

git rebase:

git rebase #把分叉的提交历史“整理”成一条直线
Git Tag

方便查找提交记录

标签总是和某个commit挂钩。如果这个commit既出现在master分支,又出现在dev分支,那么在这两个分支上都可以看到这个标签。

git tag 标签号#对最新代码打标签
git tag 标签号 提交记录编号 #对某一次提交打标签
git tag -a <tagname> -m "blablabla..." #指定标签信息
git tag #查看标签记录
git show 标签号#查看标签信息
git tag -d 标签号 #删除标签
git push origin 标签号 #推送某个标签到远程
git push origin --tag #一次性推送全部尚未推送到远程的本地标签
# 标签已经推送到远程,删除远程标签需要先从本地删除
git tag -d 标签号 #先删除本地标签
git push origin :refs/tags/标签号 #再删除远程分支

Github

远程操作
git remote -v #查看远程别名
git remote add origin url #origin为默认别名,可自定义
git clone url #克隆代码
git fetch origin master #抓取操作,origin远程库别名,master远程分支
git checkout origin master #抓取后可先切换到远程分支查看
git merge origin/master #合并操作
git pull # 远程拉取操作,相当于fetch + merge
# git://使用ssh,也可以使用https等其他协议,https除了速度慢以外,还有个最大的麻烦是每次推送都必须输入口令,但是在某些只开放http端口的公司内部就无法使用ssh协议而只能用https
git pull origin master --allow-unrelated-hitstries #拉取原没有关联的仓库与本地仓库合并
git branch --set-upstream-to=origin/dev dev #设置本地dev分支与远程dev分支链接
git push origin master
#将master分支推送到origin仓库
#由于远程库是空的,我们第一次推送master分支时,加上-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令
git push -u origin master -f #强制推送到远程仓库
git fork url #fork仓库,修改代码,然后创建pull request,仓库审核操作
Git免密登录
ssh-keygen -t rsa -C 'github_email' #生成秘钥,生成sh文件夹,里面包含id_rsa. id_rsa.pub,将id_rsa内容复制到github SSH and GPG_keys中
git remote add origin_ssh url #创建新远程仓库别名
Git忽略文件

添加.gitignore文件

.idea
*/target/

如果被.gitignore忽略的文件想提交可以使用-f强制添加到git

git add -f 文件名

查看是哪条规则忽略了该文件

git check-ignore -v 文件名

gitignore添加文件/文件夹,但是这个文件/文件夹已经被提交到了仓库。删除已经提交到仓库的文件/文件夹,并保留本地文件

git rm file-path --cached
git rm -r folder-path --cached
在这里插入代码片
Git配置别名
git config --global alias.st status #后续可以git st代替git status
#--global参数是全局参数,也就是这些命令在这台电脑的所有Git仓库下都有用,否则只对当前仓库有效,配置在.git/config文件中,当前用户的全局配置放在用户主目录下的一个隐藏文件.gitconfig中,可直接修改配置中的别名
git config --global alias.co checkout
git config --global alias.ci commit
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"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值