Git
Git基本工作流程
- 在工作目录中修改某些文件
- 对这些修改了的文件作快照,并保存到暂存区域
- 提交更新,将保存在暂存区域的文件快照转储到git目录中
开始使用Git
一个典型git命令的构成:git 子命令 --选项
- git init
- git add
- git status
- git commit
- git help
可以使用“git help 子命令”来查看子命令的帮助
Git常用命令
- git clone
- git pull
与git clone不同,git pull可以从任意一个git库获取某个分支的内容。
用法:git pull username@ipaddr:远端repository名 远端分支名:本地分支名
这条命令将从远端git库的远端分支名获取到本地git库的一个本地分支中。其中,如果不写本地分支名,则默认pull到本地当前分支。
需要注意的是,git pull也可以用来合并分支。和git merge的作用相同。因此,如果你的本地分支已经有内容,则git pull会合并这些文件,如果有冲突会报警。
- git fetch [remote-name]
从远程仓库抓取数据到本地
git fetch origin会抓取从你上次克隆以来别人上传到此远程仓库中的所有更新(或是上次fetch以来别人提交的更新)。
有一点很重要,fetch命令只是将远端的数据拉到本地仓库,并不自动合并到当前工作分支,只有当你确实准备好了,才能手动合并。
如果设置了某个分支用于跟踪某个远程仓库的分支,可以使用git pull 命令自动抓取数据下来,然后将远端分支自动合并到
本地仓库中当前分支。
实际上,默认情况下 git clone 命令本质上就是自动创建了本地的 master 分支用于跟踪远程仓库中的 master 分支(假设远程仓库中确实有 master 分支)。所以我们一般运行 git pull ,目的都是要从原始克隆的远端仓库中抓取数据后,合并到工作目录中当前分支。
- git init
初始化git - git add
三种用途:- 可以用它开始跟踪新文件
- 或者把已跟踪的文件放到暂存区
- 还能用于合并时把有冲突的文件标记为已解决状态等
- git rm
从暂存区域移除,并连带从工作目录中删除指定的文件 - git rm -f
如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f - git status
检查当前文件状态 - git mv
Git并不跟踪文件移动的操作,如果在Git中重命名了某个文件,仓库中存储的元数据并不会体现出这是一次改名操作,不过Git非常聪明,它会推断究竟发生了什么。 - git reset HEAD < file >…
取消已经暂存的文件 - git checkout – < file >…
取消对文件的修改,把之前版本的文件复制过来重写此文件 - git clean
删除未暂存的文件
任何已经提交到Git的都可以被恢复,所以,你可能失去的数据,仅限于没有提交过的,对Git来说他们就像从未存在过一样。
- git commit
提交修改
注意:必须按照要求的格式认真填写提交日志! - git commit --amend
修改最后一次提交,有时候我们提交完了才发现漏掉了几个文件没有加,或者提交信息写错了,此命令将使用当前的暂存区域快照提交。 - git diff
查看尚未暂存的文件更新了哪些部分(和暂存区中) - git diff --cached
看已经暂存起来的文件和上次提交时的快照之间的差异 - git diff SHA1…SHA2
查看两次提交之间的区别
单单 git diff 不过是显示还没有暂存起来的改动,而不是这次工作和上次提交之间的差异
- git log
查看修改历史信息 - git log --graph
显示图形表示的分支合并历史 - git log --since=2.weeks
列出所有最近两周内的提交 - git branch
创建和删除及给出当前所有分支的清单 - git branch [-d | -D]
删除分支 - git checkout [branch] [-b new_branch]
切换到指定分支,切换分支时,当前工作目录必须是干净的状态
一些合并代码的git命令
- git merge < other-branch >
将other-branch分支merge到当前分支 - git rebase < other-branch >
将other-branch分支rebase到当前分支 - git cherry-pick < commit-id >
将某个提交拿到当前分支中
一些关于远程库的git命令
- git remote show [remote-name]
查看远程仓库信息 - git ls-remote [remote-name]
查看远程仓库中各分支最新更新 - git remote add < name > <远程仓库URL>
增加远程仓库 - git remote rm < name >
删除远程仓库 - git remote rename < old > < new >
远程仓库的删除和重命名
注意:对远程仓库的重命名,也会使对应的分支名称发生变化
Repo
使用Repo的标准工作流程
- repo init -u amazon@code.thunderst.com:amazon/manifest.git -b amazon
- repo sync
- repo start Amazon <project | --all>
- cd your_project_dir
- git status
- git commit
- repo upload .
repo常用命令
- repo status
查看整个worktree的状态:是否clean,哪些库有什么样的变动等 - repo branches
查看本地worktree上的工作分支情况 - repo abandon < branch_name > {<git库名> | --all}
删除指定分支(可以是特定git库,也可以是全体),可视为repo start 的逆操作 - repo upload [< project >…] | [–replace < project >]
向gerrit提交本地的修改