Git 操作指南

仓库操作

新建仓库

git init

实质:新建一个.git目录,所有git有关的信息都在里面。

克隆仓库

git clone

查看远程仓库

git remote -v 

添加远程仓库

git remote add [name] [url]

name 通常为origin

删除远程仓库

git remote rm [name]

修改远程仓库

git remote set-url --push [name] [newUrl]

拉取远程仓库

git pull [remoteName] [localBranchName]

推送远程仓库

git push [remoteName] [localBranchName]

本地分支操作

查看分支

git branch

创建分支

git branch branchName

切换分支

git checkout branchName

删除分支

git branch -d branchName

合并分支

git checkout master
git merge dev 

文件操作

Git 操作指南_第1张图片
工作区 暂存区 历史区

查看状态

 git status

添加追踪

git add filename
git add .

删除文件

git rm 

移动文件

git mv file the/new/path/

重命名文件

git mv file newfile

提交修改

git commit -m 'commit log'

远程分支操作

获取远程分支

git checkout -b [name] [remoteName] 

例如:

git checkout -b myNewBranch origin/dragon

git 1.6版本以后,有简化的命令:

git checkout --track origin/[remoteName]

直接在本地检出与远程分支名字一致的分支。

跟踪远程分支

git branch --set-upstream-to=origin/ localBranchName

备注:如何查看跟踪关系,使用如下命令

    git config --list

拉取远程分支到本地

git pull origin remoteBranchName:localBranchName

推送本地分支到远程

git push origin localBranchName:remoteBranchName

如果remoteBranchName远程分支不存在,则在远端自动创建。

推送当前分支到远程

git push origin remoteBranchName

同理,如果remoteBranchName远程分支不存在,则在远端自动创建。

备注:通常我们都直接用git push,不带后面的参数(建立好了追踪关系)。

删除远程分支

git push origin :remoteBranchName

git配置文件

用户配置文件位置

~/.gitconfig

查看配置信息

git config --list

配置用户名和密码

git config --global user.name gzchenquanbin
git config --global user.email [email protected]

开启颜色显示

git config --global corlor.ui true

配置编辑器

git config --glabal core.editor emacs   #默认为vi或者vim

配置比较工具

git config --global merge.tool vimdiff

其它技巧

查看差异

git diff                               #显示的是工作区和暂存区的差别
git diff --stat                        #只显示差别的统计信息,不详细显示
git diff --cached/staged               #显示的是暂存区和仓库的差别,也就是下次commit的内容
git diff HEAD                          #显示的是工作区和仓库的差别
git diff HEAD file                     #显示的是工作区和仓库指定文件(目录)的差别
git diff commitId file                 #显示的是工作区
git diff commitId1 commitId2           #比较两次commit之间的差异
git diff commitId1 commitId2 file      #比较两次commit之间某个文件的差异
git diff branch1 branch2               #比较两个分支上的最新提交
git diff branch                        #比较当前分支与指定分支的当前目录差异
git diff branch file                   #比较当前分支与指定分支的指定文件(目录)差异

查看提交日志

git log
git log -2   #查看最近两次的提交日志

查看某次提交的详细修改

git show commitId

修改撤销

  • 只在工作区修改,还没有add到暂存区

     git checkout -- file
    
  • 已经add到暂存区

     git reset HEAD file
    

    备注:之前的修改被回退到工作区

  • 已经commit到仓库

     git reset --hard HEAD^          #回退到上一个提交
     git reset --hard HEAD^^         #回退到上上一个版本
     git reset --hard HEAD~10        #往前回退10个版本
     git reset --hard commitID       #指向任意一个提交
    
  • 已经push到远端

     sorry,无能为力了
    

藏匿与恢复

git stash
git stash pop 

.gitignore文件

项目中经常会生成一些Git系统不需要追踪(track)的文件。典型的是在编译生成过程中 产生的文件或是编程器生成的临时备份文件。
当然,你不追踪(track)这些文件,可以 平时不用"git add"去把它们加到索引中。 但是这样会很快变成一件烦人的事,你发现 项目中到处有未追踪(untracked)的文件; 这样也使"git add ." 和"git commit -a" 变得实际上没有用处,同时"git status"命令的输出也会有它们。
这时,你可以在你的顶层工作目录中添加一个叫".gitignore"的文件,来告诉Git系统要忽略 掉哪些文件,下面是文件内容的示例:

# 以'#' 开始的行,被视为注释.
# 忽略掉所有文件名是 foo.txt 的文件.
foo.txt
# 忽略所有生成的 html 文件,
*.html
# foo.html是手工维护的,所以例外.
!foo.html
#  忽略所有.o 和 .a文件.
*.[oa]
#忽略文件夹(所有的.idea子目录)
.idea/
# 如下的只忽略根目录下的.idea目录
/.idea/

.gitignore不生效怎么办

有时候在项目开发过程中,突然心血来潮想把某些目录或文件加入忽略规则,按照上述方法定义后发现并未生效,原因是.gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。那么解决方法就是先把本地缓存删除(改变成未track状态),然后再提交:

git rm -r --cached .
git add .
git commit -m 'update .gitignore'

你可能感兴趣的:(Git 操作指南)