Git

基本概念

git是什么

git是一个分布式版本控制工具

远程仓库是什么?

其实就是一个代码托管平台

  • 常见的远程仓库
    • github(国际)github.com
    • gitee(也就是码云,国内的)gitee.com

GitHub概念

  • 项目托管平台

  • 仓库(Repository):就是项目,一般一个项目就是一个仓库,想要开源就必须创建仓库

  • 收藏(Star):方便查看

  • 克隆(Fork):复制克隆别人的项目,在你的仓库会有一个一模一样的,并显示来自于哪里,独立存在

    • Pull Request:发起请求,可以将你修改的代码提交过去,需要别人同意才能完成合并
  • 关注Watch:被关注的项目有任何更新都会提醒你

  • 事务卡片(lssue):提交消息,相当于提建议,讨论

GitHub主页

仓库主页 :项目代码,版本,收藏,关注,fork

个人主页 :关注,我的仓库

基本操作

  • git分为三个区域,分别是工作区,暂存区,版本库
    • 工作区:当前工作的区域
    • 暂存区:在工作区和版本之间,下次提交的更改选择性的暂时保存起来
    • 版本库:commit之后就将代码添加到了版本库
  • 文件的三种状态,已修改,已暂存,已提交
    • 文件修改了就是已修改状态,使用了add命令文件就成了已暂存状态,使用commit之后就变成了已提交的状态
  • 提交的时候经过暂存区,导出的时候不经过暂存区

git配置用户名和邮箱

git config --global user.name ‘username‘
git config --global user.email ‘email‘
git config --lsit 查看所有配置

配置好就可以知道谁写的代码了

基本命令

git add filename 添加文件到暂存区

git add . 添加所有的文件到暂存区

git status 查看暂存区状态 (当前所在分支,已修改,已暂存,已提交等信息)

git commit -m ‘备注‘ filename 将暂存区的文件提交到本地仓库

git ls-files 查看本地仓库所有的文件

git log 查看所有提交信息 (版本号,commit备注内容等信息)

git log --pretty=oneline 之查看一行

git reflog 查看所有日志

git restore --staged filename1,filename2 可以跟多个文件,将文件从暂存区撤销,回退为追踪

git reset head filename 取消上一次操作,也可以从暂存区退回为追踪

这一系列操作都是在本地库

提交协议

提交的两种协议,一种是http/https协议 另一种是ssh协议

http/https协议提交需要登陆github账号,用户名和密码,比较麻烦

ssh协议提交需要设置密钥,一劳永逸

如何生成public key

ssh-keygen -t rsa -C "邮箱" 根据提示生成rsa公钥
ssh -T git@github.com 查看是否添加成功

版本比较

  • git diff a/filename b/filename 查看文件在工作区,暂存区,本地仓库有什么不同

    • a/: 表示暂存区
    • b/: 表示工作区
  • git diff head :比较工作树和最新提交

  • git diff --cached 仓库版本号 :比较仓库和暂存区

    • --cached:表示暂存区,而版本号就是对应仓库里的版本号
  • git diff 版本号1 版本号2 : 比较两个不同版本之间的区别

版本回退

head是一个指针,默认指向当前版本,我们可以通过移动head指针来回退版本

--hard:参数表示回退版本库,暂存区,工作区(修改过的代码就没有了)

--mixed:回退版本库和暂存区

--soft:回退版本库

git reset --hard head~ 回退一个版本

git reset --hard head~~ 回退两个版本

git reset --hard head~10 回退十个版本

git reset --hard 版本号 回退具体版本

合并提交

用来解决合并次数太多的问题,将没必要的提交合并成一个提交,方便git log查看

git rebase -i 版本号:从当前head开始,到版本号的位置合并成一个提交

git rebase -i head~:当前head到上一个head合并成一个。

文件删除

手动删除只会删除工作树

git rm filename 工作区和暂存区没有了,但是版本库还有

然后 commit一下 本地版本仓库也就没有了

git checkout --filename : 从暂存区恢复被删除的文件

git rm --cached filename 只删除暂存区

git rm -f filename : 两个同名不同内容的文件都删除

重命名文件

手动重命名后使用 git status系统会出现错误信息, 系统会以为你删除了原来的文件,又新建了一个新文件

git mv odlfilename newfilename:重命名

忽略文件

不想要git来管理的文件,让git忽略此文件

echo *.temp > .gitignore :创‘’

分支

假设项目已经上线了,并且有大量用户在使用,但是后续还要添加功能,进行项目的版本更新,为了不影响用户的体验,所以我们需要从主干上创建一个分支,对分支(branch)进行开发,最后只需要合并主线(master)上就行了。

创建分支

git branch 分支名字: 一般起名feature-名字描述,并把当前head指针所指的版本复制到当前分支上

git checkout 分支名字: 切换分支,默认不切换还是在主线上,此时就可以在分支上操作了开发了,此时head指向当前分支,head指针永远在当前操作的版本上

git checkout -b branchname 创建分支并切换

git checkout master: 切换到主分支

git branch -a 查看本地与远程分支

git branch -m oldname newname 更改分支名字

git branch -M oldname newname 强制更改分支名字

git checkout -b local_branch origin/remote_branch (获取远程分支,并且在本地创建分支)

分支合并

git merge 分支名称:合并分支注意在master合并分支,千万不要再分支上合并分支

git push origin branchname 推送本地分支到远程仓库

分支冲突

从主干上创建了两个分支,各个分支更改了代码之后,都要在master上面合并分支,这时候就有了分支冲突。

只有第一个合并可以成功,后面的合并都不会成功,但是主干上的文件还是发生了变化,这时候就需要手动去修改,然后git add ...,git commit -m ’解决冲突’ ..去提交

谁创建的分支谁去解决冲突,这锅不能背

删除分支

git branch -d branchname 删除分支

git branch -D branchname 强制删除分支

git push origin :remote_name (删除远程分支,本地还保留)

远程仓库

克隆远程仓库

经过一系列的开发,程序终于开发完成了,就可以操作远程仓库进行托管了

git clone ‘url’ 将github上的文件下载下来 (如果报错了就将https换成github)俗称换协议

或者

git clone git://github.com/3dem/relion/git --depth 1 --depth 1 参数表示只获取默认分支的最新一次提交

git config --global http.postBuffer 524288000 增大缓存区大小

绑定远程仓库

git remote -v 显示所有的远程仓库
git remote show [remote] 显示远程仓库的信息
git remote add origin 地址 绑定远程仓库并起了一个别名origin

git push -u origin master 将本地库origin推送到远程仓库的主分支

? 加了参数-u后,以后即可直接用git push 代替git push origin master

分支 push和pull

先绑定再使用push和pull方法

git push 本地库别名/origin 分支名字 推送本地库到远程分支

git checkout -b 远程分支名字/本地分支名字 拉去远程分支在本地创建同样的分支

git pull origin master:brantest 将远程主机 origin 的 master 分支拉取过来,与本地的 brantest 分支合并。

git pull origin master 若是远程分支与当前分支合并,那么冒号就可以省略

Git

上一篇:使用C#创建一个简单的Windows服务1


下一篇:tp5.0 模拟电商项目中商品类型的添加