学习廖雪峰的Git教程笔记
https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
(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 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 log --pretty=oneline
,加参数 --abbrev-commit
缩略commit_id,q
退出日志为什么Git比其他版本控制系统设计得优秀,因为Git跟踪并管理的是修改,而非文件。
git add 把文件添加进去,实际上就是把文件修改添加到暂存区;
git commit 提交更改,实际上就是把暂存区的所有内容提交到当前分支。
每次修改,如果不用git add到暂存区,git commit时就不会把修改加入到分支版本库中。
git checkout --
,如:git checkout -- test.txt
,这里有两种情况:
一种是 test.txt 自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是 test.txt 已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commit或git add时的状态。
git reset HEAD
,如:git reset HEAD test.txt
,
git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。
一般情况下,用git rm
命令删了,并且git commit
和
先手动在工作区删除文件,然后使用git rm
和git add
效果是一样的。
删错了,版本库里还有,可以 git checkout --
,还原文件。
ssh-keygen -t rsa -C "[email protected]"
邮件地址换成自己的邮件地址,一路回车,使用默认值即可。
如果顺利,可在用户主目录里找到.ssh目录,里面有 id_rsa
和 id_rsa.pub
两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。
登陆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
,本地和远程分支的名称最好一致;
多人协作的工作模式通常是这样:
(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分支上合并就可以了。
修复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
文件