这里使用的是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 管理起来。文件的追踪改动只能追踪文本文件,不能追踪二进制文件。创建过程如下:
# mkdir learngit # cd learngit # pwd
.git
的隐藏文件# git init Initialized empty Git repository in /root/learngit/.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-keygen -t ed25519 -C "your-email"
github设置里添加公有秘钥
本地库关联远程库
# git remote add origin git@github.com:velloastein/learngit.git
# 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
git rebase
提取操作有点像git cherry-pick一样,执行rebase后依次将当前(执行rebase时所在分支)的提交cherry-pick到目标分支(待rebase的分支)上,然后将在原始分支(执行rebase时所在分支)上的已提交的commit删除。命令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
中
配置别名也可以直接修改这个文件,如果改错了,可以删掉文件重新通过命令配置