1 所有内容都在本地
便宜快速的本地分支
因为是本地的所以是分散的
2 git 很省空间
git 很快
3 缓冲区功能
4 github
git flow
一些版本控制系统把工作目录称为工作拷贝。git新手经常会混淆git中的版本库和工作目录树。因为在subversion等传统的版本控制工具中,工作目录在本地,版本库在服务器上,而git中并非如此
在git中,版本库不在服务器上,而存储在本地工作目录的".git"目录中。这意味着,要想知道历史信息,只和本地的版本库打交道即可,无须与服务器上的版本库通信
具体来说,把远程版本库里的改动拿到本地版本库中,需要两部操作。第一步,把改动取来(Fetch),把远程版本库中的版本和分支复制到本地的远程版本库中。第二步,在本地,把本地的远程版本库里取来的改动与自己本地的改动合并。git工具包提供了这样的合并工具。一般来说,取来操作和合并操作总是先后执行。因此,在git中可以用一个命令来完成这两部操作:拖入(Pull)。
git help command
windows下的git
Cygwin
MSys版的git
可能与*nix版不兼容
Git需要用户提供若干信息。通过命令git config,用户可以把此类信息提供给本地版本库
用户名和邮箱是必须的
git config --global user.name ""
git config --global user.email ""
git 可设置的值超过130个。其中大多数都很少用到。但有一个例外:关于用不同颜色显示git命令输出
若想在命令行窗口使用不同的颜色显示不同类型的内容,请将"color.ui"的值设为auto或always
.git/config
git图形界面
gitk
添加 --all 参数,可以显示全部分支的历史
git中有三个地方可以存放代码。第一个地方是工作目录树
第二个是索引,也就是暂存区。暂存区是工作目录树和版本库的缓冲区。存放着准备提交到版本库中的修改
第三个也就是最后一个,是版本库
使用命令git commit时,可以接受多个 -m 参数
精心写出完美的提交留言是一种艺术。这可以通过查看其他成功项目的提交日志来学习。
在每一个提交上花费一两分钟,总结这些修改,就像给坐在旁边的开发人员解释一样。首先用一句简单的话来概括此提交;然后用几句话全面解释
对于比较复杂的提交留言,需要用编辑器来输入。为启动编辑器,git会按照以下顺序查找编辑器的设置:
1 环境变量 GIT_EDITOR
2 git的设置 core.editor
3 环境变量 VISUAL
4 环境变量 EDITOR
5 vi
git log --pretty=oneline
git archive --format=tar \
--prefix=mysite-1.0/ 1.0 \
| gzip > mysite-1.0.tar.gz
git add -i
git add -p
git add .
也即是说,当在工作目录树中修改了一个文件后,可以先暂存此修改,之后再次修改该文件,然后可以提交刚才已经暂存的修改,而再次修改的内容没有提交,仍然在工作树中
git不会单独记录和追踪目录。有一个解决方案:在想要跟踪的目录里添加一个空文件,文件名通常是"."开头
另一种提交方式是:给git commit传递 -a参数,git会把工作目录树中所有的改动提交到版本库中,否则,只有已纳入git版本控制的文件的修改被提交
git commit -m "cool" some-file
-C 告诉git复用指定提交的提交留言,而不是从头再写一个
git config --global alias.co checkout
git config --global alias.ci commit
git config --global alias.st status
git config --global alias.br branch
git diff 工作目录树 暂存区
git diff --cached 暂存去 版本库
git diff HEAD 工作目录树 版本库
git mv 来重命名
.gitignore .git/info/exclude /usr/share/git-core/templates/info/exclude
问自己一个简单的问题:每个人的版本库中都需要这类忽略吗?所以把个人偏好的作为版本库的一部分发布出去并不是一个好想法
git checkout -b
直接合并
压缩合并 git merge --squash
拣选合并 git cherry-pick 321d76f
要拣选多个提交,传递参数 -n
不一定使用 -m参数。编辑器会使用刚刚拣选的提交的提交留言(在解决合并冲突时也如此)
git branch -d -D -m -M
git stash
git log -10
git log 7b1558c
注意,上面的例子使用的是提交名称缩写,不论输入几位,git都会设法匹配
git log 11111.22222
git log 111..
^^
~1
git diff 指定版本范围与git log一样
git diff --stat
当推入变更之后又去修改历史,并且随后又推入不同的变更,则会给那些已经拿到了之前的变更的同事带来很大麻烦
git revert 此命令通过在版本库中创建一个反向的新提交来抵消原有的提交
-n
--no-edit
复位
git reset
重写历史
重新排序提交
多个提交压和成一个提交
将一个提交分解为多个提交
git filter-branch --tree-filter 'rm -f passwords.txt' HEAD
你可以观察到 Git 重写目录树并且提交,然后将分支指针移到末尾。一个比较好的办法是在一个测试分支上做这些然后在你确定产物真的是你所要的之后,再 hard-reset 你的主分支。要在你所有的分支上运行filter-branch的话,你可以传递一个--all给命令。
git tag
git push --tags
通过git子模块来跟踪外部版本库
git stash
临时将代码存档
悬空对象
git gc
--aggressive
git fsck
git reflog
git branch -D 删除一个实验分支时,git会暂时保留该分支的内容
如果你决定恢复那部分历史,你可以创建一个新的引用指向它,例如创建一个新的分支
gc.reflogExpireUnreachable
gc.reflogExpire
当我们在执行git gc命令时,它会调用git prune命令把这些悬空对象(dangling objects)清除掉(prune);一般默认是清除超过二周的悬空对象。如果我们不要等二周时间,可在git 中设置一个环境变量gc.pruneExpire;也可在执行命令时设置清除(prune)的时间长度(expire date)。
撤底删除指令
git reflog expire --expire-unreachable=0 --all
git gc --prune=0
http://liuhui998.com/
http://progit.org/book/zh/
git 中文手册
git svn
http://www.robinlu.com/blog/archives/194
git flow
http://ihower.tw/blog/page/2
http://agilejava.blogbus.com/logs/103552611.html
分享到:
相关推荐
7. **版本控制**:在软件开发中,版本控制工具如Git的应用被高度推崇,它们能有效管理代码版本,协同多人工作,防止冲突,回溯历史,便于代码审查。 8. **持续学习与自我提升**:软件行业更新迅速,开发者需要持续...
Git作为一种分布式版本控制系统,其基本操作如克隆、分支、合并和提交在项目管理中起着至关重要的作用。此外,书中的内容可能还会讨论到如何通过敏捷工具,如Jira或Trello,来提升团队的协同效率。 项目管理方面,...
6. 版本控制系统:如Git和SVN的使用和最佳实践。 7. 编程语言:可能会探讨不同编程语言的优缺点,如Java、C++、Python、JavaScript等。 8. 开源社区:开源软件的贡献方式、如何使用和管理开源项目。 9. 软件测试:...
同时,他还探讨了版本控制系统的应用,如Git,以及它在协同开发中的核心地位。 在面对技术挑战时,作者鼓励程序员勇于尝试,不怕失败。他指出,错误和挫折是成长的一部分,通过解决实际问题,可以积累宝贵的经验。...
最后,软件工程和最佳实践也是考察的一部分,比如代码版本控制(Git的使用)、持续集成/持续部署(CI/CD)、单元测试、异常处理、错误日志记录以及代码审查的重要性。 总的来说,《代码随想录-最强八股文(第五版)》...
趁你还年轻的技术博客,主要包括前端,node,运维和随想,文章在issues。目前主要从事前端开发工作。 前端 - HTML - CSS - JavaScript - 前端存储 - 前端通信 - 前端安全 - 前端框架 - 前端面试 - 前端性能 - 前端...
UIUC_CS_419_Assignement 这是伊利诺伊大学厄本那-香槟分校CS 419生产计算机图形学的作业库
随想 10 iOS 10 Nginx 10 Git 10 设计模式 10 Java 10 Android 9 Android 9 Web 9 Java 9 Android 8 Android 8 Android 8 Android 8 Android 8 Android 8 Gradle 8 设计模式 8 设计 8 数据库 8 React Native 7 插件 ...
8. **版本控制**:作为完整源码的一部分,项目很可能是在Git上进行版本控制的,这有助于团队协作和代码追踪。 9. **测试与调试**:为了确保软件质量,可能包含了单元测试、集成测试,使用了JUnit、Mocha、Jest等...
一些随想笔记.Usage安装环境git clone https://github.com/dengqinghua/roses.gitcd rosesbundle install编写markdown风格的文档请参考将写好的文件放在 source 目录下并在source/documents.yaml文件下编写目录....
随想 10 iOS 10 Nginx 10 Git 10 设计模式 10 Java 10 Android 9 Android 9 Web 9 Java 9 Android 8 Android 8 Android 8 Android 8 Android 8 Android 8 Gradle 8 设计模式 8 设计 8 数据库 8 React Native 7 插件 ...
在【压缩包子文件的文件名称列表】中,我们看到“guichu-master”可能是一个Git仓库的主分支名,通常用于存放项目的主版本代码。这意味着下载的压缩包可能是一个完整的项目源代码,包含有README、代码文件夹、资源...
杂感随想 面试心得体会、转行相关 ■■■■□□□□□□ 我对校招技术面试的粗浅理解 非科班转行的同学该如何突破重围 数据结构与算法 leetcode题目简评 ■■■■■■■■■■ 《剑指offer》笔记 ■■...
描述中的“无论我想到什么JavaScript”则表明这个项目可能是作者随想随记的JavaScript知识点汇集,可能包含各种各样的主题,如DOM操作、事件处理、异步编程、ES6及更高版本的新特性、性能优化、错误处理等。...
10. **版本控制**:为了协同开发和历史版本追踪,项目很可能使用了 Git 进行版本控制,这样团队成员可以共享代码,同时保持代码库的整洁和有序。 综上所述,"五子棋 Java 版"是一个涉及 Java GUI 编程、多线程、...