Git每天都会用到的20个命令(译官网资料)

官网链接 https://git-scm.com/docs/giteveryday 文中多次提到上游,我个人的理解是你的上一级代码库。就好像SVN的服务端代码。

定义

giteveryday — Everyday Git是Git最常用命令的最小集合

概要

有20个命令

描述

为方便描述,Git用户可以广泛地分为四类。

  • 个人开发者(独立) 这些命令对于任何人的代码提交都是重要的,即使是独立开发者也不例外。

  • 如果您与其他人合作,您还需要“ 个人开发者(合作开发)”部分中列出的命令。

  • 运维管理人员除了上述之外,还需要学习更多的命令。

  • 存储库管理命令适用于负责Git存储库的管理和馈送的系统管理员。

个人开发者(独立)

独立的个人开发人员不会与其他人交换补丁,可以使用以下命令在单个存储库中单独使用。

  • git-init [1]创建一个新的存储库。
  • git-log [1]看看发生了什么。
  • git-checkout [1]和git-branch [1]切换分支。
  • git-add [1]来管理索引文件。
  • git-diff [1]和git-status [1],看看你在做什么。
  • git-commit [1]推进当前分支。
  • git-reset [1]和git-checkout [1](使用路径名参数)来撤消更改。
  • git-merge [1]在本地分支之间合并。
  • git-rebase [1]维护主题分支。
  • git-tag [1]标记一个已知的点。

例子

使用tarball作为新存储库的起点。

$ tar zxf frotz.tar.gz
$ cd frotz
$ git init
$ git add。(1)
$ git commit -m "import of frotz source tree."
$ git tag v2.43 (2)
  1. 添加当前目录下的所有内容。
  2. 增加一个简洁明了的提交注释信息。
创建一个主题分支和开发。
$ git checkout -b alsa-audio (1)
$ edit/compile/test
$ git checkout -- curses/ux_audio_oss.c (2)
$ git add curses/ux_audio_alsa.c (3)
$ edit/compile/test
$ git diff HEAD (4)
$ git commit -a -s (5)
$ edit/compile/test
$ git diff HEAD^ (6)
$ git commit -a --amend (7)
$ git checkout master (8)
$ git merge alsa-audio (9)
$ git log --since='3 days ago' (10)
$ git log v2.43.. curses/ (11)
  1. 创建一个新的主题分支。
  2. 恢复你的笨拙的变化curses/ux_audio_oss.c
  3. 你需要告诉Git是否添加了一个新的文件; 如果您git commit -a以后再对文件进行移除和修改操作,Git会告知你。
  4. 看看你正在做什么改变。
  5. 提交你已经测试过并打过标记的内容。
  6. 查看所有更改,包括以前的提交。
  7. 修改先前的提交,添加所有新的更改,使用您的原始消息。
  8. 切换到主分支。
  9. 将主题分支合并到主分支中。
  10. 查看提交日志; 可以组合其他形式来限制输出,并包括-10(最多显示10个提交) --until=2005-12-10等。
  11. 只查看curses/ 目录中的内容的更改或创建,自从v2.43开始实施。

个人开发者(合作开发)

作为组织项目参与者的开发人员需要了解如何与他人进行沟通,并且除了独立开发人员所需的命令外,还使用这些命令。

  • git-clone [1]从代码仓库下载代码到本地。
  • git-pull [1]和git-fetch [1]从“origin”保持与库中代码版本一致。
  • git-push [1]分享代码库,如果你接受CVS风格的Repo管理工作流程。
  • git-format-patch [1]准备电子邮件提交,如果你接受Linux内核风格的公开论坛工作流程。
  • git-send-email [1]发送您提交的电子邮件,without corruption by your MUA.(这句没理解)。
  • git-request-pull [1]创建上游代码库的更改摘要。

例子

克隆上游并对其进行处理。并提交更改到上游。
$ git clone git://git.kernel.org/pub/scm/.../torvalds/linux-2.6 my2.6
$ cd my2.6
$ git checkout -b mine master (1) 
$ edit / compile / test; git commit -a -s (2) 
$ git format-patch master (3) 
$ git send-email --to =“person <email@example.com>”00 * .patch (4) 
$ git checkout master (5 ) 
$ git pull (6) 
$ git log -p ORIG_HEAD .. arch / i386 include / asm-i386 (7) 
$ git ls-remote --heads http://git.kernel.org/.../jgarzik/ libata-dev.git (8) 
$ git pull git://git.kernel.org/pub/.../jgarzik/libata-dev.git ALL (9) 
$ git reset --hard ORIG_HEAD (10) 
$ git gc (11)
  1. 从主机检出一个新mine的分支。
  2. 根据需要重复操作。
  3. 从你的分支中提取补丁(分枝是相对于master而言的)。
  4. 发送电子邮件。
  5. 返回到master,看看有什么新的变化。
  6. git pullorigin默认提取,合并到当前分支。
  7. pull代码后后,看看上次修改之后的修改,只关注我们感兴趣的地方。
  8. 检查外部存储库中的分支名称(如果不知道)。
  9. ALL特定的存储库中获取特定的分支并将其合并。
  10. 恢复pull。
  11. 将pull版本后的冗余信息恢复。
    推入(push)到另一个存储库。
    
    satellite$ git clone mothership:frotz frotz (1)
    satellite$ cd frotz
    satellite$ git config --get-regexp '^(remote|branch)\.' (2)
    remote.origin.url mothership:frotz
    remote.origin.fetch refs/heads/*:refs/remotes/origin/*
    branch.master.remote origin
    branch.master.merge refs/heads/master
    satellite$ git config remote.origin.push \
       +refs/heads/*:refs/remotes/satellite/* (3)
    satellite$ edit/compile/test/commit
    satellite$ git push origin (4)

mothership$ cd frotz mothership$ git checkout master mothership$ git merge satellite/master (5)

 20170913存档
 1. Master主机在您的主目录下有一个frotz存储库; 从它clone代码,以在本地PC上启动一个存储库。
2. 克隆默认设置这些配置变量。安排`git pull`将母机分支机构存放到本地`remotes/origin/*`远程分支机构。
3. 安排`git push`将所有当地分支机构推到Master相应的分支代码。
4. 将我们所有的工作都push到`remotes/satellite/*` 在母机上的远程跟踪分支上。您可以将其用作备份方法。同样,你可以假装那个“你”获得的Master(当访问是单面的时候很有用)。
5. 在Master主机上,将客户开发机上完成的工作合并到主干代码。

分支特定标签。

$ git checkout -b private2.6.14 v2.6.14 (1) $ edit/compile/test; git commit -a $ git checkout master $ git cherry-pick v2.6.14..private2.6.14 (2)

1. 根据一个众所周知的的标签创建一个私人分支。(尽管1众所周知的名字显得有些俗气)
2. 转发端口所有更改`private2.6.14`分支到master分支没有正式的“合并”。
`git format-patch -k -m --stdout v2.6.14..private2.6.14 | git am -3 -k`
另一个参与者提交机制正在使用`git request-pull`或拉取请求机制(例如,在GitHub(www.github.com)上使用的 机制来通知您的上游您的贡献。

###合并补丁
收到别人的补丁建议,可以使用以下命令处理。

可以使用`git request-pull`在GitHub(www.github.com)上回复处理这些建议,将其合并到主干代码或建立一个参与者的分支代码库。

git-am [1]应用别人发送来的补丁。 git-pull [1]合并你信任的补丁。 git-format-patch [1]给发送补丁的人提意见。 git-revert [1]撤消不好的补丁。 git-push [1] to publish the bleeding edge. 啥意思?

例子
合并补丁的操作记录

$ git status (1) $ git branch --no-merged master (2) $ mailx (3) & s 2 3 4 5 ./+to-apply & s 7 8 ./+hold-linus & q $ git checkout -b topic/one master $ git am -3 -i -s ./+to-apply (4) $ compile/test $ git checkout -b hold/linus && git am -3 -i -s ./+hold-linus (5) $ git checkout topic/one && git rebase master (6) $ git checkout pu && git reset --hard next (7) $ git merge topic/one topic/two && git merge hold/linus (8) $ git checkout maint $ git cherry-pick master~4 (9) $ compile/test $ git tag -s -m "GIT 0.99.9x" v0.99.9x (10) $ git fetch ko && for branch in master maint next pu (11) do git show-branch ko/$branch $branch (12) done $ git push --follow-tags ko (13)

1. 看看你手头正在开发哪些功能。
2. 看有哪些还没有合并的分支代码。
3. 看有没有重要的邮件。
4. 批准可以合并使用的补丁。
5. 根据需要创建主题分支并再次反馈改动。
6. 将可以合并的分支代码rebase并发布,作为稳定分支的一部分。
7. 从下次开始,每次都要重启pu。
8. and bundle topic branches still cooking.???
9. `backport`一个关键的修复。
10. 创建一个签名的标签。
11. 确保主干代码没有被不小心破坏。
12. 在`git show-branch`输出中,master应该有一切`ko/master`,`next`应该有一切`ko/next`都有,等等
13. git-push [1] to publish the bleeding edge. 啥意思?,以及指向推送新的日志标签。

在这个例子中,koGit维护者在kernel.org的仓库中的简写,如下所示:

(in .git/config) [remote "ko"] url = kernel.org:/pub/scm/git/git.git fetch = refs/heads/:refs/remotes/ko/ push = refs/heads/master push = refs/heads/next push = +refs/heads/pu push = refs/heads/maint



###存储库管理
存储库管理员使用以下工具来设置和维护开发人员对存储库的访问。

git-daemon [1]允许匿名从存储库下载。

git-shell [1]可以用作 共享中央存储库用户的受限登录shell。
#20170926更新,未完待续
git-http-backend [1]提供了允许提取和推送服务的Git-over-HTTP(“Smart http”)的服务器端实现。

gitweb [1]提供了一个Web前端到Git仓库,可以使用git-instaweb [1]脚本进行设置。

更新钩子howto具有管理共享中央存储库的一个很好的例子。

此外,还有一些其他广泛部署的托管,浏览和审查解决方案,如:

gitolite,gerrit代码审查,cgit等。

例子
我们在/ etc / services中假设以下
$ grep 9418 / etc / services
git 9418 / tcp#Git版本控制系统
从inetd运行git-daemon来服务/ pub / scm。
$ grep git /etc/inetd.conf
git stream tcp nowait nobody \
  / usr / bin / git-daemon git-daemon --inetd --export-all / pub / scm
实际的配置行应该在一行。

从xinetd运行git-daemon来服务/ pub / scm。
$ cat /etc/xinetd.d/git-daemon
#default:off
#description:Git服务器提供对Git存储库的访问
服务git
{
    disable =否
    type = UNLISTED
    port = 9418
    socket_type = stream
    等待=否
    user = nobody
    server = / usr / bin / git-daemon
    server_args = --inetd --export-all --base-path = / pub / scm
    log_on_failure + = USERID
}
检查您的xinetd(8)文档和设置,这是从Fedora系统。其他可能会有所不同。

使用git-over-ssh来推送/拉取访问开发人员。
例如: $ git push/pull ssh://host.xz/pub/scm/project

$ grep git / etc / passwd (1)
艾丽斯:X:1000:1000 :: /家/爱丽丝:在/ usr /斌/ git的壳
鲍勃:X:1001:1001 :: /首页/鲍勃:在/ usr /斌/ git的壳
辛迪:X:1002:1002 :: /家/辛迪:在/ usr /斌/ git的壳
大卫:X:1003:1003 :: /家/大卫:在/ usr /斌/ git的壳
$ grep git / etc / shells (2) 
/ usr / bin / git-shell
登录shell设置为/ usr /斌/ git的外壳,不允许任何东西,但git push和git pull。用户需要ssh访问机器。

在许多发行版中/ etc / shells需要列出什么用作登录shell。

CVS风格的共享存储库。
$ grep git / etc / group (1)
混帐:X:9418:爱丽丝,鲍勃,辛迪,大卫
$ cd /home/devo.git
$ ls -l (2)
  lrwxrwxrwx 1 david git 17 Dec 4 22:40 HEAD  - > refs / heads / master
  drwxrwsr-x 2 david git 4096 Dec 4 22:40分支
  -rw-rw-r-- 1 david git 84 Dec 4 22:40 config
  -rw-rw-r-- 1 david git 58 Dec 4 22:40 description
  drwxrwsr-x 2 david git 4096 Dec 4 22:40 hooks
  -rw-rw-r-- 1 david git 37504 Dec 4 22:40 index
  drwxrwsr-x 2 david git 4096 Dec 4 22:40 info
  drwxrwsr-x 4 david git 4096 Dec 4 22:40对象
  drwxrwsr-x 4 david git 4096 Nov 7 14:58 refs
  drwxrwsr-x 2 david git 4096 Dec 4 22:40遥控器
$ ls -l hooks / update (3)
  -r-xr-xr-x 1 david git 3536 Dec 4 22:40更新
$ cat info / allowed-users (4)
refs / heads / master alice \ | cindy
refs / heads / doc-update bob
refs / tags / v [0-9] * david
将开发人员放在同一个git组中。

并使该组可共享存储库可写。

使用来自Documentation / howto /的分支策略控制的Carl的update-hook示例。

alice和cindy可以推进主,只有bob可以推入doc-update。david是发行经理,是唯一可以创建和推送版本标签的人员。

GIT
所述的部分GIT中[1]套件
版权声明

翼安博客


首发 翼安博客,转载请附链接!

赞赏支持

感谢支持!


建站不易,感谢支持!

推荐阅读
Git for windows 修改Home路径(版本号:2.14)
前人留下的网络资料有解决1.9版本的这个问题,但对2.14版本已经不再适用。前人资料:http://www.cnblogs.com/fenpho/p/6208896.htmlhttp://www.cnblogs.com/xunzhiyou/p/5028789.html实际操作后,修改/etc/profile文件后,重新开始GitBash并没有生效。由于Git的默认路径在C:\Users\Admin
495

thinkphp6设置Content-type解决header添加不生效问题
thinkphp6设置Content-type解决header添加不生效问题原生php只需要加入header就可以实现输出各种格式的文件内容,如header("Content-type:text/css");然而,在thinkphp6中却不能生效。response总会自动的将内容以网页的形式输出。即自动添加<html>、<body>等标签,无法达到预期的效果。tp6框架中提
5001

【Gtest(Google Test)帮助手册】en-cn
Gtest官方使用文档英文文档获得方式:框架生成的执行文件,在命令行--help即可获得。中文翻译版本操作文档只对使用Gtest(GoogleTest)开发的测试用例有效。通过命令,你可以使用以下功能:选择测试用例: --gtest_list_tests列出所有的测试用例,但并不执行。代码中的用例TEST(Foo,Bar)显示出的结果是"Foo.Bar".  --gtest_f
2378

每天上班都像上坟一样难受,怎么办?三条妙招让上班像踏青
经常听到身边有些朋友抱怨,说每天上班的心情就想上坟。然而,真是如此么?小编相信,每位上班像上坟的朋友,身边不会缺少这样的朋友:每天上班精神抖擞,很有干劲,心情愉悦就像是来踏青一样。他们是怎么做到的呢?其实,上班不愉快无非就是上班时心情不好,感觉焦虑。要知道,这些都是可以解决的!人的一生,就是适应、利用、创造法则的一生。法则就是自然法则、社会秩序和公司规章制度。最无力的时候只能去学习、适应法则,成长
3185

CSDN-markdown编辑器示意效果
欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗Ctrl+B斜体Ctrl+I引用Ctrl+Q插入链接Ctrl+L插入代码Ctrl+K插入图片Ctrl
1428

php开发遇到的Access denied for user
php开发遇到的Accessdeniedforuser'root'@'localhost'(usingpassword:NO)首发:2017-09-2413:44:38环境:CentOS6.5+php5.3.3在php开发过程中,我遇到了一个问题:在命令行中登录Mysql完全正常,然而PHP代码读取数据库却出了问题。报错如下:Accessdeniedforuser'root'@'localhost
3235

Linux环境C C++起Socket Server监听8080端口的代码实现
代码抄录自《UNUX网络编程卷一》,在实现开发环境中调试通过,经测试发现可以正常监听。(2017-09-0621:56:31)开发环境:CentOS,g++,VIM功能:C++实现Socket通信的Server端,实现监听8080端口接收到的消息。#include#include/*SeeNOTES*/#include#include#include#include#include#include
2724

CentOS 系统简易搭建FTP服务(四步足矣)
本文作者之前在CSDN发过(2017-09-0313:09:28),现在入驻本站。网上有很多的FTP搭建步骤,但普遍很繁琐,个人临时使用太麻烦。本次实验使用腾讯云服务器CentOS简易搭建FTP服务器,四行命令足矣完成基本使命。yuminstallvsftpdservicevsftpdstartuseradd-m-d/home/uftp-s/sbin/nologinuftppasswduftp目前
2498

解决修改CSS文件后网页显示不生效问题
刚开始学CSS,HTML+CSS+Div虽说是上个世纪就有产生的发明,但我却不会。不过,不要紧,学就是了。问题是这样的:我编写HTML文件,并调用CSS文件实现布局美化。然后,经常出现明明已经修改过CSS文件但HTML页面却并没有产生变化的现象。怎么办?CSS语法作为初学者,首先想到的时自己写错了。所以查找正确的语法,如这一文章中提到的HTML调用CSS管理、美化div,仔细检查,发现语法是OK的
3278

linux中查看C C++程序或调用其中某个函数(类)消耗内存的方法实现
验证C/C++程序或调用其中某个函数(类)消耗内存的方法:获取进程ID,调用/proc/[pid]/status查看消耗的内存页(4KB/内存页)进程ID获取方法UNIX环境高级编程中提到的getpid(),可以获取。头文件``查看内存信息sprintf(FILE_NAME,"/proc/%d/statm",pid);FILE*fp=fopen(FILE_NAME,"r");fscanf(fp,"
2611

Linux(Android)系统Root实现原理
方案主旨思想是查找系统漏洞,让本身具有root权限的进程执行打开root权限的操作。重烧engboot.img方案Android版本有user版本和eng版本的区别,其中eng版本可以用于开发调试,所以本身可以开启root权限。通过重烧engboot.img版本来获取root权限。这个原理理解起来很简单,原理章节不再详述。死锁问题root需要考虑两个问题:(1)root权限的获取;(2)root权
2989

Ubuntu中Apache2启动失败报错Job for apache2.service failed because the cont...
Ubuntu中Apache2启动失败报错Jobforapache2.servicefailedbecausethecont...为解决这个问题,花了一个下午,参考了120多条网络博文,很有成就感。但实际上是由于一个简单的配置原因导致的问题,希望以后可以更加细心。-最初的现象,php代码没有解析phpinfo输出内容是显然,只是代码,并没有成功解析php代码。事后分析,是Apache2服务的问题。-
3516