提供练习的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 mergegit fetch origingit 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 --tagsgit 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下来
