git常用操作 - yiyixiaozhi/readingNotes GitHub Wiki
title: git命令的使用 date: 2015-11-1 22:13:10 description: git命令使用小记 categories:
- 工具
#git 常用命令
文件的状态变化周期
检查当前文件状态
$ git status
跟踪新文件
$ git add README //READ ME进入已暂存状态
状态简览
$ git status -s
M README
MM Rakefile
A lib/git.rb
M lib/simplegit.rb
?? LICENSE.txt
忽略文件
.gitignore
$ cat .gitignore
*.[oa] //忽略所有以 .o 或 .a 结尾的文件
*~ //忽略所有以波浪符(~)结尾的文件
查看已暂存和未暂存的修改
git diff
git diff --cached //查看已暂存的将要添加到下次提交里的内容
提交更新
git commit -m "Story 182: Fix benchmarks for speed"
git commit -am "Story 182: Fix benchmarks for speed" //跳过使用暂存区域
从已跟踪文件清单中移除,从暂存区域移除
下一次提交时,该文件就不再纳入版本管理了.
$ git rm PROJECTS.md
$ git rm --cached README //从暂存区域移除),但保留在当前工作目录中
移动(重命名)文件
$ git mv file_from file_to
查看提交历史
$ git log
取消暂存的文件
$ git reset HEAD CONTRIBUTING.md
撤消对文件的修改
$ git checkout -- CONTRIBUTING.md
查看远程仓库
$ git remote -v
添加远程仓库
git remote add pb https://github.com/paulboone/ticgit
从远程仓库中抓取与拉取
git fetch 命令会将数据拉取到你的本地仓库 - 它并不会自动合并或修改你当前的工作。 当准备好时你必须手动将其合并入你的工作。
git pull 通常会从最初克隆的服务器上抓取数据并自动尝试合并到当前所在的分支。
推送到远程仓库
git push [remote-name] [branch-name]
#git 分支
分支创建
$ git branch testing //创建分支
$ git checkout -b iss53 //新建一个分支并同时切换到那个分支上
$ git checkout master //切换分支
//合并hotfix到master分支, git commit 来完成合并提交
$ git checkout master
$ git merge hotfix
//删除分支
git branch -d iss53
//查看每一个分支的最后一次提交
$ git branch -v
//新建本地分支,推送到远程,然后设置跟踪关系
$ git branch testing2
$ git push origin testing2:testing2-remote
$ git checkout testing2
$ git branch --set-upstream-to=origin/testing2-remote
//本地新建一个远程同名分支并跟踪
$ git checkout -t origin/testing-remote
从原地址克隆一份裸版本库。 语法:
git clone --bare <repository> <directory.git>
例如:
git clone --bare [email protected]:yiyixiaozhi/BookCode.git
然后到新的 Git 服务器上创建一个目标项目(准备迁移过去)。比如新项目地址是:
[email protected]:bxh7425014/BookCode.git
以镜像推送的方式上传代码到github服务器上,如下:
$ cd BookCode.git/
$ git push --mirror [email protected]:bxh7425014/BookCode.git
2016-09-16
项目代码分为3个特性分支,命名规则为: 开发版本:特性名_master 测试版本:特性名_test_branch 正式版本:特性名_release_branch 注:如果是默认项目,特性名可以省略。否则需要加上对应的特性名称,比如当前在当前项目基础上给某单位/组织/地域开发项目时,特性名前缀为对应的拼音,首字母大写,比如给西安开发某项目,分支名称为Xian_**_**。
Fork之后,个人名下就可以看到Fork出来的仓库了,对应的分支也能看到:
找到地址,clone代码下来:
在默认的master分支,修改Fork出来的本地文件:
Commit后,push刚才的修改到OSChina个人名下的master分支:
刷新OSChina个人名下仓库,可以看到对应的ReadMe文件已经修改了,点击Pull Request:
制定源分支、目标分支、代码审查人员,
PR提交给组织了,上面我们指定了“刘超”审查代码,“卞晓辉”进行测试。可以看到状态是未审核,未测试。
对应的人员会收到审查和测试通知,如下:
审查和测试通过后,可以接受代码合并了,如下:
合并后,如果还有一次反悔的机会,慎重使用:
可以看到对应的修改已经更新到主仓库上(XAVito/HelloWorld)。如下:
Fork仓库同步主仓库的最新代码
主仓库主分支更新了内容,如下:
Fork仓库同步主仓库的更新:
更新后查看差异(注意当前在Fork仓库的master分支上),有如下两种方式:
测试在Fork出来的仓库master分支做增量修改并提交(预期会产生冲突)。如下:
试用merge,产生冲突,如下:
解决冲突,并提交代码到Fork仓库:
但与此同时主仓库也前进了,如下:
Fork仓库提交更新到主仓库(PR审查代码勾选上),提交PR后,主仓库收到更新通知了::
审查没有问题,通过,发现和主仓库的修改有冲突了,如下:
好办,解决冲突:
注:对于冲突的代码,代码审核人员必须要大家解决冲突,对于存在冲突的PR,关闭PR并评论。
进一步学习
合并最近的多次提交
参考地址
变基
分支是很让人讨厌的,因为代码提交历史不够整洁。也有办法让他归到一个分支上去,使用rebase。方法请参考【变基】。