Git每天都会用到的20个命令(译官网资料)
2017-09-13 09:26
495 查看
官网链接 https://git-scm.com/docs/giteveryday
文中多次提到上游,我个人的理解是你的上一级代码库。就好像SVN的服务端代码。
个人开发者(独立) 这些命令对于任何人的代码提交都是重要的,即使是独立开发者也不例外。
如果您与其他人合作,您还需要“ 个人开发者(合作开发)”部分中列出的命令。
运维管理人员除了上述之外,还需要学习更多的命令。
存储库管理命令适用于负责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]标记一个已知的点。
添加当前目录下的所有内容。
增加一个简洁明了的提交注释信息。
创建一个主题分支和开发。
创建一个新的主题分支。
恢复你的笨拙的变化
你需要告诉Git是否添加了一个新的文件; 如果您
看看你正在做什么改变。
提交你已经测试过并打过标记的内容。
查看所有更改,包括以前的提交。
修改先前的提交,添加所有新的更改,使用您的原始消息。
切换到主分支。
将主题分支合并到主分支中。
查看提交日志; 可以组合其他形式来限制输出,并包括
只查看
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]创建上游代码库的更改摘要。
从主机检出一个新
根据需要重复操作。
从你的分支中提取补丁(分枝是相对于master而言的)。
发送电子邮件。
返回到
pull代码后后,看看上次修改之后的修改,只关注我们感兴趣的地方。
检查外部存储库中的分支名称(如果不知道)。
从
恢复pull。
将pull版本后的冗余信息恢复。
推入(push)到另一个存储库。
20170913存档
1. Master主机在您的主目录下有一个frotz存储库; 从它clone代码,以在本地PC上启动一个存储库。
2. 克隆默认设置这些配置变量。安排
3. 安排
4. 将我们所有的工作都push到
5. 在Master主机上,将客户开
1fff8
发机上完成的工作合并到主干代码。
分支特定标签。
根据一个众所周知的的标签创建一个私人分支。(尽管1众所周知的名字显得有些俗气)
转发端口所有更改
另一个参与者提交机制正在使用
可以使用
例子
合并补丁的操作记录
看看你手头正在开发哪些功能。
看有哪些还没有合并的分支代码。
看有没有重要的邮件。
批准可以合并使用的补丁。
根据需要创建主题分支并再次反馈改动。
将可以合并的分支代码rebase并发布,作为稳定分支的一部分。
从下次开始,每次都要重启pu。
and bundle topic branches still cooking.???
创建一个签名的标签。
确保主干代码没有被不小心破坏。
在
git-push [1] to publish the bleeding edge. 啥意思?,以及指向推送新的日志标签。
在这个例子中,koGit维护者在kernel.org的仓库中的简写,如下所示:
git-daemon [1]允许匿名从存储库下载。
git-shell [1]可以用作 共享中央存储库用户的受限登录shell。
gitweb [1]提供了一个Web前端到Git仓库,可以使用git-instaweb [1]脚本进行设置。
更新钩子howto具有管理共享中央存储库的一个很好的例子。
此外,还有一些其他广泛部署的托管,浏览和审查解决方案,如:
gitolite,gerrit代码审查,cgit等。
例子
我们在/ etc / services中假设以下
grep9418/etc/servicesgit9418/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
grepgit/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风格的共享存储库。
grepgit/etc/group(1)混帐:X:9418:爱丽丝,鲍勃,辛迪,大卫 cd /home/devo.git
ls−l(2)lrwxrwxrwx1davidgit17Dec422:40HEAD−>refs/heads/masterdrwxrwsr−x2davidgit4096Dec422:40分支−rw−rw−r–1davidgit84Dec422:40config−rw−rw−r–1davidgit58Dec422:40descriptiondrwxrwsr−x2davidgit4096Dec422:40hooks−rw−rw−r–1davidgit37504Dec422:40indexdrwxrwsr−x2davidgit4096Dec422:40infodrwxrwsr−x4davidgit4096Dec422:40对象drwxrwsr−x4davidgit4096Nov714:58refsdrwxrwsr−x2davidgit4096Dec422: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]套件
文中多次提到上游,我个人的理解是你的上一级代码库。就好像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)
添加当前目录下的所有内容。
增加一个简洁明了的提交注释信息。
创建一个主题分支和开发。
$ 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)
创建一个新的主题分支。
恢复你的笨拙的变化
curses/ux_audio_oss.c。
你需要告诉Git是否添加了一个新的文件; 如果您
git commit -a以后再对文件进行移除和修改操作,Git会告知你。
看看你正在做什么改变。
提交你已经测试过并打过标记的内容。
查看所有更改,包括以前的提交。
修改先前的提交,添加所有新的更改,使用您的原始消息。
切换到主分支。
将主题分支合并到主分支中。
查看提交日志; 可以组合其他形式来限制输出,并包括
-10(最多显示10个提交)
--until=2005-12-10等。
只查看
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)
从主机检出一个新
mine的分支。
根据需要重复操作。
从你的分支中提取补丁(分枝是相对于master而言的)。
发送电子邮件。
返回到
master,看看有什么新的变化。
git pull从
origin默认提取,合并到当前分支。
pull代码后后,看看上次修改之后的修改,只关注我们感兴趣的地方。
检查外部存储库中的分支名称(如果不知道)。
从
ALL特定的存储库中获取特定的分支并将其合并。
恢复pull。
将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主机上,将客户开
1fff8
发机上完成的工作合并到主干代码。
分支特定标签。
$ 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众所周知的名字显得有些俗气)
转发端口所有更改
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)
看看你手头正在开发哪些功能。
看有哪些还没有合并的分支代码。
看有没有重要的邮件。
批准可以合并使用的补丁。
根据需要创建主题分支并再次反馈改动。
将可以合并的分支代码rebase并发布,作为稳定分支的一部分。
从下次开始,每次都要重启pu。
and bundle topic branches still cooking.???
backport一个关键的修复。
创建一个签名的标签。
确保主干代码没有被不小心破坏。
在
git show-branch输出中,master应该有一切
ko/master,
next应该有一切
ko/next都有,等等
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中假设以下
grep9418/etc/servicesgit9418/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
grepgit/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风格的共享存储库。
grepgit/etc/group(1)混帐:X:9418:爱丽丝,鲍勃,辛迪,大卫 cd /home/devo.git
ls−l(2)lrwxrwxrwx1davidgit17Dec422:40HEAD−>refs/heads/masterdrwxrwsr−x2davidgit4096Dec422:40分支−rw−rw−r–1davidgit84Dec422:40config−rw−rw−r–1davidgit58Dec422:40descriptiondrwxrwsr−x2davidgit4096Dec422:40hooks−rw−rw−r–1davidgit37504Dec422:40indexdrwxrwsr−x2davidgit4096Dec422:40infodrwxrwsr−x4davidgit4096Dec422:40对象drwxrwsr−x4davidgit4096Nov714:58refsdrwxrwsr−x2davidgit4096Dec422: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命令
- bedtools 每天都会用到的工具
- Git 工作用到命令总结(不定时添加)
- 工作之余(工作不用git)用到的 git 命令
- 项目中用到的一些git命令(持续更新)
- 【浅谈学习git可能会用到的Linux命令】
- 每天一命令 git checkout
- git的工作用到的命令
- libc的库,每天你都会用到,相信我
- Git会用到但是你又记不住的一些命令
- 资料——Git常用命令整理
- 每天一命令 git reset
- linux命令学习(每天都会更新)
- Git Shell 基本命令(官网脱水版)
- Git常用命令(日常工作需要用到的最实用的命令)
- 工作中用到的Git命令整理
- Linux常用命令学习之路(每天都会更新)
- 工作中经常用到的git命令和错误记录
- 关于最经常用到的git命令总结
- 用到的git命令记录