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