layout: post
title: Git分布式版本控制工具
description: Git分布式版本控制工具
tag: 开发工具
设置用户信息:
git config --global user.name "lewis"
git config --global user.email "lewissince2022@163.com"
查看用户信息:
git config --global user.name
git config --global user.email
有些常用指令可能参数很多,可以使用别名来简化命令。指令设置别名的具体方法如下:
.bashrc
文件,部分Windows系统不允许用户创建点开头的文件,可以打开gitbash,执行touch ~/.bashrc
alias 简化指令=实际指令
# 用于git提交日志
alias git-log='git log --pretty=oneline --all --graph --abbrev-commit'
# 用于输出当前目录所有文件及基本信息
alias ll='ls -al'
source ~/.bashrc
,使得文件生效。git config --global core.quotepath fasle
export LAN="zh_CN.UTF-8"
export LC_ALL="zh_CN.UTF-8"
工作区:编辑代码的地方
index暂存区:执行完毕add后加入到暂存区
本地仓库repository:执行commit后,本地进行提交
远程仓库remote:执行push后,推送到远程仓库
执行pull:将代码从远程拉取到本地工作区
执行fetch/clone:将代码从远程拷贝到本地仓库
执行checkout:将本地仓库的分支代码检出到工作区
在当前目录下初始化仓库:git init
git中非常主要的两个指令git add
和git commit
add
将新建文件(未追踪)或修改过的文件(未暂存)提交到暂存区,commit
则将暂存区的修改加入到仓库,称为一次提交。
例子:
touch file01.txt
git status
git add file01.txt
或者git add .
git status
git commit -m "add file01"
git status
git log
git log [option]
撤销某次不想要的提交:git reset --hard commitID
commitID使用git log
查看
撤销提交后在git log中将不再显示
如果想要查看已经删除的记录
git reflog
该指令记录了所有的操作
通过git reset --hard commitID
可以再找回撤销前的版本
某些不想纳入Git管理的文件,可以在gitignore文件中列出需要忽略的文件模式
创建.gitignore文件: tourch .gitignore
编辑.gitignore:
# no .a files
*.a
# but do track lib.a, even though you're ignoring .a files above
!lib.a
# only ignore the TODO file in the current directory, not subdir /TODO
/TODO
# ignore all files in the build/ directory
build/
doc/*.txt
# ignore all pdf files in the doc/directory
doc/**/*.pdf
git branch
git branch dev01
git branch
git checkout dev01
git checkout -b dev02
tourch file02.txt
git checkout master
git merge dev02
git merge 保留了原有分支的结构(原有分支依旧存在
),也保留了原有分支的时间顺序。
在下面这幅图中:
git merge develop
所得的8号节点是对3号节点,7号节点以及6号节点的一个合并。
git rebase
操作先找到两分支的公共祖先即3号节点,随后,将master分支在3号节点以后的(5和7),嫁接到develop分支的(4和6)之上,然后合并到3号节点。
再来看 git rebase develop,可以翻译为:将当前分支重新以develop分支为基础。
当然rebase后的5和7节点和之前的5和7是不一样的,因为来源不一致,也就是说用5’和7’来表示更加准确。
rebase之后,整个分支结构只有一条了。
总结:git merge:两个人分别写代码,进行不同的修改,使用git merge整合时,对分支历史没有影响,可以退回到自己原有分支的节点。
git rebase:消除了git merge操作所创建的没有必要的合并提交,使得项目提交历史变得非常干净整洁。但是它的安全性和可回溯性相对更差。因为git rebase 操作丢失了原有的分支提交的信息——所以你就无法知道develop分支是合适应用了master分支的变更。
永远不要在公共分支上使用它
如果在main分支上,重新以其他分支作为基础。
rebase命令会把main分支中所有的提交都放到feature分支的提交记录顶端。问题在于这个改变目前只出现在你的本地仓库,其他开发者仍然在原来的main分支上进行开发,由于rebase会产生新的提交记录,所以git会认为你在本地的分支与所有其他人的产生了分叉。
因此任何时候,执行git rebase命令前,先确认是否有其他人也正在使用此分支
,不然你把底下的东西换了,但是别人还不知道!
工作区分为两个部分的文件,一部分是使用add
跟踪了的,还有一部分是未追踪的。
git stash可以将当前暂存区和工作区改动的代码保存到一个git 栈里边。
应用场景一:(分支切换)
当前分支为A,突然老板让你展示bug分支B。怎么处理?
应用场景二:(解决分支冲突,避免远端冲突)
当代码开发完毕准备提交:
5. git stash,保存未提交的改动到git 栈
6. git pull 拉下来远程
7. git stash pop
8. 本地处理可能出现的冲突
9. git commit + git push
git stash的操作:
存(入栈):
取(出栈)
pop对应栈的pop(),取出来,而apply 对应栈的peek,不出栈
清除
查看
有时候我们合并代码时,只想合并另一个分支的某一个节点,就可以使用git cherry-pick(摘樱桃,一个节点就像一个樱桃)
用法:
git check-pick 4commit号
// 将4号更改合并到本分支上
git check-pick 4commit号 8commit号
// pick不连续的提交,4号和8号
如果是一段连续的提交,像上边一个一个列出就很麻烦,可以使用下面这个指令,pick一段连续的提交:
git check-pick 4commit号 .. 8commit号
表示合并(4, 8]
还可以使用
git check-pick 4commit号 ^.. 8commit号
前边加了反v,表示左区间也为闭区间,合并[4, 8]
当然git cherry pick也可能出现冲突
假定两个分支对于同一行代码进行了修改,git 在merge时将无法自动合并,需要人为手动调。
生成SSH公钥:
ssh-keygen -t rsa
在Gitee设置账户公钥
cat ~/.ssh/id_rsa.pub
ssh -T git@gitee.com
1- 在远程比如gitee建立空仓库,复制仓库地址,例如:https://gitee.com/lewissince2020/my-leet-code.git
2- 在本地项目的根目录右键git bash here,进入git命令行,
初始化:建立本地空仓库,自动生成.git文件夹,指令:
git init
3- 绑定远程项目orgin
git remote add origin https://gitee.com/lewissince2020/my-leet-code.git
4- 拉远程项目和本地合并
git pull origin master --allow-unrelated-histories
5- 添加待提交内容,‘.’的含义是所有文件
git add .
6- 提交到本地仓库,‘-m’的含义是本次推送的message说明
git commit -m 'init'
7- 推送到远程仓库
git push origin master
git push [-f] [--set-upstream]
[远端名称][本地分支名][:远端分支名]
git push origin master
git push --set-upstream origin master
git push
将master分支推送到已经关联的远端分支git branch -vv
克隆指令:git clone <仓库路径>[本地目录]
本地目录可以忽略
git fetch [remote name][branch name]
或者会抓取与本地关联的分支
)git pull [remote name][branch name]
或者会抓取与本地关联的分支
)远端与本地冲突解决方法与之前分支合并冲突类似。Git无法自动合并,需要认为针对冲突文件进行选择修改,随后添加到暂存区,进行提交。
安装完成以后重启idea
在设置里边搜gitee,在可视化控制(Version Control)里边找到刚刚下载的gitee插件
然后添加账户,点击加号,login via gitee,弹框输入gitee的注册邮箱和密码,图中我已经添加完毕,可以看到已经显示了登录信息。
在idea界面file/close project,重新建立项目,选择get from vcs
账号添加成功则可以看到你的gitee仓库:
下边选择本地项目存放地址,需要一个空的文件夹,然后克隆仓库
克隆完成后,在打开的idea界面右下角选择仓库的分支:
刚刚克隆下来的项目显示的是master分支,只包含两个readme文件
点击那个分支树的图标选择我们当前开发的test分支,点击checkout(分支检出),切换到test分支:
主要记录一下idea的git操作
Git选项栏在界面右上方:
蓝色下拉箭头:拉取远端仓库文件,点击后弹窗:
我的理解这里merge是跟本地仓库融合,rebase是覆盖本地
绿色对勾是git commit操作的是本地库
绿色上行箭头是git push是将本地库中的最新信息发送给远程库。
每次操作最好三个图标按顺序来一遍,先跟新别人的操作融合到自己的仓库,然后提交自己的代码到本地仓库,再push到云端仓库。
Push后在gitee可以看到自己的提交: