We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Git版本库(repository)是一个简单的数据库,包含所有用来维护与管理项目的修订版本和历史的信息。
Git维护两个主要的数据结构:对象库(object store)和索引(index)
git mv 可以移动或重命名文件
git mv oops newOops
等同于
mv oops newOops git rm oops git add newOops
git log 命令可以查看文件的历史记录,但无法查看改过名字之前的记录,要查看全部历史记录,需要使用
git log --follow newOops
合并操作自身会导致在版本库中多出一个提交
所有改动要么全部应用,要么全部拒绝
HEAD始终指向当前分支的最近提交。当切换分支时,HEAD会更新为指向新分支的最近提交
ORIG_HEAD
FETCH_HEAD
MERGE_HEAD
Git还提供一种机制来确定相对于另一个引用的提交,通常是分支的头。
在同一代提交中,插入符号^是用来选择不同父提交的
波浪线~用来返回父提交之前并选择上一代提交
git rev-parse命令最终把任何形式的提交转换成对象库中实际的、绝对的提交散列ID
git log 相当于git log HEAD,输出当前HEAD往前的日志
--pretty=参数可以选择short,oneline,full
-p选择来输出提交引进的补丁或变更 git log -1 -p commitId
--stat选项列举了提交中所更改的文件以及每个文件中有多少行做了改动
Git 使用有向无环图(DAG)来实现版本库的提交历史记录
git log --graph --pretty=oneline --abbrev-commit
--abbrev-commit 显示SHA-1的前8个字符,而不是所有的40个
--merge 只显示跟产生冲突的文件相关的提交
--left-right 如果提交来自合并的“左”边则显示<(我们的版本),如果来自合并的“右”边则显示>(他们的版本)
git checkout -m dev 通过在本地修改和对目标分支之间进行一次合并操作,尝试将本地修改加入到新工作目录中
git diff 显示工作目录(未git add)和暂存区(git add之后)的差异
git diff commit 显示工作目录和给定提交间的差异
git diff --cached 显示暂存区(git add 之后)和版本库(git commit 之后)的差异
git diff HEAD 显示工作目录和版本库的差异
--stat选项会显示针对两个树状态之间差异的统计数据
--color会使输出结果使用多种颜色显示
git diff --ours 显示当前分支的改动
git diff --theirs 显示对方分支的改动
三方合并标记线(<<<<<、=====和>>>>>>)是自动生成的,程序不关注这个。
一旦通过选择其中一边来解决冲突,它就不再显示了
在git commit 之前中止合并使用 git reset --hard HEAD
在git commit 之后中止合并并使用 git reset --hard ORIG_HEAD
git checkout -m
递归(recursive)策略是git merge的默认策略
Git策略:所有分支生而平等
Git可以完成压制提交,只要在执行git merge 或 git pull 的时候给出 --squash选项。
注意事项:如果没有其他开发人员已经获得了你的版本库的副本,你就可以自由地修改和完善版本库提交历史记录
如果一个分支已经公开了,就不应该重写
git reset调整HEAD引用指向给定的提交,并且是“破坏性的”
git reset有三个选项:--soft、--mixed、--hard
--soft只改变HEAD引用,索引和工作目录不变。会将改变放在暂存区(git add 之后)
--mixed改变HEAD引用和索引引用,工作目录保持不变,git reset默认模式。改变放在工作目录中(git add之前)
--hard都改变,修改都将丢失
用于把版本库中的一个分支的特定提交引入一个不同的分支中
批量提交 git cherry-pick X..Y
应用给定提交的逆过程
git commit --amend
git rebase命令用来改变一串提交以什么为基础
变基操作一次只迁移一个提交,从各自原始提交位置迁移到新的提交基础,每个移动的提交都可能有冲突需要解决
git rebase -i 命令允许你修改一个分支的大小,然后把它们放回原来的分支或者不同的分支
git stash 储藏状态
git stash pop:当无冲突时,Git会自动将储藏状态栈中保存的状态删除。有冲突时,需要手动解决冲突并且不会主动删除,需要用git stash drop来删除
git stash apply 不会删除状态
reflog记录非裸版本库中分支头的改变,每次对引用的更新,包括对HEAD的,引用日志都会更新以记录这些引用发生了哪些变化。
Git 针对引用支持大量基于日期的限定符。
一个提交,如果既不能从某个分支或引用指向,也不可达,将会默认在30天后过期,而那些可达的提交将默认在90天后过期。
储藏是通过使用stash引用的引用日志来实现的。
添加远程版本库 git remote add origin URL
git remote update 会导致在这个版本库中的每个remote都被更新,会从每个remote指定的版本库中检查并抓取新提交。
git pull = git fetch git merge/git rebase。默认情况下,第二个步骤是git merge
git pull --rebase会引起Git只在这次pull过程中变基
通过合并,每次拉取将有可能产生额外的合并提交来记录更新同时存在于每一个分支的变更。
变基从根本上改变了一系列提交是在何时何地开发的概念,开发历史记录的某些方面会丢失
git remote update --prune 从远程版本库获得更新然后一步删除陈旧的追踪分支
git remote set-url origin Git:URL 更改远程版本库引用
The text was updated successfully, but these errors were encountered:
No branches or pull requests
基本概念
1.版本库
Git版本库(repository)是一个简单的数据库,包含所有用来维护与管理项目的修订版本和历史的信息。
Git维护两个主要的数据结构:对象库(object store)和索引(index)
文件管理与索引
1. git mv
git mv 可以移动或重命名文件
等同于
git log 命令可以查看文件的历史记录,但无法查看改过名字之前的记录,要查看全部历史记录,需要使用
提交
合并操作自身会导致在版本库中多出一个提交
1.原子变更集
所有改动要么全部应用,要么全部拒绝
2.识别提交
HEAD始终指向当前分支的最近提交。当切换分支时,HEAD会更新为指向新分支的最近提交
ORIG_HEAD
FETCH_HEAD
MERGE_HEAD
相对提交
Git还提供一种机制来确定相对于另一个引用的提交,通常是分支的头。
在同一代提交中,插入符号^是用来选择不同父提交的
波浪线~用来返回父提交之前并选择上一代提交
git rev-parse命令最终把任何形式的提交转换成对象库中实际的、绝对的提交散列ID
提交历史记录
git log 相当于git log HEAD,输出当前HEAD往前的日志
--pretty=参数可以选择short,oneline,full
-p选择来输出提交引进的补丁或变更 git log -1 -p commitId
--stat选项列举了提交中所更改的文件以及每个文件中有多少行做了改动
Git 使用有向无环图(DAG)来实现版本库的提交历史记录
git log --graph --pretty=oneline --abbrev-commit
--abbrev-commit 显示SHA-1的前8个字符,而不是所有的40个
--merge 只显示跟产生冲突的文件相关的提交
--left-right 如果提交来自合并的“左”边则显示<(我们的版本),如果来自合并的“右”边则显示>(他们的版本)
分支
合并变更到不同分支
git checkout -m dev 通过在本地修改和对目标分支之间进行一次合并操作,尝试将本地修改加入到新工作目录中
Diff
git diff 显示工作目录(未git add)和暂存区(git add之后)的差异
git diff commit 显示工作目录和给定提交间的差异
git diff --cached 显示暂存区(git add 之后)和版本库(git commit 之后)的差异
git diff HEAD 显示工作目录和版本库的差异
--stat选项会显示针对两个树状态之间差异的统计数据
--color会使输出结果使用多种颜色显示
git diff --ours 显示当前分支的改动
git diff --theirs 显示对方分支的改动
合并
三方合并标记线(<<<<<、=====和>>>>>>)是自动生成的,程序不关注这个。
一旦通过选择其中一边来解决冲突,它就不再显示了
中止或重新启动合并
在git commit 之前中止合并使用 git reset --hard HEAD
在git commit 之后中止合并并使用 git reset --hard ORIG_HEAD
git checkout -m
交叉合并
递归(recursive)策略是git merge的默认策略
Git策略:所有分支生而平等
Git可以完成压制提交,只要在执行git merge 或 git pull 的时候给出 --squash选项。
更改提交
注意事项:如果没有其他开发人员已经获得了你的版本库的副本,你就可以自由地修改和完善版本库提交历史记录
如果一个分支已经公开了,就不应该重写
git reset
git reset调整HEAD引用指向给定的提交,并且是“破坏性的”
git reset有三个选项:--soft、--mixed、--hard
--soft只改变HEAD引用,索引和工作目录不变。会将改变放在暂存区(git add 之后)
--mixed改变HEAD引用和索引引用,工作目录保持不变,git reset默认模式。改变放在工作目录中(git add之前)
--hard都改变,修改都将丢失
git cherry-pick
用于把版本库中的一个分支的特定提交引入一个不同的分支中
批量提交 git cherry-pick X..Y
git revert
应用给定提交的逆过程
修改最新提交
git commit --amend
变基提交
git rebase命令用来改变一串提交以什么为基础
变基操作一次只迁移一个提交,从各自原始提交位置迁移到新的提交基础,每个移动的提交都可能有冲突需要解决
git rebase -i 命令允许你修改一个分支的大小,然后把它们放回原来的分支或者不同的分支
储藏
git stash 储藏状态
git stash pop:当无冲突时,Git会自动将储藏状态栈中保存的状态删除。有冲突时,需要手动解决冲突并且不会主动删除,需要用git stash drop来删除
git stash apply 不会删除状态
引用日志
reflog记录非裸版本库中分支头的改变,每次对引用的更新,包括对HEAD的,引用日志都会更新以记录这些引用发生了哪些变化。
Git 针对引用支持大量基于日期的限定符。
一个提交,如果既不能从某个分支或引用指向,也不可达,将会默认在30天后过期,而那些可达的提交将默认在90天后过期。
储藏是通过使用stash引用的引用日志来实现的。
远程版本库
添加远程版本库 git remote add origin URL
git remote update 会导致在这个版本库中的每个remote都被更新,会从每个remote指定的版本库中检查并抓取新提交。
git pull = git fetch git merge/git rebase。默认情况下,第二个步骤是git merge
git pull --rebase会引起Git只在这次pull过程中变基
变基还是合并
通过合并,每次拉取将有可能产生额外的合并提交来记录更新同时存在于每一个分支的变更。
变基从根本上改变了一系列提交是在何时何地开发的概念,开发历史记录的某些方面会丢失
远程版本库配置
git remote update --prune 从远程版本库获得更新然后一步删除陈旧的追踪分支
git remote set-url origin Git:URL 更改远程版本库引用
The text was updated successfully, but these errors were encountered: