提供练习的Demo地址:Demo项目地址
1、Git本地操作流程
修改工作区中文件(创建或编辑文件)->保存到暂存区(git add .
或git add fileName
)->提交到本地仓库(git commit -m 'commit description'
)。
2、Git基本配置
设置全局的用户信息:
git config --global user.name "名字"
git config --global user.email "邮箱地址"
将
--global
去掉,可以为单个项目设置用户信息。
3、本地仓库操作
-
操作流程
- 创建新仓库
- 创建、删除、修改文件
- 缓存文件
- 提交文件到本地
- 反复2-4步骤。
mkdir gitTest 创建gitTest文件夹 cd gitTest git init 初始化git仓库 vi README.md 创建README.md文件 git add . 添加到暂存区 git commit -m '创建README.md文件'
-
git log
查看提交历史日志 -
git status
查看提交状态 -
git reset HEAD file
取消暂存区的文件 -
git commit —amend
修改上一次提交 -
git commit --amend --author='new_user_name <new@example.com>'
修改最后一次提交的用户名和邮箱 -
git checkout file
撤销对工作区修改;这个命令是以最新的存储时间节点(add和commit)为参照,覆盖工作区对应文件file;这个命令改变的是工作区。
4、远程仓库操作
1、克隆远程仓库
-
git clone <url>
克隆远程仓库该命令会在本地主机生成一个目录,与远程主机的版本库同名。如果要指定不同的目录名,可以将目录名作为git clone命令的第二个参数。
-
git clone <url> <本地目录名>
克隆远程仓库且指定本地目录名 -
git remote
列出所有远程主机 -
git remote -v
查看远程主机的网址 -
git clone -o <hostname> <url>
克隆的时候,指定远程主机名为hostname克隆版本库的时候,远程主机自动被Git命名为origin。如果想用其他的主机名,需要用git clone命令的
-o
选项指定。 -
git remote show <origin>
查看origin主机的详细信息 -
git remote add <主机名> <url>
添加远程主机 -
git remote rm <主机名>
删除远程主机 -
git remote rename <原主机名> <新主机名>
重命名远程主机 -
git fetch <远程主机名>
将某个远程主机的更新,全部取回本地 -
git fetch <远程主机名> <分支名>
取回特定分支的更新,可以指定分支名
2、分支操作
-
git branch
查看本地所有分支 -
git branch -a
查看所有的分支 -
git branch -r
查看远程所有分支 -
git checkout -b newBranch origin/master
在origin/master的基础上,表示创建+切换到新分支git checkout
加上-b
参数相当于:- git branch newBranch
- git checkout newBranch
-
git branch newBranch
创建新分支 -
git checkout newBranch
切换到本地newBranch分支 -
git branch -d newBranch
删除newBranch分支(需先切换到其他分支才能删除) -
git branch -m Dev Develop
重命名分支Dev为Develop -
git merge origin/master
在本地分支上合并远程分支 -
git rebase origin/master
在本地分支上合并远程分支
3、git pull(取回远程主机某个分支的更新,再与本地的指定分支合并)
-
git pull <远程主机名> <远程分支名>:<本地分支名>
git pull origin next:master
取回origin主机的next分支,与本地的master分支合并git pull origin next
取回origin/next分支,再与当前分支合并,相当于git fetch
,再git merge
git fetch origin
git merge origin/next
-
git branch --set-upstream master origin/next
指定master分支追踪origin/next分支手动建立追踪关系,当前分支与远程分支存在追踪关系,git pull就可以省略远程分支名。
-
git pull origin
本地的当前分支自动与对应的origin主机”追踪分支”(remote-tracking branch)进行合并如果当前分支只有一个追踪分支,连远程主机名都可以省略。
-
git pull
当前分支自动与唯一一个追踪分支进行合并 -
git pull --rebase <远程主机名> <远程分支名>:<本地分支名>
如合并需要采用rebase模式,可以使用--rebase
选项
4、git push(将本地分支的更新,推送到远程主机)
-
git push <远程主机名> <本地分支名>:<远程分支名>
- 注意,分支推送顺序的写法是<来源地>:<目的地>,所以git pull是<远程分支>:<本地分支>,而git push是<本地分支>:<远程分支>。
- 如果省略远程分支名,则表示将本地分支推送与之存在”追踪关系”的远程分支(通常两者同名),如果该远程分支不存在,则会被新建。
-
git push origin master
将本地的master分支推送到origin主机的master分支。如果后者不存在,则会被新建。 -
git push origin :master
等同于git push origin --delete master
表示删除origin主机的master分支。如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支。
-
git push origin
将当前分支推送到origin主机的对应分支如果当前分支与远程分支之间存在追踪关系,则本地分支和远程分支都可以省略。
-
git push
如果当前分支只有一个追踪分支,那么主机名都可以省略- 不带任何参数的git push,默认只推送当前分支,这叫做simple方式。
- 此外,还有一种matching方式,会推送所有有对应的远程分支的本地分支。
- Git 2.0版本之前,默认采用matching方法,现在改为默认采用simple方式。
- 如果要修改这个设置,可以采用git config命令。
git config --global push.default matching
或者:
git config --global push.default simple
-
git push -u origin master
将本地的master分支推送到origin主机,同时指定origin为默认主机如果当前分支与多个主机存在追踪关系,则可以使用-u选项指定一个默认主机,这样后面就可以不加任何参数使用git push。
-
git push --all origin
将所有本地分支都推送到origin主机不管是否存在对应的远程分支,将本地的所有分支都推送到远程主机,这时需要使用
--all
选项。 -
git push --force origin
使用--force
选项,结果导致在远程主机产生一个”非直进式”的合并(non-fast-forward merge)。除非你很确定要这样做,否则应该尽量避免使用--force
选项。 -
git push origin --tags
git push不会推送标签(tag),除非使用--tags
选项。
5、git tag(查看现有所有标签)
-
git tag -l 'V0.1.*'
显示符合条件的Tag标签 -
git tag -a V1.0.2 -m 'my version is V1.0.2, Debug environment'
新建含备注的标签标记当前HEAD使用git tag命令。标记名称(版本)前加上-a选项,使用-m选项,并提供标签备注信息。
-
git tag -a v1.2.0 <commitId>
给指定的commit打Tag,commitId可通过git log
获取 -
git show V1.0.2
显示标签详情 -
git push origin --tags
提交标签 -
git tag -d V1.0.2
删除本地指定tag -
git push origin :refs/tags/tagVersion
删除远程主机tag
git tag分为两种类型:轻量tag和附注tag。
git tag v0.1.2-light
创建轻量Taggit tag -a v0.1.2 -m '0.1.2版本'
创建附注Tag
轻量tag是指向提交对象的引用,附注Tag则是仓库中的一个独立对象。建议使用附注Tag。
6、非常用命令
git checkout --track origin/dev 切换到远程dev分支
git rm 文件名(包括路径) 从git中删除指定文件
git config --list 看所有用户
git ls-files 看已经被提交的
git rm [file name] 删除一个文件
git commit -a 提交当前repos的所有的改变
git commit -v 当你用-v参数的时候可以看commit的差异
git commit -a -a是代表add,把所有的change加到git index里然后再commit
git commit -a -v 一般提交命令
git diff 查看尚未暂存的更新
git rm a.a 移除文件(从暂存区和工作区中删除)
git rm --cached a.a 移除文件(只从暂存区中删除)
git rm -f a.a 强行移除修改后文件(从暂存区和工作区中删除)
git diff --cached 或 $ git diff --staged 查看尚未提交的更新
git stash push 将文件给push到一个临时空间中
git stash pop 将文件从临时空间pop下来