廖雪峰老师git教程笔记
1. 创建版本库
命令:git init
2. 提交文件
命令: git add <fileName>
git add . //增加所有文件
git commit -m "提交备注信息"
git commit <fileName> -m"只提交file1" 提交指定文件
3. 查看提交记录日志
命令:git log
git log --pretty=oneline
$ git log --pretty=oneline aeeebd9b1c514fe6d922284aa9e20893c33d8502 (HEAD -> master) 新增第三行 7decb271aa65f74bbe3ff59ef9ec7be02cda2fe1 新增一行 d2a4bf09538d3991cc879f07864ceaa59cc78af7 add file1.txt
注:前面为git版本号
$ git log --oneline 也可以显示日志,只不过前面版本id不是全id
如 $ git log --oneline d2a4bf0 (HEAD -> master) add file1.txt
如果提交的历史纪录很长,回车会逐步显示,输入q
可以退出。
4. 还原到上个版本
git reset --hard HEAD^ 后面^代表第几个版本 ,^^代表还原到pre 2版本
git reset --hard HEAD~100 //还原到前100个版本
5. 回退到指定版本
git reset --hard commit_id(可以不写全) 如 git reset --hard d2a4bf
6.查看所有操作命令
git reflog
7. 撤销修改 git checkout -- <fileName>
只是修改了工作区的readme.txt还未add,可以直接git checkout -- readme.txt 文件会撤销修改
已经add后使用git reset HEAD readme.txt 然后git checkout -- readme.txt 文件会撤销修改
只要没有提交 都可以使用git checkout -- <fileName>还原,已经commit的需要使用git resest --hard HEAD^版本回退
8. 文件删除
删除命令如下:
rm <fileName> 类似直接在文件夹中删除
git rm <fileName>
git commit -m "message"
误删时只要没有提交 都可以使用git checkout -- <fileName>还原,已经commit的需要使用git resest --hard HEAD^版本回退, git checkout
其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。
1).批量删除多个文件可以使用上述方法提交,但过于繁琐,首先需要清楚下面命令意思:
git add . :他会监控工作区的状态树,使用它会把工作时的所有变化提交到暂存区,包括文件内容修改(modified)以及新文件(new),但不包括被删除的文件。
git add -u :他仅监控已经被add的文件(即tracked file),他会将被修改的文件提交到暂存区。add -u 不会提交新文件(untracked file)。(git add --update的缩写)
git add -A :是上面两个功能的合集(git add --all的缩写)
故一次性删除多个文件,可以使用命令:
git add -A
git commit -m 'msg'
2).删除文件夹:
git rm -rf <文件夹名>
git add -A
9.远程仓库
第1步:创建SSH Key 在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa
和id_rsa.pub
这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:$ ssh-keygen -t rsa -C "youremail@example.com"
你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,如果一切顺利的话,可以在用户主目录里找到.ssh
目录,里面有id_rsa
和id_rsa.pub
两个文件,这两个就是SSH Key的秘钥对,id_rsa
是私钥,不能泄露出去,id_rsa.pub
是公钥,可以放心地告诉任何人。
第2步:登录github -->setting-->ssh keys 粘贴id_rsa.pub内容
注:GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以,GitHub只要知道了你的公钥,就可以确认只有你自己才能推送
10.添加远程库
在github上新建repository,用来同步关联本地repository,如在github创建learngit库使用下面命令关联本地库
命令:$ git remote add origin git@github.com:你的git账号/learngit.git
然后推送本地库内容到远程库,命令:$ git push -u origin master 【把本地库的内容推送到远程,用
git push
命令,实际上是把当前分支master
推送到远程,由于远程库是空的,我们第一次推送master
分支时,加上了-u
参数,Git不但会把本地的master
分支内容推送的远程新的master
分支,还会把本地的master
分支和远程的master
分支关联起来,在以后的推送或者拉取时就可以简化命令。】
第一次推送后,每次本地库提交后,都可以使用 $ git push origin master命令同步推送到远程库。
删除与远程库的关联 git remote rm origin
11.从远程库克隆
GitHub远程库详情页复制remote url(远程库连接)然后使用命令:$ git clone git@github.com:git账号/库名称.git
$ git clone git@github.com:seanzhang1988/clonefromgithub.git
或
$ git clone https://github.com/seanzhang1988/CloneFromGitHub.git
12. 分支
git 默认一个分支master,可以创建分支分支提交不影响master,分支提交完毕后可以合并master并可以删除新创建的分支
创建分支:git branch dev
切换分支:git checkout dev
上述两个可以合并 git checkout -b dev
查看当前分支:git branch
合并分支:git merge dev (dev分支工作结束后master合并)
删除分支:git branch -d dev
合并时保存分支信息 $ git merge --no-ff -m "merge with no-ff" dev
13.bug分支
出现bug后,可以新建临时分支处理bug,处理完毕后合并并删除临时分支。但是当你正在dev分支处理别的任务且还未完成,此时让你来处理bug又该如何操作?git提供stash功能git stash,即暂时存储dev分支,然后切换master分支创建bug分支,bug分支修改完毕提交后合并并删除bug分支,再继续dev分支的工作,此时使用命令:$ git stash pop
恢复dev正在进行的工作
,提交后合并会显示bug分支修改的内容和dev分支内容。
14.多人协作
查看远程库信息 git remote 或者 git remote -v
推送本地分支到远程 git push origin dev
场景:A创建dev分支修改后提交到远程,如果B也想在dev上修改东西必须创建远程origin
的dev
分支到本地,命令:git checkout -b dev origin/dev,有可能A的最新提交和B有冲突,B须使用git pull拉取最新的提交,然后在本地合并解决冲突后推送。拉取失败原因是没有指定本地dev分支与远程origin/dev分支的链接(specify which branch you want to merge with),命令:git branch --set-upstream-to=origin/dev dev,然后再git pull. 拉取成功后合并有冲突须手动解决,然后在提交push.
15.标签管理
首先切换到需要打标签的分支然后git tag <标签名>,标签都是打在commit上的,使用命令git log --pretty=oneline --abbrev-commit查找commit id,然后 git tag <标签名> commit id打标签,如:git tag v0.9 76afcc2,使用命令 git show <tagName> 查看标签信息。命令git tag -a<tagName> -m "标签描述",可以给标签添加解释信息。
删除标签:git tag -d v0.1
推送标签到远程:git push origin <tagName> 或一次性推送全部标签 git push origin --tags
删除已推送远程的标签:git tag -d v0.1(先删除本地),git push origin :refs/tag/v0.1(再删远程)。
16.使用GitHub
在GitHub上点击fork就可以在自己账号下自动创建相应仓库,这样我们可以修改推送自己的仓库,如果直接克隆别人的库到本地,我们没有权限推送修改,但是可以在github上发起pull request请求。
17.使用Gitee 码云
1.上传自己的SSH公钥,用户主目录 .ssh/id_rsa.pub 文件内容粘贴
2. gitee上新建项目hk001
3. 新建文件夹hk001右键git bash,使用命令git init新建本地仓库,项目代码粘贴到hk001
4. 本地库代码提交
5. 关联远程库,git remote add origin git@gitee.com:gitee账号/hk001.git
6. 推送远程库,git push -u origin master
注意:如果推送失败需要先拉取远程库git pull,拉取如果报错:fatal:refusing to merge unrelated histories可以使用命令:git pull origin master --allow-unrelated-histories,然后再git pull再推送。
推送处理过程:
git支持关联多个远程库,本地库既可以关联github也可以关联gitee. 注意远程库名称不是origin
step1.关联github远程库:git remote add github git@github.com:账号/hk001.git
step2.关联gitee远程库: git remote add gitee git@gitee.com:账号/hk001.git
step3. 推送远程库: git push github master
git push gitee master
18.忽略特殊文件
项目中有些文件不需要推送到远程库,可以在git本地库根目录创建 .gitignore文件,然后把要忽略的文件名写进去,git会自动忽略这些文件。https://github.com/github/gitignore 提供了各种配置文件,里面有visualstudio.gitignore把该文件放入项目根目录。 然后推送到GitHub.
命令:git add -f <fileName> 可以强制添加被 .gitignore忽略的文件
19.实战修改文件后推送远程
1.查看状态
$ git status
On branch master
Your branch is up to date with 'origin/master'.
nothing to commit, working tree clean
2.查看当前分支
$ git branch
* master
3.创建工作分支
$ git checkout -b Feat_sean
Switched to a new branch 'Feat_sean'
4.修改文件后加入暂存区
$ git add README.md
5.提交文件
$ git commit -m "modified README.md"
[Feat_sean be12fa6] modified README.md
1 file changed, 1 insertion(+), 6 deletions(-)
6.推送到远程
$ git push -u origin Feat_sean
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 301 bytes | 301.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: Powered by Gitee.com
To https://gitee.com/moce-technology/hk001
* [new branch] Feat_sean -> Feat_sean
Branch 'Feat_sean' set up to track remote branch 'Feat_sean' from 'origin'.
7.查看状态
$ git status
On branch Feat_sean
Your branch is up to date with 'origin/Feat_sean'.
nothing to commit, working tree clean
8.切换主分支
$ git checkout master
Switched to branch 'master'
Your branch is up to date with 'origin/master'.
9.合并分支
$ git merge Feat_sean
Updating df5a59b..be12fa6
Fast-forward
README.md | 7 +------
1 file changed, 1 insertion(+), 6 deletions(-)
10.删除工作分支
$ git branch -d Feat_sean
Deleted branch Feat_sean (was be12fa6).