Git CVCS分布式版本控制系统
Git 只关心文件数据的整体是否发生变化
Git 几乎所有操作都在本地进行不用连网处理起来速度飞快
Git 时刻保持数据完整性,不可能在你修改了文件或目录之后Git 一无所知
Git 多操作但是仅提交数据 一旦提交快照之后就完全不用担心丢失数据

在 Git 内都只有三种状态:已提交(committed),已修改(modified)和已暂存(staged)

工作区 暂存区 仓库 远端仓库
(还有一个临时工作快照 git stash)

若是条件允许,从源代码安装有很多好处,至少可以安装最新的版本
$ sudo port install git-core +svn +doc +bash_completion +gitweb

<<<<<<<<<<<<全局 配置>>>>>>>>>>>>>>>>>>>>>
该文件在一般在.git/config文件中

$ git config –global user.name “Alrahim”
$ git config –global user.email “Alrahim@github.com”
$ git config –list 列出所有配置
$ git config –add core.autocrlf false 不成功提示配置
$ git config –local -–unset core.autocrlf 取消配置
$ git config –global color.ui true 显示颜色更醒目
$ git config –global merge.tool vimdiff 用vim作差异分析工具
$ git config –global alias.co checkout 配置别名,个性设置
$ git config –global alias.ci commit
$ git config –global alias.br branch
$ git config –global alias.lg “log –color –graph –pretty=format:’%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset’ –abbrev-commit”

$ git init 初始化一个版本库

<<<<<<<<<<<<工作区 缓存区基础操作>>>>>>>>>>>>>>>>>>>>>
$ git add currentfile
$ git add . === 我喜欢这个
$ git add *js 添加所有js后缀文件 我喜欢这个
$ git add hello*js 添加所有hello前缀文件 我喜欢这个
$ git add –all ===
$ git add -A ===
$ git checkout –index.js 不要丢掉缓存区index.js 即上次add的index.js 这条命令会重写工作区

$ git commit 提交到仓库
$ git reset -m xxx 不要上次提交内容了,回到上次commit之前
$ git reset HEAD test.txt 这时

$ git reflog reset之后想撤消就去找日志 再次reset回来
$ git reset –hard 235sdf7 工作间和暂存区都进行回滚 我喜欢这个

<<<<<<<<<<<<<<<<<<状态查看>>>>>>>>>>>>>>>>>>>>>>>>>>>

$ git diff 查看文件不同 与上次git add 的内容 –cached暂存区和仓库HEAD的不同(上次git commit 后的内容)
git diff 在两个分支之间比较
git diff –staged 比较暂存区和版本库差异
git diff –cached 比较暂存区和版本库差异

$ git status 命令用于显示工作目录和暂存区的状态。使用此命令能看到那些修改被暂存到了, 哪些没有, 哪些文件没有被tracked到。
$ git status -uno 可以只列出所有已经被git管理的且被修改但没提交的文件
$ git status | grep unmerged 检查哪些路径与git状态冲突
$ git log 可以显示所有提交过的版本信息 –pretty=oneline 只显示版本号和提交时的备注 –oneline 只有前三位id
$ git log -g 会输出 reflog 的正常日志
$ git log –graph命令可以看到分支合并图。–abbrev-commit
$ git log –since=”2 weeks ago” — index.js 显示最近两周的更改文件index.js
$ git log –before={3,weeks,ago} –after={2018-04-18} 显示指定时间之前|后的提交
$ git reflog 可以查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作)很强大,很喜欢
$ git shortlog -s -n 排序统计

$ git checkout D:/App/src/components/testgit.js 从工作间检出单个已经删除文件
$ git rm testgit.js 从版本库存删除 testgit.js
$ git reset –hard 4sd5f4s 又从版本库存恢复 testgit.js
$ git reset –hard HEAD~1 回到上一个版本,我比较喜欢上一个

<<<<<<<<<<<<<<<<<<管理跟踪的存储库>>>>>>>>>>>>>>>>>>>>>>>>>>>
$ git remote 列出已经存在远程分支
$ git remote -v 查看当前远端关联
$ git remote add origin https://github.com/Alrahim/App.git 在本地的git仓库下运行命令:与远程仓库关联
$ git remote set-url git@github.com:Alrahim/app.git 修改远端url
$ git remote rm origin 删除已有远程库

<<<<<<<<<<<<<<<<<<公钥生成>>>>>>>>>>>>>>>>>>>>>>>>>>>

$ ssh-keygen -t rsa 生成SSH key
$ ssh-keygen -t rsa -C “我的SSH密钥” 也可以使用以下命令在生成时添加注释:
$ ssh-keygen –help 具体说明请使用ssh-keygen –help命令查看
$ pwd 查看当前目录
$ ll 显示当前内容
$ ls -a 显示所有内容,包括隐藏的
$ cd .ssh/ 去到生成的目录
$ cat id_rsa.pub 查看公钥匙复制放到github
$ ssh -T git@github.com 测试是否通了
$ vim id_rsa.pub 查看文件 具体查看vim命令

<<<<<<<<<<<<<<<<<<推送 拉取远程内容>>>>>>>>>>>>>>>>>>>>>>>>>>>

$ git push -u origin master 加-f是强制,团队时不可以这样操作
$ git push –force origin 导致在远程主机产生一个”非直进式”的合并(non-fast-forward merge)
$ git branch –set-upstream master origin/dev 手动添加追踪关系 master追踪origin/dev
由于远程库是空的,第一次推送master分支时,加上-u参数,把本地master推送到远程新的master,并关联上,以后推拉分支可简化
$ git push origin master 把本地master推送至远端master,如果远端不存在会自动创建
$ git push <远程主机名> <本地分支名>:<远程分支名>
$ git push origin dev1:master/dev 推送本地dev1分支到远端dev分支
推荐操作
$ git checkout dev2
$ git rebase dev
$ git push origin dev2:master/dev

$ git push -f origin dev1:master/dev 推送本地dev1分支覆盖远端dev分支
$ git push origin –delete master 删除远端master === $ git push origin :master
$ git push origin 当前分支推送至远程对应分支
$ git push 同上,当前分支只有一个追踪分支时可省略主机名 不会推送标签(tag),除非使用–tags选项
$ git push origin tag_name 推送标签

$ git fetch 从另一个存储库下载对象和引用,即将这些更新取回本地,不自动合并比较安全
$ git fetch origin 更新远程跟踪分支
$ git fetch origin master 取回master更新
$ git clone .git 的目录不项目目录
$ git clone –bare 新建的目录本身就是 Git 目录
$ git pull <远程主机名> <远程分支名>:<本地分支名>
$ git pull origin dev:master 取回远端dev分支与本地master合并
$ git pull origin dev 取回远端dev分支与当前分支合并
$ git pull 把”origin”分支上的修改拉下来并且和你的修改合并
$ git pull === git fetch + git merge
$ git pull –rebase === git fetch + git rebase

<<<<<<<<<<<<<<<<<<分支操作 特别重要>>>>>>>>>>>>>>>>>>>>>>>>>>>

$ git branch 查看所有分支 -a一样
$ git branch -r 查看所有远程分支
$ git checkout -b dev 创建dev分支并指向dev分支 我喜欢这个
$ git branch -m dev dev2 修改分支名字
$ git branch 列出所有分支
$ git checkout master 切换回主分支
$ git merge dev 切回主分支后把dev分支内容合并主分支就有dev的内容了
$ git merge –no-commit dev 切回主分支后把dev分支内容合并但是不提交
$ git branch -d dev 合并完成后,就可以放心地删除dev分支了
$ git merge origin/master 当前分支上合并远程分支
$ git rebase origin/master

$ git push -d memote_name branch_name 删除远程分支
$ git branch -d dev 删除本地dev分支
$ git branch -D dev 删除本地分支 === –delete –force

$ git branch dev 创建dev分支
$ git checkout dev 切换到dev分支
$ git checkout -b dev 创建+切换分支常用 === 上面两个一起
$ git merge dev 合并dev分支到当前分支
$ git merge –no-ff -m “软合并” dev –no-ff表示禁用Fast forward用普通模式合并,合并后的历史有分支,能看出来曾经做过合并
$ git log –graph –pretty=oneline –abbrev-commit

$ git clone git@github.com:Alrahim/app.git 克隆仓库到本地

<<<<<<<<<<<<<<<<<<冲突处理 >>>>>>>>>>>>>>>>>>>>>>>>>>>
git add .
git commit -m fix_conflict
git checkout dev
git rebase master 在dev分支中rebase master
优点 重写了项目历史,并且不会带来合并提交,项目历史会非常整洁,项目历史呈现出完美的线性,绝不要在公共的分支上使用它!
运行 git rebase 之前,一定要确认没有别人在这个分支上搞着,如果有,那就不能rebase,
–continue 解决冲突后自动commit –abort参数来终止rebase的行动
将一个dev分支的更改并入master分支, dev 在master后
缺点 就是如果你违反了 rebase 黄金法则,重写项目历史可能会给你的协作工作流带来灾难性的影响
git checkout master
git merge dev
这样保持分支干净

<<<<<<>>>>
$ git stash 创建stash
$ git stash list 查看stash
$ git stash apply 恢复的同时不会删除stash
$ git stash drop 删除stash
$ git stash pop 恢复的同时把stash内容也删
$ git stash apply stash@{0} 恢复指定stash
1.工作区和暂存区是共用的,在各个分支里都可以看到没被stash的文件。
2.在工作区和暂存区的文件都可以stash,pop之后都会出现在工作区。
3.修改的文件不用add依然可以stash,只有新文件才需要add

<<<<<<<标签管理方便版本管理,回滚时等操作不用去找版本号>>>>>
切换到需要打标签的分支,然后打标签
$ git tag 查看所有标签
$ git show v1.0.0 显示标签v1.0.0,以及标签指向的对象
$ git tag name 创建标签
$ git tag -a name -m “comment” 指定提交信息
$ git tag -d name 删除标签
创建本地标签用例
$ git tag
$ git tag v1.0.0
$ git tag -a v1.2 9fceb02 指定版本补打标签
$ git push origin v1.0.0 推送本地标签到远程
$ git push origin –tags 推送所有标签到远程
$ git push -d origin v1.0.0 删除远端标签
$ git push origin :v1.0.0 删除远端v1.0.0标签
$ git push origin :refs/tags/v1.0.0 删除远端v1.0.0标签

<<<<<<<对比工具配置>>>>>

#difftool 配置
git config –global diff.tool bc4
git config –global difftool.bc4.cmd “\”c:/program files (x86)/beyond compare 4/bcomp.exe\” \”$LOCAL\” \”$REMOTE\””

#mergeftool 配置
git config –global merge.tool bc4
git config –global mergetool.bc4.cmd “\”c:/program files (x86)/beyond compare 4/bcomp.exe\” \”$LOCAL\” \”$REMOTE\” \”$BASE\” \”$MERGED\””
git config –global mergetool.bc4.trustExitCode true

#让git mergetool不再生成备份文件(*.orig)
git config –global mergetool.keepBackup false

<<<<<<<维护 略高级,不太懂 自行研究>>>>>

$ git gc –auto 这个命令一般什么都不干 当有7,000 个左右的松散对象或是 50 个以上的 packfile,Git 才会真正调用 gc 命令
$ 可能通过修改配置中的 gc.auto 和 gc.autopacklimit 来调整这两个阈值
$ git fsck 工具,该工具会检查仓库的数据完整性 –full 选项,该命令显示所有未被其他对象引用 (指向) 的所有对象
$ git add big.zip
$ git commit -am ‘added big data’
$ git rm big.zip
$ git commit -am ‘remove big data’
$ git gc 查看占用空间
$ git count-objects -v 查看对象占用空间
$ git verify-pack -v 识别出大对象,相当于查找大文件可加参数 | sort -k 3 -n | tail -3
$ git rev-list –objects –all | grep 7a9eb2fb 传入 –objects 选项,它会列出所有 commit SHA 值,blob SHA 值及相应的文件路径。可以这样查看 blob 的文件名
$ git log –pretty=oneline –branches — big.zip 找出哪些commit修改了这个文件

$ rm -Rf .git/refs/original
$ rm -Rf .git/logs/
$ git gc
https://git-scm.com/book/zh/v1/Git-%E5%86%85%E9%83%A8%E5%8E%9F%E7%90%86-%E7%BB%B4%E6%8A%A4%E5%8F%8A%E6%95%B0%E6%8D%AE%E6%81%A2%E5%A4%8D

<<<<<<<提交代码时自动跟据代码规则校验 自行研究>>>>>

<<<<<<<搭建git服务器 自行研究>>>>>

分类: git

0 条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注