版本控制(Revision control)是一种软体工程技巧,籍以在开发的过程中,确保由不同人所编辑的同一档案都得到更新。
Git是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理。 Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
这个主要是用于版本控制的啊,不在于你是几个人编码。等你哪天想看看以前的代码时只需要切换回以前的版本就可以了,当然这仅仅是它的一个好处,还要很多其他的等着你去慢慢体会呢。
你写了一个程序,现在需要加一个新的功能X,在X添加时,可能对许多文件进行改动。OK。当你X功能完成后,发现尼玛是个坑,这功能完全没用或者原理就错了之类的,你要弄回原来的代码。怎么办?不用git的时候,你只能把你功能X添加时修改过的N个文件都ctl+z,有些还不能回撤了,这时候除非你手动备份过,否则你要哭 。 git一句话就解决了:git checkout origin_version
学长的意思不是让你用git,而是让你管理代码 svn,git都无所谓
当你有天发现自己大学时候通宵几天写出来的代码已经变成一团乱麻的时候,你会感激那个学长的
1、 命令方式
(1)初始化git仓库 git init
git clone [url]
(2)基本快照 git add git status
git diff #查看尚未缓存的改动
git diff –cached#查看已缓存的改动
git diff HEAD 查看已缓存的与未缓存的所有改动 不会用这个 git diff –stat 显示摘要而非整个 diff 4++--
简而言之,使用 git add 添加需要追踪的新文件和待提交的更改, 然后使用 git status 和 git diff 查看有何改动, 最后用 git commit 将你的快照记录。这就是你要用的基本流程,绝大部分时候都是这样的。 一言以蔽之, 当你要将你的修改包含在即将提交的快照里的时候,执行 git add。 任何你没有添加的改动都不会被包含在内 —— 这意味着你可以比绝大多数其他源代码版本控制系统更精确地归置你的快照。
一言以蔽之,执行 git status 以查看在你上次提交之后有啥被修改或者临时提交了, 从而决定自己是否需要提交一次快照,同时也能知道有什么改变被记录进去了。
简而言之, 执行 git diff 来查看执行 git status 的结果的详细信息 —— 一行一行地显示这些文件是如何被修改或写入缓存的。
git commit 将缓存保存为快照存在本地 git commit –m ‘x’ 一键将快照保存到本地 git commit -a自动将在提交前将已记录、修改的文件放入缓存区,不过你仍然需要执行 git add 来添加新文件,
简而言之,执行 git commit 记录缓存区的快照。如果需要的话,这个快照可以用来做比较、共享以及恢复。
提交注解是很重要的。简短的关于改动的总结(25个字或者更少)如果有必要,更详细的解释文字。约 36 字时换行。在某些情况下,第一行会被作为电子邮件的开头,而剩余的则会作为邮件内容。将小结从内容隔开的空行是至关重要的(除非你没有内容);如果这两个待在一起,有些 git 工具会犯迷糊。
空行之后是更多的段落。 列表也可以
通常使用连字符(-)或者星号(*)来标记列表,前面有个空格, 在列表项之间有空行,不过这些约定也会有些变化。
git reset HEAD 取消缓存已缓存的内容
假设你修改了两个文件,想要将它们记录到两个不同的提交中去。 你应该缓存并提交一个,再缓存并提交另外一个。如果你不小心两个都缓存了,那要如何才能取消缓存呢? 你可以用 git reset HEAD -- file。 简而言之,执行 git reset HEAD 以取消之前 git add 添加,但不希望包含在下一提交快照中的缓存。
git rm 移除缓存(完全删掉),与取消缓存不同 如果要在工作目录中留着该文件,可以使用 git rm –cached 简而言之, 执行 git rm 来删除 Git 追踪的文件。它还会删除你的工作目录中的相应文件。
(3)分支与合并
简而言之,你可以执行 git branch (branchname) 来创建分支, 使用 git checkout (branchname) 命令切换到该分支,在该分支的上下文环境中, 提交快照等,之后可以很容易地来回切换。当你切换分支的时候,Git 会用该分支的最后提交的快照替换你的工作目录的内容, 所以多个分支不需要多个目录。使用 git merge 来合并分支。你可以多次合并到统一分支, 也可以选择在合并之后直接删除被并入的分支。
分支:
你可以执行 git branch (branchname) 来创建分支 我们用 git checkout (branch) 切换到我们要修改的分支。 git checkout -b (branchname)创建新分支,并立即切换到它 git branch -d (branchname) 删除分支
合并:
git merge能实现简单的自动合并,
冲突,人工解决冲突
简而言之 使用 git merge 将另一个分支并入当前的分支中去。 Git 会自动以最佳方式将两个不同快照中独特的工作合并到一个新快照中去。
git log: 显示一个分支中提交的更改记录
git log --oneline:查看历史记录的紧凑简洁的版本
git log –oneline --graph:查看历史中什么时候出现了分支、合并
git log –oneline change ^master 我们想要看“change”分支中但不在主分支中的提交
git tag 给历史记录中的某个重要的一点打上标签
如果你达到一个重要的阶段,并希望永远记住那个特别的提交快照,你可以使用 git tag 给它打上标签。 git tag –a v1.0 v1.0是自己取的
git log –oneline –decorate 这两步,创建标签并看到标签
git tag –a v1.0 +之前的发布名 可以给任意一个发布过的提交添加标签
(4)分享与更新项目
简而言之 使用 git fetch 更新你的项目,使用 git push 分享你的改动。 你可以用 git remote 管理你的远程仓库。
git remote add 添加远程服务器,github上的
简而言之 你可以用 git remote 列出你的远端仓库和那些仓库的链接。 你可以使用 git remote add 添加新的远端仓库,用 git remote rm 删掉已存在的那些。
git fetch github从远端仓库下载新分支与数据 执行之后,会被告知有哪些分支有更新
git fetch 会使你与另一仓库同步,提取你本地所没有的数据,为你在同步时的该远端的每一分支提供书签。 在 git fetch 之后紧接着 git merge 远端分支到你所在的任意分支。 git merge github/master
切记最好在merge之前预测一下冲突,可以省掉很多麻烦
切记要在add和commit之后,才能push最新的本地改,只有master 分支能push!!
简而言之 执行 git push [alias] [branch] 将你的本地改动推送到远端仓库。 如果可以的话,它会依据你的 [branch] 的样子,推送到远端的 [branch] 去。 如果在你上次提取、合并之后,另有人推送了,Git 服务器会拒绝你的推送,知道你是最新的为止。
(5)检查与比较
简而言之 执行 git log 找到你的项目历史中的特定提交 —— 按作者、日期、内容或者历史记录。执行 git diff 比较历史记录中的两个不同的点 —— 通常是为了看看两个分支有啥区别,或者从某个版本到另一个版本,你的软件都有啥变化。
git log --author=Linus --oneline -5
git log --oneline --before={3.weeks.ago} --after={2010-04-18} --no-merges根据日期过滤提交记录
git log --grep=P4EDITOR --no-merges根据提交注释过滤提交记录
git log --grep=\"p4 depo\" --format=\"%h %an %s\" --author=\"Hausmann\" --all-match 更精确的过滤查找
git log -Suserformat_find_requirements依据所引入的差值过滤
git log -p 显示每个提交引入的补丁
git log –stat 显示每个提交引入的改动的差值统计
简而言之 使用 git diff 查看某一分支自它偏离出来起与过去某一点之间项目的改动。 总是使用 git diff branchA...branchB 来查看 branchB 与 branchA 的相对差值,这会让事情简单点。 git diff master removals stat--
图形界面方式