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 <file>
#git rm <file>
#git commit -m "delete file"
恢复工作区被删除的文件
#rm <file>
#git checkout -- <file>
五、创建远程仓库
- 本地仓库生成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 <name>`
- 查看远程库信息
git remote -v
- 从远程库克隆,在用户目录下使用命令,克隆到一个本地库
git clone git@github.com:velloastein/IntelliJ-IDEA-Tutorial.git
六、分支管理
查看分支:
git branch
创建分支:
git branch <name>
删除分支:
git branch -d <name>
切换分支:
git checkout <name>
git switch <name>
创建并切换分支:
git checkout -b <name>
git switch -c <name>
合并某分支到当前分支:
git merge <name>
解决分支合并冲突,如果自动合并失败,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" <name>
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 <commit>
命令,把bug提交的修改“复制”到当前分支,避免重复劳动。
丢弃一个没有被合并过的分支
git branch -D <name>
多人协作的工作模式通常是这样:
- 首先,可以试图用
git push origin <branch-name>
推送自己的修改; - 如果推送失败,则因为远程分支比你的本地更新,需要先用
git pull
试图合并; - 如果合并有冲突,则解决冲突,并在本地提交;
- 没有冲突或者解决掉冲突后,再用
git push origin <branch-name>
推送就能成功! - 如果
git pull
提示no tracking information
,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>
。 - 在本地创建和远程分支对应的分支,使用
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 <tagname> commitid
用于新建一个标签,默认为HEAD
,也可以指定一个commit id -
命令
git tag -a <tagname> -m "blablabla..." commitid
可以指定标签信息 -
命令
git tag
可以查看所有标签 -
命令
git show <tagname>
可以看到说明文字 -
标签总是和某个commit挂钩。如果这个commit既出现在master分支,又出现在dev分支,那么在这两个分支上都可以看到这个标签
-
命令
git push origin <tagname>
可以推送一个本地标签 -
命令
git push origin --tags
可以推送全部未推送过的本地标签; -
命令
git tag -d <tagname>
可以删除一个本地标签; -
命令
git push origin :refs/tags/<tagname>
可以删除一个远程标签。
八、忽略特定文件
在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 <file>
强制添加
git add -f <file>
把指定文件排除在.gitignore
规则外的写法就是!
+文件名,所以,只需把例外文件添加进去即可
# 排除所有.开头的隐藏文件:
.*
# 排除所有.class文件:
*.class
# 不排除.gitignore
!.gitignore
使用别名
加上--global
是针对当前用户起作用的,如果不加,那只针对当前的仓库起作用
git config --global alias.st status
git st
每个仓库的Git配置文件都放在.git/config
文件中
当前用户的Git配置文件放在用户主目录下的一个隐藏文件.gitconfig
中
配置别名也可以直接修改这个文件,如果改错了,可以删掉文件重新通过命令配置