git快速入门笔记
- 一. 安装git
- 二. 创建git仓库
- 三、添加文件到git 仓库
- 四、常用命令
- 五、创建远程仓库
- 六、分支管理
- 七、创建标签
- 八、忽略特定文件
一. 安装git
这里使用的是Ubuntu Linus,安装之前先输入git,看看系统有没有安装,没有的情况下系统会提醒你如何安装。
# git
The program 'git' is currently not installed. You can install it by typing:
apt-get install git
然后输入命令apt-get install git系统就会为你安装。
git安装完成后必须设置参数:
# git config --global user.name "xiaoji"
# git config --global user.email "xiaoji@163.com"
--global参数表明这台机器上的所有仓库都会使用这个配置,也可以单独配置每个仓库
二. 创建git仓库
仓库可以理解为一个目录,目录里面的所有文件都可以被git 管理起来。文件的追踪改动只能追踪文本文件,不能追踪二进制文件。创建过程如下:
- 先创建一个空目录
# mkdir learngit
# cd learngit
# pwd
- 再git 初始化,这样git仓库就建好了,此时在仓库目录下面有个
.git的隐藏文件
# git init
Initialized empty Git repository in /root/learngit/.git/
三、添加文件到git 仓库
一定要先把要添加的文件放到learngit目录下,在这个目录下再输入命令
# git add readme.txt
# git commit -m "wrote a readme file"
git add 把文件添加到暂存区
git commit把文件提交到仓库,-m后面输入的是本次提交的说明,可以输入任意内容,最好是有意义的,这样你就能从历史记录里方便地找到改动记录.
四、常用命令
查看仓库当前状态
# git stutus
查看具体修改了什么内容
# git diff readme.txt
显示从最近到最远的提交日志,参数--pretty=oneline可以只显示提交id
#git log
#git log --pretty=oneline
版本更改
# git reset --hard commit_id
查看提交历史
# git log
查看命令历史
# git reflog
撤销工作区修改:
git checkout -- readme.txt
撤销暂存区修改:
$ git reset HEAD file
删除文件
#rm
#git rm
#git commit -m "delete file"
恢复工作区被删除的文件
#rm
#git checkout --
五、创建远程仓库
- 本地仓库生成ssh秘钥,在根目录下输入命令
# ssh-keygen -t ed25519 -C "your-email"
-
github设置里添加公有秘钥
-
本地库关联远程库
# git remote add origin git@github.com:velloastein/learngit.git
- 关联后,第一次推送master分支的所有内容
# git push -u origin master
# git push origin master
- 删除远程库
#git remote rm `
- 查看远程库信息
git remote -v
- 从远程库克隆,在用户目录下使用命令,克隆到一个本地库
git clone git@github.com:velloastein/IntelliJ-IDEA-Tutorial.git
六、分支管理
查看分支:
git branch
创建分支:
git branch
删除分支:
git branch -d
切换分支:
git checkout
git switch
创建并切换分支:
git checkout -b
git switch -c
合并某分支到当前分支:
git merge
解决分支合并冲突,如果自动合并失败,Git告诉我们,readme.txt文件存在冲突,必须手动解决冲突后再提交。git status也可以告诉我们冲突的文件,可以使用cat直接查看文件手动修改,再提交。
git add readme.txt
git commit -m "conflict fixed"
用带参数的git log也可以看到分支的合并情况
git log --graph --pretty=oneline --abbrev-commit
分支管理策略
强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息
git merge --no-ff -m "merge with no-ff"
bug分支
Git还提供了一个stash功能,可以把当前工作区现场“储藏”起来,等以后恢复现场后继续工作。
git stash
用git stash list命令看看
git stash list
用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;
git stash apply stash@{0}
用git stash pop,恢复的同时把stash内容也删了
Git专门提供了一个cherry-pick命令,让我们能复制一个特定的提交到当前分支,在master分支上修复的bug,想要合并到当前dev分支,可以用git cherry-pick 命令,把bug提交的修改“复制”到当前分支,避免重复劳动。
丢弃一个没有被合并过的分支
git branch -D
多人协作的工作模式通常是这样:
- 首先,可以试图用
git push origin推送自己的修改; - 如果推送失败,则因为远程分支比你的本地更新,需要先用
git pull试图合并; - 如果合并有冲突,则解决冲突,并在本地提交;
- 没有冲突或者解决掉冲突后,再用
git push origin推送就能成功! - 如果
git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to。origin/ - 在本地创建和远程分支对应的分支,使用
git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;
rebase
- rebase操作可以把本地未push的分叉提交历史整理成直线;
git rebase提取操作有点像git cherry-pick一样,执行rebase后依次将当前(执行rebase时所在分支)的提交cherry-pick到目标分支(待rebase的分支)上,然后将在原始分支(执行rebase时所在分支)上的已提交的commit删除。- rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。
七、创建标签
-
命令
git tag用于新建一个标签,默认为commitid HEAD,也可以指定一个commit id -
命令
git tag -a可以指定标签信息-m "blablabla..." commitid -
命令
git tag可以查看所有标签 -
命令
git show可以看到说明文字 -
标签总是和某个commit挂钩。如果这个commit既出现在master分支,又出现在dev分支,那么在这两个分支上都可以看到这个标签
-
命令
git push origin可以推送一个本地标签 -
命令
git push origin --tags可以推送全部未推送过的本地标签; -
命令
git tag -d可以删除一个本地标签; -
命令
git push origin :refs/tags/可以删除一个远程标签。
八、忽略特定文件
在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件
.gitignore文件本身要放到版本库里,并且可以对.gitignore做版本管理!
GitHub已经为我们准备了各种配置文件,只需要组合一下就可以使用了。所有配置文件可以直接在线浏览:https://github.com/github/gitignore
检验.gitignore的标准是git status命令是不是说working directory clean
可以用git check-ignore命令检查.ignore哪个文件写错了
git check-ignore -v
强制添加
git add -f
把指定文件排除在.gitignore规则外的写法就是!+文件名,所以,只需把例外文件添加进去即可
# 排除所有.开头的隐藏文件:
.*
# 排除所有.class文件:
*.class
# 不排除.gitignore
!.gitignore
使用别名
加上--global是针对当前用户起作用的,如果不加,那只针对当前的仓库起作用
git config --global alias.st status
git st
每个仓库的Git配置文件都放在.git/config文件中
当前用户的Git配置文件放在用户主目录下的一个隐藏文件.gitconfig中
配置别名也可以直接修改这个文件,如果改错了,可以删掉文件重新通过命令配置