首页 > 代码库 > git使用

git使用

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本地分支与合并

  1. git branch

git branch test 创建新分支

git checkout test 切换到test分支

  1. 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

 

  1. git show HEAD 查看HEAD提交的内容信息
  2. git log 历史commit信息,空格向下翻页

git log --state差异的统计信息

git log --oneline 单行信息

git log --oneline(单行) --decorate(引用信息) --graph(图形信息)--all(所有分支的信息)

  1. 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从历史提交中还原暂存区

  1. git clean

git clean -n 查看将被clean的内容

gti clean -f 清除

  1. git revert HEAD

 

重写历史记录

  1. git commit -amend 产生一个新的提交,用来替换当前所指向的提交
  2. 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分支延伸出来的,呈线性结构,而不是产生了一个线性的提交

 

  1. git reset
  2. 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,一般建议使用这个命令,用法如下:

  1. git fetch origin/master 将远程跟踪分支更新到最新
  2. git diff master origin/master 查看差异

 

远程操作中的remote配置

 技术分享

 

git使用