赞
踩
Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目,是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件
版本控制
版本控制(Revision control)是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术
团队协作
从单兵作战转换为团队开发
SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而工作的时候,用的都是自己的电脑,所以首先要从中央服务器得到最新的版本,然后工作,完成工作后,需要把自己的代码推送到中央服务器,集中式版本控制系统是必须联网才能工作
Git是分布式版本控制系统,没有中央服务器,每个人的电脑就是一个完整的版本库,工作的时候不需要联网,因为版本都在自己电脑上,可以离线工作
打开 cmd
窗口,输入指令检查是否安装成功
git --version
Git 中有三层 config 文件,分别为系统、全局、本地,对于同一配置项,优先级为本地 > 全局 > 系统,每层配置都会覆盖掉上一层的配置
查看不同级别配置文件
# 查看系统config \Git\mingw64\etc\gitconfig包含适用于系统所有用户和所有项目的值
git config --system --list
# 查看当前用户(global)配置 C:\Users\Administrator.gitconfig
git config --global --list
# 查看当前仓库配置信息 git项目目录中的.git/config,适用于当前项目
git config --local --list
设置用户标识,以区分不同的开发人员,可以和远程不同
# 设置全局配置 --global git config --global user.email "you@example.com" git config --global user.name "Your Name" # 设置本地用户标识 git config user.email "you@example.com" git config user.name "Your Name" # 删除配置项 git config [--local|--global|--system] --unset section.key # 查看当前配置 git config --list # 查看某个配置项 git config user.name
cd hello/
是进入文件夹,cd ..
是返回上一级文件夹,ls
显示当前文件夹下的普通文件,ls -a
显示所有
git init
初始化后文件夹内会多一个 .git
的文件夹(这个文件夹是一个隐藏文件夹)
工作区
当前目录下的所有文件,.git不属于工作区
版本库
.git
这个目录是本地版本库(本地仓库),分为暂存区和main
托管平台
将工作区的代码提交至暂存区(stage),确定没有问题后提交到主分支 main ,即历史区,这时才会生成提交记录
如果需要再次提交,可以将之前 main 中的提交撤回到暂存区,在暂存区中一次性提交至 main 中,总共生成一次记录,避免记录混乱
最后推送远程仓库
使用 git add
指令将代码提交至暂存区
# 把文件夹下的单独文件 index.txt 放在暂存区 git add index.txt # 把文件夹下的单独一个文件夹 assets 放在暂存区 git add assets/ # 把文件夹下所有的内容都放在暂存区 git add --all # git add --all 简单的写法 git add . # 查看文件状态(绿色的表示在暂存区,红色的表示只在工作区) git status # 查看文件内容 cat index.txt # 删除暂存区的文件 git rm --cached index.txt
使用git commit
指令将暂存区的内容提交至历史区(版本库)
# 将暂存区的内容放到历史区(版本库),不加-m会进入vim模式,按i切换到insert模式,写注释(不要在#后面写,另起一行),然后按esc键,按:wq退出
git commit -m "message"
# 跳过 git add, 将所有已被跟踪的文件更改提交到版本库
git commit -am "message"
# 使用一次新的commit, 替代上一次提交,如果代码没有任何新变化, 则用来改写上一次commit的提交信息
git commit --amend -m "message"
使用 git log
指令查看版本信息
# 查看当前历史区版本信息,显示最顶端指针及以下的记录
git log
# 查看本地库所有的操作记录
git reflog
使用 git reset 版本编号
进行历史回退,回滚到对应的commit-id,共有如下三种命令方式:
--mixed
:默认,可以不带该参数,回滚到所有git add
和git commit
命令执行之前,暂存区清空,全部到工作区
--soft
:工作区不变,暂存区 = 原来的 + 回滚后和回滚前的版本差异
--hard
:撤销工作区中所有未提交的修改内容,将所有工作区和暂存区的文件修改全部清空覆盖,不能找回
# 回退到上一次提交的版本
git reset --hard HEAD^
# 回退到上上次提交的版本 hard 之前从历史区回退到工作区
git reset --hard HEAD^^
git reset --hard HEAD~2
git reset --hard reflog中显示的回退前那一次的地址(或者前面的6个字母)
# soft从历史区回退到暂存区,比如注释写的不够详细可以回退到暂存区再写一下再推到历史区,或者修复了一个bug,把前面那个版本退回,将新代码推到暂存区,再一起推到历史区
git reset --soft HEAD^
head指针,表示当前指向的位置,head->main,每提交一次会向前一次,想回退版本让指针向回移动一次
回退后,此时git push会报错,因为本地库HEAD指向的版本比远程库要旧
使用-f
参数强制推送
git push -f
"反做"某一个版本,撤销其中的commit-id并重新生成一个commit-id,以达到撤销该版本的修改的目的,本身不会对其他的提交commit-id产生影响,例如想要修改版本二,但不想影响版本三,则可用git revert
修改版本二并生成新的版本四,不影响版本三
也就是说,撤销某次操作,此次操作之前和之后的 commit 和 history 都会保留,并且把这次撤销作为一次最新的提交,版本会递增且不影响之前提交的内容
如果要推送到远程服务器使用git push
即可
# 撤销前一次 commit
git revert HEAD
# 撤销前前一次commit
git revert HEAD^
# 撤销某一次commit,会让程序员修改注释,如果想要使用默认注释添加 -n 或 --no-commit 参数
git revert commit_id
# 连续撤销多个commit
git revert -n commit_id_start..commit_id_end
# 或者下述写法
git revert -n commit_id_1
git revert -n commit_id_3
git
在初始化的时候,会自动生成一个分支,叫做 main
,表示主要分支的意思
可以自己开辟出很多独立分支,每个功能是一个独立的分支
使用 git branch 分支名称
指令开辟分支
# 开辟一个 login 分支
git branch login
查看当前分支情况
# 查看当前分支情况
git branch
前面有 *
号并且有高亮显示的,表示当前所处的分支
使用 git checkout 分支名称
或git switch 分支名称
指令来切换分支
建议使用switch
命令,checkout
是一个很底层的命令,可以完成很多事情,在特定情况下使用会造成困扰
# 切换到 login 分支
git checkout login
git switch login
# 创建一个新分支并切换到该分支,保留main中所有文件
git checkout -b login
git switch -c login
# 创建一个新分支并切换到该分支,删除所有跟踪文件
git switch --orphan login
按照分支将所有功能开发完毕后,只要把所有代码都合并到 main
主分支上就行了
使用 git merge
进行分支合并,将别的分支的内容合并到此时所处的分支上
# 切换到 main 分支
git switch main
# 把 login 的内容合并到自己的分支
git merge login
当两个分支对同一个文件均进行过修改时,合并后会产生冲突,需要手动合并(出现master|MERGING的时候),这时打开文件把需要留的东西留下需要删的东西删掉,然后重新add和commit就可以了(合并后的还是只在main里面,login里面还是他原来的子功能)
切换到别的分支,使用 git branch -d 分支名称
指令删除分支
# 先切换到别的分支
git switch main
# 删除 login 本地分支
git branch -d login
# 强制删除
git branch -D login
# 有必要的情况下,删除远程分支
git push origin --delete login
在远程代码托管平台 github 中创建一个新仓库
使用 git remote add origin 仓库地址
地址添加远程仓库
# 添加仓库地址
git remote add origin <仓库地址>
# 删除仓库地址(比如第一次后面的地址写错了)
git remote remove origin
remote:远程
add:添加
origin:一个变量名(指代后面一长串的地址,即指代这个仓库,可以修改为别的名字)
使用 git push
指令将历史区中的所有内容推送到远程仓库中
# 上传内容,推送到 main 分支
git push origin main
# 如果当前分支与多个主机存在追踪关系,使用 -u 参数指定一个默认主机,后面可以不加参数使用 git push
git push -u origin main
第二次上传时,因为有刚才的记录,不需要再写 origin
和 main
,会默认传递到 origin
这个地址的 main
分支上,如果需要推送到其他分支,需要加以说明
# 第二次上传
git push
使用 git clone 仓库地址
指令将远程仓库中的内容克隆一份到本地,默认克隆main
主分支
可以克隆别人的 公开 的仓库,也可以克隆自己的仓库
# 克隆仓库主分支
git clone <仓库地址>
# 克隆远程指定分支
git clone -b <分支名> <仓库地址>
与远程仓库关联后,如果代码有他人进行更新,可以使用git pull
获取最新代码
# 拉取远程 main 最新代码到本地分支 main 并进行合并
git pull origin master
git pull
如果远程和本地都有修改,再pull就会产生冲突,和当前一样手动合并,然后add,commit,push
提交分支git push origin login,再git pull origin login拉取,不会和主分支合并
对于bugfix分支,应该是切到master分支然后merge合并,然后把他删掉。如果已经将bugfix推上去了,可以用
git push origin :bugfix用空覆盖,将远程的bugfix分支删除
用fork把他人的项目整到自己的github上,然后对这个项目修改(clone……),然后pull后点pull request,如果作者批准并且merge就可以上到他的项目里
VSCode内置版本控制机制,并自带对Git和Github的支持,可以安装插件以支持其他控制软件,如SVN等,可以在其中进行可视化 git 管理
在一些项目中,我们不想让本地仓库中所有文件都上传到远程仓库中,因为其中有一些测试文件、配置文件、依赖文件等,内容太大,并且我们只想展示源代码,则可以写一个.gitignore
文件,将不需要推送的文件进行自动忽略
git 忽略规则匹配语法:
.gitignore
文件,也可以在各个文件夹中设置,所以有根目录和当前目录指令的区别# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. # dependencies # 开头的是注释 # 忽略根目录下的 bin 文件 /bin # 忽略当前路径下的 bin 文件夹 bin/ # 忽略当前路径下的.c文件,不忽略子目录中的.c文件 /*.c # 忽略 bin 文件夹下的.c文件,不忽略子目录中.c文件 bin/*.c # 忽略所有.log文件 *.log # 忽略/bin, a/bin, a/b/bin等 **/bin # 忽略a/b, a/x/b, a/x/y/b等 a/**/b # 不忽略 bin 目录下的 run.sh 文件 !/bin/run.sh # 忽略当前路径的 config.php 文件 config.php
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。