git 基本用法

参考于http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

Linux下获取帮助

man git-***
man git-diff
man git-checkout
git help <command>  # 显示command的help

配置

git config --global user.name "Your Name"
git config --global user.email "email@example.com"

git config --global color.ui true
git config --global push.default matching

加上–global 之后在写入到 ~/.gitconfig中, 不加–global 写入到当前repo中.git/config中

开启新项目并初始化

cd /home/git/myproject  
git init  
git add .  
git commit   #这个步骤会自动进入编辑模式,要求开发者提交“开发信息”   git commit -m "commit information"

修改最后一次提交的信息

git commit --amend

查看log

git log --pretty=oneline    # commit就一行
git log -p                  # 输出详细的日志内容  
git log -p -2               # 查看最近两次详细修改内容的diff
git log --graph             # 带分支合并图,
git log --abbrev-commit     # 简写commit ID

查看命令历史

git reflog

版本库(Repository)

工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。

Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,
还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。

这里写图片描述

git status 查看git状态

git status

$ git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
#
#       new file:   ps.txt
#

git status -s: 查看简洁状态

$ git status -s
AM date.txt
MM ps.txt

git status -s 会出现2个字符
第一个M 表示 文件在History与Staging Area有差异
第二个M表示 文件在Staging Area与Working Directory有差异
这里写图片描述

diff 对比

查看工作区和版本库里面最新版本的区别

git diff HEAD -- readme.txt

这里写图片描述
git diff 比较Working Directory与 Staging Area之前的区别,一旦git add 之后,如果想比较History和Staging Area之前的比较用 git diff - - staged,
如果想比较Working Directory与History之间的区别用git diff HEAD ,
如果显示太多 使用git diff - - stat

git diff <file>     # 比较当前文件和暂存区文件差异
git diff
git diff <$id1> <$id2>   # 比较两次提交之间的差异
git diff <branch1>..<branch2> # 在两个分支之间比较
git diff --staged   # 比较暂存区和版本库差异
git diff --cached   # 比较暂存区和版本库差异
git diff --stat     # 仅仅比较统计信息

生成patch

git diff > diff.patch         # 生成补丁
git apply < diff.patch        # 打补丁
git apply --check diff.patch  # 测试补丁能否成功

checkout

git checkout -- file

命令git checkout – readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:

一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
另一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

reset 撤销文件

参考与http://www.cnblogs.com/craftor/archive/2012/11/04/2754140.html

git reset

仅用HEAD指向的目录树重置暂存区,工作区不会受到影响,相当于将之前用git add 命令更新到暂存区的内容撤出暂存区。引用也未改变,因为引用重置到HEAD相当于没有重置。

git reset HEAD

同上

git reset -- filename

仅将文件filename 的改动撤出暂存区,暂存区中其他文件不改变。相当于命令git add filename 的反操作。

git reset HEAD filename

同上

git reset --soft HEAD^

工作区和暂存区不改变,但是引用向前回退一次。当对最新的提交说明或者提交的更改不满意时,撤销最新的提交以便重新提交。

之前提到过修补提交命令git commit –amend,用于对最新的提交进行重新提交以修补错误的提交说明或者错误的提交文件。修补提交命令实际上相当于执行了下面两条命令。(注:文件.git/COMMIT_EDITMSG保存了上次的提交日志)

git reset --soft HEAD^
git commit -e -F .git/COMMIT_EDITMSG
git reset HEAD^

工作不改变,但是暂存区会回退到上一次提交之前,引用也会回退一次。

git reset --mixed HEAD^

同上

git reset --hard HEAD^

彻底撤销最近的提交。引用回退到前一次,而且工作区和暂存区都会回退到上一次提交的状态。自上一次以来的提交全部丢失。

–soft –mixed –hard,会对working tree和index和HEAD进行重置。

回退版本

git reset --hard HEAD^ 
git reset --hard [commit-id]

上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100

git rm

把readme.txt 从版本库中删除

git rm readme.txt

在没提交前恢复

git checkout HEAD readme.txt

git clean

git reset --hard
git clean -fdx

将添加的文件,目录等全部删除,恢复到HEAD的状态

git rm –r --cached abc.xxx

branch 分支

git branch dev        # 创建一个名为dev的branch
git checkout -b dev   # 创建一个名为dev的branch,并转到dev分支上
git branch            # 显示branch

这里写图片描述

合并分支

git checkout master
git merge dev         # git merge用于合并指定分支到当前分支。 dev分支合并到master上 

这里写图片描述

这里写图片描述

删除分支

git branch -d dev     # 删除 dev 分支
git branch -D dev     # 强行删除

解决冲突

master: readme.txt

this is the first version

feature1: readme.txt

this is the 1st version

合并分支产生冲突

git checkout master
git merge feature1

Auto-merging a.txt
CONFLICT (content): Merge conflict in a.txt
Automatic merge failed; fix conflicts and then commit the result.

打开readme.txt

<<<<<<< HEAD
this is the first version
=======
this is the 1st version
>>>>>>> feature1

修改为:

this is the 1ST version

再次提交

git add readme.txt
git commit -m "conflict fixed"

这里写图片描述

git stash

git stash

Saved working directory and index state WIP on master: 002aefa conflict fixed
HEAD is now at 002aefa conflict fixed

git stash list

stash@{0}: WIP on master: 002aefa conflict fixed

git stash apply stash@{0}
git stash drop

用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除

git stash pop

用git stash pop,恢复的同时把stash内容也删了

tag 标签

git tag v1.0
git tag v0.01 63bf4b106
git tag -a v0.1 -m "version 0.1 released" 3628164

创建带有说明的标签,用-a指定标签名,-m指定说明文字

查看标签:

git tag

标签不是按时间顺序列出,而是按字母排序的

显示标签:

git show v0.1

删除标签:

git tag -d v0.9

.gitignore

在工作目录下不想被git管理的,可以在工作目录下新建一个.gitignore文件,
可以参考https://github.com/github/gitignore

# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
env/
build/
develop-eggs/
dist/
downloads/
eggs/
*.egg-info/
.installed.cfg
*.egg

配置别名

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 remote add origin git@code.csdn.net:zhubinqiang/mytms.git 

push到远程端

git push -u origin master

把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程。

由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。

git push不上, 在git server 版本库中端做一下操作

chmod 755 -R .git/refs/  
chmod 755 -R .git/objects/  

在.git/config添加以下内容

[receive]  
    denyCurrentBranch = ignore 

添加到从CSDN上的repo
1.先在CSDN的git repo中新建一个mytms的repo

2.在本地初始化,并添加远程repo:

    mkdir mytms   
    touch README.md  
    git init  
    git add README.md  
    git commit -m "first commit"  
    git remote add origin git@code.csdn.net:zhubinqiang/mytms.git  
    git push -u origin master  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值