【学习笔记】版本控制工具 GIT

版权声明:欢迎评论交流,转载请注明原作者。 https://blog.csdn.net/m0_37809890/article/details/84308383

前言

  1. GIT是一个分布式的版本控制工具。
  2. 参考资料 git官方教程-中文版廖雪峰老师的git教程
  3. 下文面向windows系统,所有操作使用git自带的git bash。
  4. 编辑文本文档时不要使用记事本,可以用sublime text或notepad++.

本地使用

安装及创建版本库

下载git,安装,进入git bash,确认用户信息如下。

$ git config --global user.name "Your Name"
$ git config --global user.email "[email protected]"

常用命令

在bash中进入一个路径不含中文的空文件夹,使用git init命令创建版本库
使用git add filename命令把文件添加到暂存区
使用git commit -m "message"命令把暂存区的内容提交到版本库。
使用git diff filename查看对文件的修改
使用git status查看当前状态(包括 未跟踪的文件/已修改但没有暂存的文件/已暂存且没有提交的文件)
使用git rm在暂存区中删除一个文件,用法与git add相似。

版本回退

使用git log命令查看版本历史
使用git reset --hard commit_id切换到目标版本,HEAD指向当前版本,HEAD^指向上个版本,HEAD~100指向上100个版本
使用git reflog查看提交历史,以便找到未来的commit_id

工作区和暂存区

工作区,Working Directory 就是在电脑里能看到的目录。
版本库,Repository 就是在目录中的一个.git文件夹,存了与git有关的很多内容,如配置,分支,暂存区等。
暂存区,Stage 需要提交的文件通过git add放到暂存区,然后通过git commit统一提交到分支。
git diff filename比较工作区与暂存区
git diff --cached filename比较暂存区与版本库
git diff HEAD -- filename比较工作区与版本库

-----------------------版本库--------------------------------------------
                                         |                           |
                                 git diff --cached           		|
                                         |                           |
-------------暂存区------------------------------------       	git diff HEAD
                        |                                            |
                     git diff                                      	|
                        |                                            |
-----工作区--------------------------------------------------------------

删除修改

  1. 仅修改了工作区,使用git checkout -- filename把该文件恢复到最近的git commitgit add
  2. 已经暂存,使用git reset HEAD filename删除暂存区,然后修改工作区
  3. 已经提交,参考版本回退。

远程仓库

  1. Git是分布式版本控制系统,同一个git版本库可以分布到不同的机器上。首先需要一个原始版本库,此后别的机器就可以克隆这个版本库,且不同机器上的版本库是完全一样的,没有主次之分。
  2. 实际情况是找一台电脑充当服务器,其它人把仓库从服务器上克隆到自己电脑上,再将各自的提交推送到服务器库里,也能从服务器库中拉取别人的提交。
  3. 可以自行创建服务器,也可以直接使用github,以下均使用github。

初始设置:添加SSH

  1. 注册github账号。
  2. 每台电脑创建自己的SSH Key,在git bash里执行$ ssh-keygen -t rsa -C "[email protected]"。注意修改邮箱。
  3. 在用户主目录里找到.ssh文件夹,显示扩展名。id_rsa文件就是私钥不能泄露,id_rsa.pub是公钥,可以告诉任何人。
  4. 登陆github,打开账户设置,添加SSH Key,title任意填,Key里复制id_rsa.pub里的内容。
  5. 确认添加,你的github账户即可与你的电脑通讯。

本地向GITHUB上推送

  1. 在github上新建与本地仓库同名的空版本库(Repository),注意不要有readme。
  2. 建立远程库链接:本地仓库目录下执行$ git remote add origin [email protected]:LittleFall/learngit.git,其中LittleFall修改为你的github账户名,learngit修改为你的仓库名。origin可以修改为其它的名字,表示远程库。如果因名字写错等原因需要删除远程库链接,使用git remote rm origin.
  3. 注意,第一次添加时会有SSH的确认,输入yes再按两次回车即可,以后不会出现。
  4. 使用git push把本地分支推送的远程库中。git push -u origin master,仅第一次使用需要加-u.

从远程库克隆

  1. 开发时最好首先设置远程库,再在各个本地库中克隆。
  2. 在github上新建一个库gitskills,可以加上readme以验证效果。
  3. 在本地的一个目录中使用$ git clone [email protected]:LittleFall/gitskills.git即可克隆,注意修改用户名。
  4. 会发现目录下出现了gitskills目录,里面有一个readme.md文件和.git文件夹。
  5. 有使用其它协议的克隆方法,但似乎这样最好。

分支管理

git将每次提交(commit)串成时间线,称为分支,目前只有一个分支:主分支master。可以通过创建其它分支来修改程序,最后合并到主分支里。
注意:分支实际上是指向提交的。

基本操作

  1. 列出所有分支git branch
  2. 创建分支 git branch name,切换分支git checkout name,创建并切换分支git checkout -b name.
  3. 合并指定分支到当前分支git merge name。注意不修改mater时会使用Fast-forward合并模式,直接把mater指针移动到待合并的分支指针上。
  4. 删除分支git branch -d name

解决冲突

  1. git合并分支可能会产生冲突。git会将冲突标记在工作区的文件中,类似于
<<<<<<< HEAD
Creating a new branch is quick & simple.
=======
Creating a new branch is quick AND simple.
>>>>>>> feature1
  1. 打开这个文件,将列出的部分直接修改成需要的值
Creating a new branch is quick and simple.
  1. 保存,add,commit,此时冲突已被解决。
  2. 使用git log --graph --pretty=oneline --abbrev-commit可以形象地看到分支合并过程。
  3. 记得在合并且冲突解决后删除副分支。
  4. 使用git merge --no-ff -m "message" branchname来合并分支且不使用Fast-forward模式,会使用recursive模式,新建一个commit,所以需要-m来记录信息。ff模式的好处是快速,坏处是删除副分支后会丢失分支信息。

分支策略

  1. master分支应当是非常稳定的,只用来发布新版本,不能在上边干活。
  2. dev分支适用于开发使用,每个程序员将自己的提交合并到dev上。
  3. bug分支:需要保存当前工作修改bug时使用git stash,将当前工作现场存储起来(类似于栈)。恢复工作现场时首先使用git status观察当前当作现场是否“干净”,使用git stash list查看存储内容,再使用git stash apply+git stash dropgit stash pop进行恢复并删除存储的内容。
  4. feature分支:注意强行删除git branch -D name

多人协作

  1. 查看远程库信息 git remote -v
  2. 建立本地分支和远程分支的链接关系git branch --set-upstream-to= origin/<branch-name> <branch-name>
  3. 从远程抓取分支git pull,可能会有冲突,可以解决。
  4. 向远程推送分支git push origin <branch-name>

变基

git rebase可以把git log的显示结果变成一条直线,非常好看,会更改提交的依赖关系。

标签管理

  1. 每个标签只能出现一次,其实不如叫做tid。
  2. 创建标签git tag tagname,注意标签是对应于commit的,会打给上个commit,一个commit可以有多个标签。
  3. 查看所有标签git tag
  4. 对某次提交打标签git tag name commit_id
  5. 指定说明文字git tag -a tag_name -m "message"
  6. 利用git show tag_name可以查看详细信息
  7. 删除标签 git tag -d tag_name
  8. 标签只会创建在本地,可以git push origin tag_name来推送到远程库,git push origin --tags推送全部标签。git push origin :refs/tags/<tagname>删除一个远程标签,需要先删除本地。

自定义设置

  1. 忽略特殊文件:在版本库目录下添加.gitignore文件,里面放着需要忽略的文件名,可以使用通配符。再将这个文件add即可。
  2. 配置别名:$ git config --global alias.st status以后写status就可以写st了,还有
    git config --global alias.perlg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
  3. 搭建git服务器,留坑。

猜你喜欢

转载自blog.csdn.net/m0_37809890/article/details/84308383