Git命令使用
-
前言
- 在使用Git命令之前都使用可视化工具SourceTree操作git,现在需要Git Android源码了,就需要掌握Git命令使用。 没有办法学习吧,也随便把逼格提高下。
-
Git安装
-
安装
- 官方安装方法
- brew命令
brew cask install git
-
配置:每次Git提交时都会引用这两条信息,说明是谁提交了更新,所以会随更新内容一起被永久纳入历史记录
- 配置用户名
$ git config --global user.name 用户名
- 配置用户邮箱
$ git config --global user.email 邮箱
配置好通过命令
$ git config --list
查看配置信息,当你想针对特定项目使用不同的用户名称与邮件地址时,可以在那个项目目录下运行没有 --global 选项的命令来配置。
-
-
初始化
-
本地新建仓库
- 初始化的 Git 仓库中所有的必须文件
$ git init
从服务器端拉取,指定文件目录下执行
$ git clone 项目地址 $ git clone https://github.com/libgit2/libgit2
或者克隆远程仓库且自定义本地仓库的名字
$ git clone 项目地址 自定义本地仓库名字 $ git clone https://github.com/libgit2/libgit2 mylibgit
-
-
忽略文件,项目一般的忽略文件都在.gitignore中,如果没有自己可以新建。
$ cat .gitignore *.[oa] *~
打开.gitignore文件,第一行告诉 Git 忽略所有以 .o 或 .a 结尾的文件。第二行告诉 Git 忽略所有以波浪符(~)结尾的文件
- 文件 .gitignore 的格式规范如下:
- 所有空行或者以#开头的行都会被Git忽略。
- 可以使用标准的glob模式匹配。
- 匹配模式可以以(/)开头防止递归。
- 匹配模式可以以(/)结尾指定目录。
- 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。
所谓的 glob 模式是指 shell 所使用的简化了的正则表达式。 星号()匹配零个或多个任意字符;[abc] 匹配任何一个列在方括号中的字符(这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c);问号(?)只匹配一个任意字符;如果在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配(比如 [0-9] 表示匹配所有 0 到 9 的数字)。 使用两个星号() 表示匹配任意中间目录,比如a/**/z 可以匹配 a/z, a/b/z 或 a/b/c/z等。
GitHub 有一个十分详细的针对数十种项目及语言的 .gitignore 文件列表,你可以在 https://github.com/github/gitignore找到它.
-
状态,查看当前分支的状态情况,并简单显示当前分支的变化情况
$ git stauts
先了解下分支有哪些状态。
所以你每次work上操作了,要执行add,commit,最后同步服务器pull -
差异对比
$ git diff
若要看已经暂存起来的文件和上次提交时的快照之间的差异,可以用
$ git diff --cached
表示查看已经 add 进暂存区但是尚未 commit 的内容同最新一次 commit 时的内容的差异。
-
分支提交
$ git commit
然后就会跳转编辑页面,你需要输入你commit的内容 还有另外一种简写commit内容
$ git commit -m "提交内容简述"
- 跳过使用暂存区域:add和commit两步一起执行
$ git commit -a
-a后面也可以添加其他操作参数,如
$ git commit -a -m "提交内容简述"
-
移除文件(待补充)
$ git rm
-
移动文件
$ git mv
-
$ git log
我们常用 -p 选项展开显示每次提交的内容差异,用 -2 则仅显示最近的两次更新:
$ git log -p -2
-
- 查看当前的远程库
$ git remote
- 从远程仓库抓取数据
$ git fetch [remote-name]
同步远程仓库数据
$ git fetch origin
会抓取从你上次克隆以来别人上传到此远程仓库中的所有更新(或是上次 fetch 以来别人提交的更新)。有一点很重要,需要记住,fetch 命令只是将远端的数据拉到本地仓库,并不自动合并到当前工作分支,只有当你确实准备好了,才能手工合并。
- 推送数据到远程仓库
git push [remote-name] [loca-branch]:[remote-branch]
例:git push origin master:master
````
如果要把本地的 master 分支推送到 origin 服务器上(再次说明下,克隆操作会自动使用默认的 master 和 origin 名字),可以运行下面的命令
````
$ git push origin master
````
- 查看远程仓库信息
````
$ git remote show [remote-name]
````
例如
````
$ git remote show origin
````
-
$ git tag
-
- 创建分支
$ git branch iss53
- 切换分支
$ git checkout iss53
- 要新建并切换到该分支,运行 git checkout 并加上 -b 参数:
$ git checkout -b iss53 Switched to a new branch 'iss53'
- 合并:用 git merge 命令来进行合并:
$ git checkout master $ git merge hotfix
切换到master分支,master分支合并hotfix分支。
-
分支的衍合:把一个分支中的修改整合到另一个分支的办法有两种:merge 和 rebase(译注:rebase 的翻译暂定为“衍合”,大家知道就可以了。)。有了 rebase 命令,就可以把在一个分支里提交的改变移到另一个分支里重放一遍。
$ git checkout experiment $ git rebase master First, rewinding head to replay your work on top of it... Applying: added staged command
数据缓存
$git config --global core.excludesfile ~/.gitignore
- git fetch
git fetch && git checkout -b develop origin/develop
拉取并切换到远端分支develop
//git拉取远程分支到本地分支或者创建本地新分支
git fetch origin branchname:branchname
- git add -A 添加所有修改,删除文件
- 查看远程分支
git branch -a
- 拉取远端分支到本地
git fetch origin remoteBranchName(远程分支名):localBranchName(本地分支名)
- 缓存修改数据
git stash save “标签名”
- 参考书[ProGit](http://iissnan.com/progit/html/zh/ch1_3.html)