GIT 学习笔记

学习廖雪峰的Git教程笔记
https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

一、安装git

(1)linux 可直接yum install git
(2)windows 可从官网下载安装程序,https://git-scm.com/downloads
安装完成后,设置

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

二、创建版本库

(1)切换到保存版本库的目录,如 cd /e/weicy/phpstudy/www/learngit
(2)通过git init命令把所在目录变成Git可以管理的仓库 (勿动生成的.git隐藏文件)
(3)添加文件到仓库

  • git add ,如:git add test.txt
    添加当前目录所有文件和文件夹git add .
  • git commit -m "message",-m后面输入的是本次提交的说明,如:git commit -m "第一次提交"

commit可以一次提交很多文件,所以你可以多次add不同的文件,比如:

git add file1.txt
git add file2.txt file3.txt
git commit -m "add 3 files."

三、版本间切换

(1) git reset --hard HEAD^ (在Git中,用HEAD表示当前版本,上一个版本就是HEAD^
(2) git reset --hard ,直接指定切换到的commit_id,commit_id写4位数以上

辅助命令

  • git status 命令,仓库当前的状态,可知道哪些文件被修改过
  • git diff 命令,查看修改内容
  • git log 命令,查看从最近到最远的提交日志,简化输出内容可加参数 git log --pretty=oneline ,加参数 --abbrev-commit 缩略commit_id,q 退出日志
  • git reflog 查看命令历史,以便确定要回到未来的哪个版本

四、工作区/暂存区 概念

为什么Git比其他版本控制系统设计得优秀,因为Git跟踪并管理的是修改,而非文件。
git add 把文件添加进去,实际上就是把文件修改添加到暂存区;
git commit 提交更改,实际上就是把暂存区的所有内容提交到当前分支。
每次修改,如果不用git add到暂存区,git commit时就不会把修改加入到分支版本库中。

五、撤销修改

把工作区的修改撤销

git checkout -- ,如:git checkout -- test.txt,这里有两种情况:
一种是 test.txt 自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是 test.txt 已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commit或git add时的状态。

把在暂存区的修改撤销(unstage),重新放回工作区

git reset HEAD ,如:git reset HEAD test.txt
git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。

删除文件

一般情况下,用git rm 命令删了,并且git commit

先手动在工作区删除文件,然后使用git rm git add 效果是一样的。

删错了,版本库里还有,可以 git checkout -- ,还原文件。

六、远程仓库

创建SSH Key
ssh-keygen -t rsa -C "[email protected]"

邮件地址换成自己的邮件地址,一路回车,使用默认值即可。
如果顺利,可在用户主目录里找到.ssh目录,里面有 id_rsaid_rsa.pub 两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。

在GitHub 添加公钥

登陆GitHub,打开账户“settings”,“SSH and GPG keys”页面
然后,点“New SSH key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的公钥

推送到远程仓库

关联一个远程库,使用命令

git remote add origin [email protected]:weicy1510/learngit.git

其中 weicy1510 GitHub账户名, learngit.git 仓库名字,origin 远程仓库的名称(可自定义)

关联后,使用命令 git push -u origin master

此后,就可以使用命令 git push origin master 推送

把本地库的内容推送到远程,用 git push 命令,实际上是把当前分支master推送到远程。第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。

从远程库克隆

首先必须知道仓库的地址,然后使用git clone命令克隆,如:
git clone [email protected]:weicy1510/learngit.git

多人协作

查看远程库信息,使用git remote -v

在本地创建和远程分支对应的分支,使用git checkout -b origin/,本地和远程分支的名称最好一致;

多人协作的工作模式通常是这样:

(1)首先,可以试图用git push origin 推送自己的修改;
(2)如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
(3)如果合并有冲突,则解决冲突,并在本地提交;
(4)没有冲突或者解决掉冲突后,再用git push origin 推送就能成功!

如果git pull提示no tracking information,则说明远程分支和的本地分支链接关系没有创建,用命令git branch --set-upstream-to=origin/

六、分支管理

查看分支:git branch
创建分支:git branch
切换分支:git checkout
创建+切换分支:git checkout -b
合并某分支到当前分支:git merge
删除分支:git branch -d
如要删除一个没有被合并过的分支,可通过git branch -D 强行删除。

解决冲突

当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
Git用<<<<<<<=======>>>>>>>标记出不同分支的内容
解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交(git add git commit -m "message")。

git log --graph命令可以看到分支合并图。
如:

git log --graph --pretty=oneline --abbrev-commit

合并分支时,加上--no-ff参数就可以用普通模式合并(强制禁用Fast forward模式),Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息,
如:合并dev分支

git merge --no-ff -m "merge with no-ff" dev

-m 后的双引号是说明描述

分支策略

在实际开发中,应该按照几个基本原则进行分支管理:

首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;
团队每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。

所以,团队合作的分支看起来就像这样:
GIT 学习笔记_第1张图片

Bug分支

修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;

当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。

如有多个stash,恢复的时候,先用git stash list查看,然后恢复指定的stash,用命令:
git stash apply stash@{0}

七、标签管理

命令git tag 用于新建一个标签;
命令git tag可以查看所有标签。

命令git push origin 可以推送一个本地标签
命令git push origin --tags可以推送全部未推送过的本地标签;
命令git tag -d 可以删除一个本地标签;
命令git push origin :refs/tags/可以删除一个远程标签。

八、忽略特殊文件

在Git工作区的根目录下创建一个特殊的.gitignore文件

你可能感兴趣的:(git)