1.git安装后设置《用户名》和《邮箱》;查看自身《用户名》和《邮箱》
//设置
$ git config --global user.name "yangkang" $ git config --global user.email "kang.yang@arvato.com" //查看 $ git config user.name yangkang $ git config user.email kang.yang@arvato.com
2.创建工作区间,初始化工作区
//查看当前路径 $ pwd /c/Users/YANG295/Desktop$ git init Initialized empty Git repository in C:/Users/YANG295/Desktop/.git/
3.添加文件到缓存区,commit提交
git add . :他会监控工作区的状态树,使用它会把工作时的所有变化提交到暂存区,包括文件内容修改(modified)以及新文件(new),但不包括被删除的文件。git add -u :他仅监控已经被add的文件(即tracked file),他会将被修改的文件提交到暂存区。add -u 不会提交新文件(untracked file)。(git add --update的缩写)git add -A :是上面两个功能的合集(git add --all的缩写)
//添加,可add 多个文件,一次commit提交 $ git add demo.txt //提交 $ git commit -m "本次提交的描述"
4.查看git状态
//查看状态
$ git status
5.比较工作区修改前后文件,修改未add
$ git diff demo.txt
6.git查看日志log和reflog
//git reflog 可以查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作) $ git reflog 58b8ed8 (HEAD -> master) HEAD@{0}: commit: 测试修改文件查看区别 6c43baa (origin/master) HEAD@{1}: merge b1: Fast-forward//git log 命令可以显示所有提交过的版本信息;可以加上参数 --pretty=oneline,只会显示版本号和提交时的备注信息 $ git log commit 58b8ed8f78cd8d52281a28aec6602e03ba82b7a2 (HEAD -> master) Author: yangkang <kang.yang@arvato.com> Date: Thu Nov 8 14:23:06 2018 +0800测试修改文件查看区别$ git log --pretty=oneline 58b8ed8f78cd8d52281a28aec6602e03ba82b7a2 (HEAD -> master) 测试修改文件查看区别
7.git版本回退(需要reflog知晓commitid的前7位)注意是--hard
//$ git reflog 58b8ed8 (HEAD -> master) HEAD@{0}: commit: 测试修改文件查看区别 6c43baa (origin/master) HEAD@{1}: merge b1: Fast-forward a289a45 HEAD@{2}: checkout: moving from master to master a289a45 HEAD@{3}: checkout: moving from b1 to master 6c43baa (origin/master) HEAD@{4}: commit: 创建分支并修改了index.html//回退到commitid a289a45 $ git reset --hard a289a45 a289a45 (HEAD -> master) HEAD@{0}: reset: moving to a289a45 58b8ed8 HEAD@{1}: reset: moving to 58b8ed8 58b8ed8 HEAD@{2}: commit: 测试修改文件查看区别 6c43baa (origin/master) HEAD@{3}: merge b1: Fast-forward a289a45 (HEAD -> master) HEAD@{4}: checkout: moving from master to master a289a45 (HEAD -> master) HEAD@{5}: checkout: moving from b1 to master 6c43baa (origin/master) HEAD@{6}: commit: 创建分支并修改了index.html
8.取消工作区修改(实际上使用版本库文件替换)
$ git checkout --demo.txt
9.取消暂存区文件的修改;注意是HEAD
$ git reset HEAD demo.txt
10.删除版本库中文件
//git rm和git add都属于对暂存区的操作
$ git rm demo.txt$ git commit -m 删除demo文本
11.添加远程仓库并push 拖下远程代码到问题pull
//添加远程仓库地址 $ git remote add origin http://www.gitlab.com/yangjingkang/test.git//push 第一次提交,加入 -u参数 $ git push -u origin master
//拖下远程代码 git pull <远程主机名> <远程分支名>:<本地分支名> eg:git pull origin master:brantest将远程主机origin的master分支拉取过来,与本地的brantest分支合并。后面的冒号可以省略:git pull origin mastergit pull命令的作用是:取回远程主机某个分支的更新,再与本地的指定分支合并。一句话总结git pull和git fetch的区别:git pull = git fetch + git merge
12.从远程仓库克隆
//后面可再跟名字作为。新git库
$ git clone http://www.gitlab.com/yangjingkang/test.git newGit
13.创建新的分支
//创建并切换到分支 $ git checkout -b dev//查看git下所有分支,*表示当前分支 $ git branch * dev master//$ git checkout -b dev等于如下两条命令 $ git branch dev //创建分支 dev $ git checkout dev //切换到 dev 分支
14.合并分支(合并前先切换回主分支master,才能进行合并)
//切换回主分支 $ git checkout master$ git branch dev * master//将dev分支合并到主分支master $ git merge dev
15.删除分支
//删除dev分支
$ git branch -d dev
16.解决冲突(主从分支对同一个文件同一处代码进行了修改并commit,合并时报failed;需手动调整重新提交)
17.查看分支合并图
$ git log --graph
18.分支策略
分支策略 实际开发原则如下: 1.master仅用来发布新版本(把dev分支合并到master,再发布新版本) 2.开发人员都在dev分支上干活,每个人都有自己的分支,定期向dev分支合并即可。
19.git stash 暂存当前编辑(必须把修改的文件git add后,才可以git stash;
git stash 可用来暂存当前正在进行的工作, 比如想pull 最新代码, 又不想加新commit, 或者另外一种情况,为了fix 一个紧急的bug, 先stash, 使返回到自己上一个commit, 改完bug之后再stash pop, 继续原来的工作。)
//暂存 $ git stash //查看保存清单 $ git stash list //返回暂存 $ git stash pop
20.git 查看远程仓库信息
$ git remote
origin
21.推送分支(会推送到远端对应的分支上)
语法:$ git push <远程主机名> <本地分支名>:<远程分支名> 若省略远程分支,代表将本地当前分支推送到远端对应分支 git push origin master // 推送到远端的master git push origin dev //推送到远端的dev 什么样的分支需要推送到远端?我认为凡是需要大家共享的分支就需要push到远端
22. 从远程仓库克隆
$ git clone git@github.com:jasondong-1/gitpractice.git //git clone 默认只会把远端的master克隆下来 $ git branch * master
23.获取远端其他分支
$ git checkout -b dev origin/dev //现在有了对应的dev分支 $ git branch * devmaster
24.两人同时修改了同一份文件向远端push冲突的解决
$ git push origin dev //git 建议push 之前先pull (拉取同步)//或者是手动处理掉 //解决冲突后,重新add commit
25.git打标签(人类可以识别的标志)
git tag v0.1 33dd7af //33dd7af是commit-id 或 $ git tag -a v0.2 -m "stable edition" e47dc70查看 tag git tag
26.操作标签
git push origin <tagname>可以推送一个本地标签; git push origin --tags可以推送全部未推送过的本地标签; git tag -d <tagname>可以删除一个本地标签; git push origin :refs/tags/<tagname>可以删除一个远程标签。
27..gitignore 可以忽略.gitignore 文件中的文件
# Python: *.py[cod] *.so *.egg *.egg-info dist build
28.克隆当个分支项目
git clone -b lankou2 http://www.gitlab.com/CRM_PRODUCT/CODE/ec_product.git //clone lankou2分支
29.克隆多个分支项目
如果要clone所有分支,也可以这样解决这个问题:
找一个干净目录,假设是 iview_project
cd iview_project //切换到指定目录 git clone https://github.com/iview/iview-admin.git //克隆项目
这样在 iview_project 目录下得到一个 iview-admin 子目录
cd iview-admin //切换到项目目录 git branch -a //列出所有分支名称如下: * 号表示当前分支 * dev remotes/origin/HEAD -> origin/dev remotes/origin/desktop remotes/origin/dev remotes/origin/gh-pages remotes/origin/master remotes/origin/template
说明: origin/template, origin是远程仓库名,template是远程仓库的一个分之,由上结果可以看出,远程仓库origin还有desktop、dev、gh-pages、template、master等分支。
接下来,可以在本地新建分支并与远程仓库的分支进行关联了
git checkout -b template origin/template // 作用是checkout远程仓库origin的分支template,在本地起名为template分支,并切换到本地的template分支 git checkout -b desktop origin/desktop // 作用参见上一步解释
//第一次切换分支,就用上面命令,如果本地已经存在了对应的分支可以直接: git checkout dev // 切换回dev分支,并开始开发。//查看分支命令 git branch -a //查看所有分支 git branch -r //查看远程分支