git本地仓库创建
初始化一个Git仓库,使用git init命令。
添加文件到Git仓库,分两步:
-
第一步,使用命令
git add <file>
,注意,可反复多次使用,添加多个文件; -
第二步,使用命对此令
git commit
,完成。
另外:
将所有修改 add进仓库
git状态和比较
git status
git status
git版本回退
工作区 和 暂存区
版本回退
g it log 命令会显示所有的提交记录,以便确定要回退到哪个版本。使用命令
git reset --hard commit_id,可以在 commit_id间穿梭
git reflog
查看命令历史,以便确定要回到未来的哪个版本。
git远程仓库
添加远程仓库
实际上是把当前分支master推送到远程。
由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,
还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
git push origin master
推送最新修改;
从远程仓库克隆
git clone
命令克隆。
Git支持多种协议,包括https
,但通过ssh
支持的原生git
协议速度最快。
git分支管理
创建和合并分支
Git鼓励大量使用分支:
查看分支:git branch
-a 参数查看所有分支
创建分支:git branch <name>
实际上 是 在当前 分支的基础上创建分支
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
只是在本地删除
如果要删除一个已经修改 但是没有合并过的分支,需要使用命令
git branch -D <name>
冲突处理
合并某分支到当前分支:git merge <name>
当有冲突时,git无法自动合并此时,需要手动处理冲突
使用git status 查看状态 ,然后 修改 冲突的文件,add commit push 等
多人协作
因此,多人协作的工作模式通常是这样:
-
首先,可以试图用
git push origin branch-name
推送自己的修改; -
如果推送失败,则因为远程分支比你的本地更新,需要先用
git pull
试图合并; -
如果合并有冲突,则解决冲突,并在本地提交;
-
没有冲突或者解决掉冲突后,再用
git push origin branch-name
推送就能成功!
如果git pull
提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name
。
这就是多人协作的工作模式,一旦熟悉了,就非常简单。
-
查看远程库信息,使用
git remote -v
; -
本地新建的分支如果不推送到远程,对其他人就是不可见的;
-
从本地推送分支,使用
git push origin branch-name
,如果推送失败,先用git pull
抓取远程的新提交; -
在本地创建和远程分支对应的分支,使用
git checkout -b branch-name origin/branch-name
,本地和远程分支的名称最好一致; -
建立本地分支和远程分支的关联,使用
git branch --set-upstream branch-name origin/branch-name
; -
从远程抓取分支,使用
git pull
,如果有冲突,要先处理冲突。
git标签
标签也是版本库的一个快照。
Git的标签虽然是版本库的快照,但其实它就是指向某个commit的指针(跟分支很像对不对?但是分支可以移动,标签不能移动),所以,创建和删除标签都是瞬间完成的。
-
命令
git tag <name>
用于新建一个标签,默认为HEAD
,也可以指定一个commit id; -
git tag -a <tagname> -m "blablabla..."
可以指定标签信息; -
git tag -s <tagname> -m "blablabla..."
可以用PGP签名标签; -
命令
git tag
可以查看所有标签。
-
命令
git push origin <tagname>
可以推送一个本地标签; -
命令
git push origin --tags
可以推送全部未推送过的本地标签; -
命令
git tag -d <tagname>
可以删除一个本地标签; -
命令
git push origin :refs/tags/<tagname>
可以删除一个远程标签。
自定义git
忽略特殊文件
git status
都会显示Untracked files ...
,有强迫症的童鞋心里肯定不爽。
.gitignore
文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。 具体的例子可以看 :https://github.com/github/gitignore
忽略文件的原则是:
- 忽略操作系统自动生成的文件,比如缩略图等;
- 忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生的
.class
文件; - 忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。、
其他配置
git可以配置一些个性化的配置,比如 提交时的用户名 和 邮箱 ,命令缩写等。基本使用 git config --global 命令,其中 --global 表示全局配置 。
如以下命令配置 全局的缩写
git config --global alias.co checkout
git config --global alias.ci commit
git config --global alias.br branch
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
如以下命令配置 全局(当前仓库)的 用户名和 邮箱
git config --global user.name windsunmoon
git config --global user.email test@test.com
git config user.name windsunmoon
git config user.email test@test.com