Git使用入门
1.什么是Git?
Git是一个强大的分布式版本控制工具,最初由linus管理linux内核项目时开发,在项目开发的时候使用git可以存储代码、跟踪修订历史记录、合并代码更改,并在需要时恢复为较早的代码版本。
2.Git的三个概念
1.工作区
实际开发中能在git仓库目录下看到的目录
2.暂存区
英文叫 stage 或 index。一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
3.版本库
工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库。
3.安装git
1 2 3 4
| sudo apt install git
sudo pacman -S git
|
4.配置git
git在使用之前需要初始化一些配置信息包括姓名和邮箱,用于日后管理项目提交commit时能很明显的看到是谁提交的commit
1 2
| git config --global user.name "DreamAccount" git config --global user.email "fragmented666@gmail.com"
|
5.git常用的命令
1.初始化git仓库
2.提交代码
1 2 3 4
| git add .
git commit -m "update"
|
3.回退版本
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| git reset --hard id
git reset --soft id
git reset --mixed id
git reset .
git revert id
|
4.git分支操作
1 2 3 4 5 6 7 8 9 10 11 12
| git branch
git branch ${BRANCH_NAME}
git checkout -b ${BRANCH_NAME}
git checkout ${BRANCH_NAME}
|
5.git远程操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| git remote -v
git remote add origin https://github.com/DreamAccout/monitor.git
git push origin --delete remoteBranchName
git push -u origin master:master
git fetch origin master:dev
git pull origin master:dev
git clone https://github.com/DreamAccount/monitor.git
|
6.git冲突解决
在实际开发中,可能会存在以下情况,开发者在分支master上修改了文件a并将文件a提交到了代码仓库中,同时开发者在dev分支上也修改了文件a,这个时候如果我们在其中一个分支上合并另一个分支,这个时候就会引发冲突,因为git不知道我们实际要保留哪个修改记录,这个时候就需要开发者自行修改,然后重新git add . && git commit -m “update“重新提交代码。
实际冲突的文件git将会用标识符进行标记
1 2 3 4 5 6 7
| <<<<<<< HEAD //我是dev分支的修改记录 ======= //我是master分支的修改记录 >>>>>>> master #<<<<<到=====是当前分支修改的内容 #=====到>>>>>>是合并分支修改的内容
|
7.git rebase用法
在开发过程中我们可能会出现代码提交历史太多,有很多个版本只进行了小的修改,这个时候我们经常会将多个提交历史进行合并
有的时候我们如果合并一个分支会出现git提交历史记录变得分叉,显得十分不美观,这个时候就可以使用git rebase命令,将另一个分支的提交记录复制到本分支上。
8.如何保存当前工作状态
在实际的开发中,常常会出现这样的场景,你正在dev分支上开发项目,这个时候有个人和你说主线master上存在bug需要立马修复,这个时候你又不想提交代码,但是你不提交代码这个时候切换到master分支上你会发现master分支上也存在你加入到暂存区和工作区的代码,这个时候我们就需要用git stash 将工作区和暂存区的代码隐藏保存起来(官网是这样说的,但是实际上只能保存暂存区的代码,如果需要保存工作区的代码需要指定-u参数),保存成功后再切换到master分支上修复bug。
1 2 3 4 5 6 7
| git stash save "stash file" -u
git stash pop
|
9.git reset和git revert的区别
git reset是回滚到指定的版本,并将指定版本后面的记录全部舍弃,但是git revert是指定一个版本进行重做,并不影响后面的版本,如果后面的版本对回退的版本提交文件也进行了修改,则revert就会引发冲突。
6.搭建git服务器
1.创建一个git用户
1
| useradd -m -k /dev/null -s /usr/bin/git-shell git
|
2.配置密钥
1 2 3 4 5 6 7
| ssh-keygen -t rsa -b 2048 -C "git-repo key" -f git-repo
sudo cat git-repo.pub > /home/git/.ssh/authorized_keys
|
3.指定一个目录为git仓库目录
1 2 3
|
sudo chown git:git /srv/git=repo -R
|
4.创建一个远程git仓库
1 2
| git init --bare monitor.git
|
5.将远程仓库克隆到本地
1 2
| git clone git@example.com:/home/git/monitor.git
|
7.配置github为远程仓库
1.将生成的私钥保留到本地
1 2 3 4 5 6 7 8
|
Host github Hostname github.com Port 22 User git Identityfile ~/.ssh/private_keys/github
|
2.将生成的公钥上传到github中
3.测试
1 2 3 4 5 6 7
| ssh -T github
Hi DreamAccount! You've successfully authenticated, but GitHub does not provide shell access.
#如果配置了ssh模板可以直接 ssh -T github(配置模板的名称)
|
4.创建github远程仓库
5.克隆远程仓库到本地
1 2
| git clone github:DreamAccount/monitor.git
|
如果需要将代码推送到github上,先将代码进行提交到版本仓库只需要git push即可
例如我有一堆代码存放在dir目录下,如果需要将代码拷贝到刚刚克隆下的仓库,然后提交
1 2
| cp dir/* monitor/ cd monitor && git add . && git commit -m "update release " && git push
|