您的位置:首页 > 其它

git基本命令

2017-01-14 22:41 302 查看


基本流程

stash ----> work ----> index ---->
local repo ----> remote repo

stash 暂存空间
work 当前工作空间
index 为git追踪文件目录,通过git add将文件加入index(精心准备提交的文件)
local repo 本地仓库
remote repo 远程仓库


基本命令


CONFIG

git config --global color.ui true
git config --global core.editor vim
git config --global user.name "spch2008"
git congig --global user.email "spch2008@foxmail.com"

# 配置命令缩写
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status


INIT

git init


or
git clone url
git clone https://www.spch2008.com/path/examle.git #只读
git clone user@www.spch2008.com:path/example.git   #读写


FILE

# 查看文件变化
git status

# 类似svn的显示,概要显示文件变化
git status -s

# 添加要提交的文件
git add filename

# 添加当前目录的所有变动文件
git add .

# 添加某一类文件(通配符)
git add '*.txt'

# 删除文件
git rm filename

# 提交文件
git commit -m "fist comment"

# 修改最近一次条件的comment
git commit --amend "this is first comment"

# 查看提交历史
git log


DIFF

# 工作目录的文件与Stage中文件的异同比对
git diff

# (Stage中文件和工作目录中文件)与LocalRepo中文件异同比对
git diff HEAD

# 两次提交的异同比对
git diff commit_version1 commit_version2

# 当前分支与brachname分支的异同比对
git diff branchname

# diff的一个统计结果(几个修改,几个删除等)
git diff --stat


BRANCH

# 查看本地分支
git branch

# 切换到本地分支
git checkout branchname

# 基于当前分支checkout一个新分支
git checkout -b new_branchname

# 将branchname合并到当前分支
git merge branchname

# 删除本地分支(若未合并到其它分支,会报错)
git branch -d branchname

# 强制删除一个分支
git branch -D branchname


REMOTE

# 查看远程仓库
git remote

# 查看远程仓库(含url)
git remote -v

# 添加远程仓库
git remote add remote_repo_name <url>

# 本地仓库推送到远程同名仓库
git push

# 指定仓库名
git push origin branchname

# 拉取远程同名仓库
git pull

# 指定拉取仓库
git pull origin branchname

# 仅拉取内容不与本地仓库merge
git fetch

# git pull 拉取远程仓库,并与本地做merge,实际等于
git fetch && git merge origin/remote-branchname

# 查看远程分支
git branch -a


高级命令

stash ---> work ---> stage ---> local repo ---> remote repo


版本回退


reset

reset 用于版本回退,可以将提交到本地仓库但没有推送至远程的一些提交进行回退,如下表所示,初始版本都是
5
,使用不同的参数
hard
,
soft
,
mix
后,流程中版本情况。
参数workstagelocal repo
版本555
hard333
soft553
mix533
git reset --hard commit_id
git reset --hard 6c9dcada31dfb76688854f280d843ec132b93912
git reset --hard HEAD~1 #由版本5回退至4
git reset --hard HEAD~2 #由版本5回退至3


revert

reset 不适用于远程仓库的回退,因为推送至远程,别人就有依赖的可能。revert会创建一个新的提交,来达到删除的目的。比如原始版本号为:1->2->3->4,现在我想回退至版本3,则最终为:1->2->3->4->5。版本5的内容与版本3一致。
git revert commit_id
git revert 6c9dcada31dfb76688854f280d843ec132b93912
git revert HEAD~2


checkout

创建分支
git co -b branchname


文件回退


checkout

从本地库checkout文件,覆盖工作空间相应文件,本地库文件版本以及内容不受影响。
# 丢弃当前工作空间filename的修改
git checkout filename

# 以commit_id的文件替换当前工作空间filename文件
git checkout commit_id filename

# 距离head n个版本的filename替换当前空间空间filename
git checkout HEAD~n filename


reset

从本地库checkout文件,覆盖stage空间相应文件,本地库文件版本以及内容不受影响。
git reset filename
git reset commit_id filename
git reset HEAD~n filename


当git add filename的时候,想从stage中移除,可以使用git reset filename来恢复,使得stage中文件内容与本地库一致。


其它用法


stash

场景:正在分支new_feature上coding,突然接到通知,master有bug,此时
git co master -b fix_bug
失效,因为new_feature上有未commit的修改,但是coding没有完成,尚不能提交,于是,stash来大显身手。
git checkout master -b new_feature  #创建功能分支
do some work
git commit -m "fist commit"         #提交一次
do some work
git checkout master -b fix_bug      #创建分支修复bug
error: You have local changes to 'file'; cannot switch branches.
git stash                           #收藏修改
git checkout master -b fix_bug      #创建分支修复bug
do fix work
git checkout new_feature            #切回功能分支
git stash pop                       #还原修改,同时删除保存的修改

git stash apply 还原修改,但不删除保留的修改
**提交一次**
,如果new_feature分支没有提交,那么new_feature与master版本一致,git
checkout 新分支,本地修改会带到新分支中。


blame

如果出现代码纠纷,通过
git blame filename
查看某行代码被谁修改。


rebase

场景:创建一个分支,进行开发,开发完后,会有多次提交。然后,在合并到主干的时候,这些comment也会一并被合并到主干。对于主干来说,你开发过程中的一些提交它并不关心,但是却被合并进去了,造成冗余。每次提交都会创建镜像,造成空间浪费,因此,我们在开发完成,测试通过后,可以将之前多个comment压缩成一个进行合并,减少主干压力。
git co -b new_feature #创建分支
git commit -m "first commit"
git commit -m "second commit"
git commit -m "third commit"
git rebase -i master


git rebase 提示信息如下:
pick 5d783e3 first commit
pick 92de2cf second first
pick 130af52 third commit

# Rebase cd083a5..130af52 onto cd083a5
#
# Commands:
#  p, pick = use commit
#  r, reword = use commit, but edit the commit message
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#  f, fixup = like "squash", but discard this commit's log message
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.


将后两个提交压缩到第一个上,修改命令如下:
pick 5d783e3 first commit
squash 92de2cf second first
squash 130af52 third commit


保存后,提示修改commit信息,可以保留原始,也可是新加commit信息
Rebasing (3/3)
# This is a combination of 3 commits.
# The first commit's message is:
first commit

# This is the 2nd commit message:

second commit

# This is the 3rd commit message:

third commit


如果已经推送到远程分支,还没有合并到主干,但由于bug需要修正,此时可以删除远程分支,重新将本地分支rebase后,推送到远端。


数据流动

stash -> work: 
git stash apply
 or 
git
stash pop
 
work -> stash: 
git stash
 
work -> index: 
git add filename
 
index -> work: 
git reset filename
 
index -> local repo: 
git commit
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: