Git官网地址https://git-scm.com/
Git源码https://github.com/git/git/
SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而工作的时候,用的都是自己的电脑,所以首先要从中央服务器得到最新的版本,然后工作,完成工作后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,对网络带宽要求较高。
Git是分布式版本控制系统,没有中央服务器,每个人的电脑就是一个完整的版本库,工作的时候不需要联网了,因为版本都在自己电脑上。协同的方法是这样的:比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。
Git管网下载https://git-scm.com/downloads
执行exe文件
一直点next
桌面鼠标右击,出现
Git Bash:Unix与Linux风格的命令行,使用最多,推荐最多
Git CMD:Windows风格的命令行
Git GUI:图形界面的Git,不建议初学者使用,尽量先熟悉常用命令
工作区:就是你在电脑里能看到的目录(写的代码存在工作区)。
暂存区:英文叫stage, 或index。一般存放在 “.git目录下” 下的index文件 (.git/index)中,所以我们把暂存区有时也叫作索引(index).(计划要提交的文件)
版本库:(本地库)工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
代码托管中心的任务:维护远程库
局域网环境下:
外网环境下:
团队内部协作和跨团队协作
右键进入git bash here
mkdir blog 创建文件
cd blog 进入blog
ll -A 查看隐藏的.git文件内容
git init 初始化一个 Git 仓库
ll .git/ 表示查看.git 下的文件列表显示
cat .git/config 查看.git/config 内容
注意:.git目录是存放本地库相关的目录和文件,不要对其进行修改和操作
注意:签名级别必须要设置,如果都不设置,GIT可能会导致命令出差。无法辨别
项目级别(仓库):仅在当前本地库范围有效
git config user.name zysheep
git config user.email [email protected]
cat .git/config 查看设置结果
系统级别:登录当前操作系统的用户范围
git config –global user.name zysheep
git config –global user.email [email protected]
cd ~ 家目录
ll –A | grep –i git 查看叫git的文件名称
cat .gitconfig 查看文件内容
在实际开发过程中,通常只需要设置系统级别即可。如果有特殊需要,再设置项目级别。
git tatus 用于显示工作目录和暂存区的状态
git add xxx.txt 将工作区写入暂存区
git rm 命令用于从工作区和索引中删除文件。
git commit -m '备注信息' 将暂存区提交到本地库
git checkout 切换分支或恢复工作树文件
git log 显示提交日志信息
git log –-pretty=oneline 更优雅的显示(查看历史记录)
Git log --oneline
git reflog //用于显示需要回退的步骤HEAD
git rm 命令用于从工作区和索引中删除文件。
Vim d1.txt
git add d1.txt
git commit –m ‘上传到本地库d1.txt’ d1.txt
git rm d1.txt 工作区删除后,提交到本地库
git commit –m ‘删除d1.txt’ d1.txt
$ git reset --hard 15d5002
ll查看即可
注意: git只要在本地库发生操作,都会进行版本记录。
gid diff 将工作区中的文件和暂存区进行比较
vim git.txt 修改内容
git diff git.txt 用于显示提交和工作树等之间的更改
gid diff 暂存区中的文件和本地库进行比较
git add git.txt 将git.txt 工作区添加到暂存区
git diff HEAD git.txt HEAD代表本地库最新版本指针
git diff 不加文件名
git checkout 文件名 退回修改
git remote -v
查看当前所有远程地址别名git remote add
[别名][远程地址]git push [别名] [分支名]
出现以上错误,是因为目录中没有文件,空目录是不能提交上去的。
我们在目录中添加一个文件,使用git add
加入到暂存区,git commit
提交到本地库中。
可能要设置签名(设置全局签名吧,否则设置项目级别的前面,后面再创建本地仓库,又得重新设置),设置完成后,再git commit
,最后再git push
。
这是因为github
上的远程库与本地库版本不一致导致的。我们根据提示先pull
,再push
。
git pull origin master
git push origin master
若git pull
失败 ,提示:fatal: refusing to merge unrelated histories
,这是因为两个根本不相干的 git 库, 一个是本地库, 一个是远端库, 然后本地要推送到远端, 远端觉得这个本地库跟自己不相干, 所以告知无法合并。有两种解决方法:
git pull origin master --allow-unrelated-histories
总结: 创建远程仓库,本地仓库初始化后,使用git pull
拉取,保持本地库与远程库版本一致。
git clone [远程地址]
克隆操作为我们做了这些事情:
如果已经找到远程库,推荐使用克隆来与远程库建立连接
方式一:修改远程仓库地址
git remote -v # 查看远程仓库的地址
git remote set-url origin Url # 更换远程仓库地址,Url为新地址。
方式二:先删除远程仓库地址,然后再添加
git remote rm origin # 删除现有远程仓库
git remote add origin url # 添加新远程仓库
git branch develop
git branch
注: 名称前面加* 号的是当前的分支
加上-a参数可以查看远程分支,远程分支会用红色表示出来(如果你开了颜色支持的话)
git branch -a
git checkout branch_name
git branch -d branch_name
git branch -r -d origin/branch-name
git push origin :branch-name
可以利用 git checkout --track origin/branch_name
,这时本地会新建一个分支名叫 branch_name ,会自动跟踪远程的同名分支 branch_name。
git checkout --track origin/branch_name
这时候 push
和 pull
指令就无法确定该跟踪谁,一般来说我们都会使其跟踪远程同名分支,所以可以利用 git push --set-upstream origin branch_name
,这样就可以自动在远程创建一个 branch_name 分支,然后本地分支会 track 该分支。后面再对该分支使用 push 和 pull 就自动同步。
git push --set-upstream origin branch_name
git checkout master
如果是多人开发的话 需要把远程master上的代码pull下来
git pull origin master
然后我们把dev分支的代码合并到master上
git merge dev
然后查看状态
git status
示例 :合并分支
切换到接受修改的分支上master
(将hot_fix
内容同步到master
)
git checkout master //切换到接受修改的分支上
执行merge命令,git merge命令用于将两个或两个以上的开发历史加入(合并)一起。
git merge hot_fix //hot_fix 被合并的分支名称
问题:将两个分支内的文件分别进行修改.(且改变的是同一位置)进行合并。
1、查看分支信息:
git branch -v
2、在master下修改某行文件内容。然后进行提交。
vim git.txt
git add git.txt
git commit –m ‘master 提交’ git.txt
git branch -v
4、在hot_fix下修改某行(master)同行文件内容。然后进行提交
git checkout hot_fix
vim git.txt
git add git.txt
git commit –m ‘hot_fix提交’ git.txt
合并:
git merge master //在hot_fix中向master中合并代码
Automatic merge failed; fix conflicts and then commit the result.(自动合并失败;修复冲突,然后提交结果。)
修改文件:
vim git.txt // (将冲突的符号清除。进行修改内容)
git add git.txt
git commit –m ‘冲突已修复’//不需要带文件名称