Git基本工作流程
Git使用40个16进制字符的SHA-1 Hash来唯一标识对象
有四种对象
1.blob 表示文本文件等
2.tree 目录
3.commit 历史提交
4.tag 某个固定的历史提交
获取git仓库
1.git init 目录名(会创建git仓库) git init --bare 目录名(裸仓,不带工作区)
创建一个文件夹 mkdir git_init_repo
进入文件夹,再执行 git init 该文件夹就会被git纳管
2.git clone 需要远程裸仓库的地址 git clone git_bare_repo
git三个区域
working directory:工作区,日常编辑代码的地方
staging area:工作区到历史提交暂存的区域
history repository:commit指向的树形结构
Git add 添加到暂存区
Git rm a 同时删除工作区里面的文件a以及暂存区的文件a
Git reset HEAD a 还原暂存区文件a
Git checkout a 将暂存区代码检出到工作区
Git rm - - cached a 只删除暂存区文件a的引用
Git mv a c git帮我们在工作区你所需要的文件移动或者重命名,在暂存区,把源文件删除,添加新文件引用
Vim .ignore
*.[oa]
*~
*.pyc
!test.pyc(不要被忽略)
Foo/匹配目录,而不是文件
Git暂存区
Git本地分支与合并
- git branch
git branch test 创建新分支
git checkout test 切换到test分支
- git tag
git log --online --decorate -- graph --all 查看提交日志,并且可以看到提交的一些hash code
git tag “v0” a1aba30 基于a1aba30打一个v0的标签,如果后面不跟code,默认用head指向的提交来创建标签
git tag -a “initial_commit” a1aba30 要求输入tag的一些信息
git tag 可以查看当前已经创建的tag
git log --online --decorate -- graph --all 查看历史示意图
git config --global alias.lol “log --oneline --decorate --graph --all” 给该命令起个别名git lol
git show v0 可以查看v0提交的详细信息
git checkout v0 还原到v0
git checkout -b new_branch_name
git stash save -a “stash1”
git stash list 查看stash内容
git stash pop --index stash@{0} 把stash的内容还原到工作区和暂存区,同时删除这个stash
git stash apply --index stash{0} 把stash的内容还原到工作区和暂存区,不会删除这个stash
git stash drop stash{0} 手动删除这个stash,不加引用,默认删除栈第一个
git stash clear 一次性清理stash栈
git merge test 合并test分支
git merge --abort 放弃本次合并
<<<<<<<<<<HEAD
当前所处分支的内容
===========
Test分支的内容
>>>>>>>>>>>test
- git show HEAD 查看HEAD提交的内容信息
- git log 历史commit信息,空格向下翻页
git log --state差异的统计信息
git log --oneline 单行信息
git log --oneline(单行) --decorate(引用信息) --graph(图形信息)--all(所有分支的信息)
- git diff 输入查看我们工作区与暂存区中的差异
git diff --cached 查看暂存区与历史提交的差异
git diff HEAD~2 -- master.txt 指定查看当前工作区与某个历史提交某个文件的差异
git diff --cached HEAD~2 -- master.txt 指定查看暂存区与某个历史提交某个文件的差异
git diff HEAD HEAD~2 比较两个历史提交的差异
git diff HEAD HEAD~2 --master.txt 比较两个历史提交中某个文件的差异
撤销修改
Git checkout --master.txt 用暂存区的内容覆盖工作区的内容
Git reset master.txt 用历史提交还原暂存区
Git log
Git checkout INITIAL_COMMIT --master.txt 从历史提交中还原工作区以及暂存区
Git checkout HEAD --master.txt
Git reset INITIAL_COMMIT --master.txt从历史提交中还原暂存区
- git clean
git clean -n 查看将被clean的内容
gti clean -f 清除
- git revert HEAD
重写历史记录
- git commit -amend 产生一个新的提交,用来替换当前所指向的提交
- git rebase 历史修改能力,维护一个线性的历史记录,做merge时,可以看到log是线性的,而不会出现一个新的分支
如果已经有了一个master分支,有一个master.txt文件,执行下面命令:
Git add master.txt
Git commit -m ”conflict rebase”
Git checkout -b test_rebase HEAD~ 基于上一个HEAD创建一个新的分支,修改master文件
Git add master.txt
Git commit -m ”initial commit on test_rebase”
这时候git log可以看到,基于上一个head提交,出现了两个分支,一个是目前的head,一个是test_base分支,如果想合并成一个线性的,就要用到rebase
执行:
git rebase master合并master.txt
有冲突时,可以用git rebase --abort放弃合并
希望继续的话,修改冲突的文件,vim master.txt,然后执行git add master.txt,将文件添加到暂存区,然后执行git rebase --continue,继续rebase,合并完后,通过git log可以看到,目前的test分支就是从master分支延伸出来的,呈线性结构,而不是产生了一个线性的提交
- git reset
- git reflog维护了head 引用的一个历史
git reflog 查看head的引用历史,配合git reset使用,
git reset --hard(该参数会还原工作区和暂存区) HEAD@{22} head回退到某一个版本
git reset --mixed HEAD@{22} 将head的引用指向该commit,只还原暂存区
git reset --soft HEAD@{22}将head的引用指向该commit,什么都不还原
git远程操作
git clone http://XXXX/urg.git git_remote 把远程文件克隆岛git_remote文件夹中
git fetch 如果远程有新提交时,使用这个命令时,origin/master会指向最新的提交,而本地的master分支还在上一个提交,此时可以调用git merge origin/master来合并分支,可能需要解决冲突
git pull 从服务器上获取最新内容,更新本地的origin/master(远程跟踪分支),然后再把远程跟踪分支中的内容合并到跟踪分支(master)中去,git pull = git fetch + git merge,一般建议使用这个命令,用法如下:
- git fetch origin/master 将远程跟踪分支更新到最新
- git diff master origin/master 查看差异
远程操作中的remote配置