git常用命令

  • 初始化

git init   初始化一个新的项目(会生成一个.git文件)

git --bare init  建立裸仓库,仓库中不包含工作目录

基本设置:

git config --global commit.template Name   设置提交时的模板

git config --global core.autocrlf  true 表示启用转换,对windowslinux字符转换很有用

git config --global user.name "John Doe"  设置用户名

git config --global user.email  johndoe@example.com 设置邮箱

  • 配置文件文件存放位置:

/etc/gitconfig 文件:系统中对所有用户都普遍适用的配置。若使用 git config 时用 --system 选项,读写的就是这个文件。

~/.gitconfig 文件:用户目录下的配置文件只适用于该用户。若使用 git config 时用 --global 选项,读写的就是这个文件。

.git/config 文件 :仅仅针对当前项目有效git configiu是设置的当前项目的设置

  • 命令别名

要设置当前用户的命令别名,要修改~/.gitconfig文件

[alias]

    co = checkout

    ci = commit

比如上面,添加了alias选项卡,将checkout简化成co

git config --global alias.co ‘checkout’  也能实现上面相同的效果

  • 配置忽略文件:

可以创建一个名为 .gitignore 的文件,列出要忽略的文件模式。要养成一开始就设置好 .gitignore 文件的习惯,以免将来误提交这类无用的文件。来看一个实际的例子:

# 此为注释 将被 Git 忽略

# 忽略所有 .a 结尾的文件

 *.a

# lib.a 除外

!lib.a

# 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO

 /TODO

 # 忽略 build/ 目录下的所有文件

 build/

 # 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt

 doc/*.txt

# 忽略 doc/ 目录下所有扩展名为 txt 的文件 

Doc /**/*.txt

注意,假如此时我的暂存区里有一个test.txt,然后我再配置.gitignore文件,忽略掉txt结尾的文件,那么将不会忽略掉原来的test.txt,而只会忽略掉之后这个文件夹里面新添加的txt文件

 

  • 提交:

git commit

git commit -a  用于跳过暂存,将所有追踪的文件进行提交

git commit --amend  如果是修改描述,就直接在之前提交后,直接运行

如果是添加新的文件或者删除、修改文件,都按照想要进行的操作,进行修改、删除,然后添加到暂存区,再运行上面的命令

注意:这会改变commit的标识,相当于一次rebase,所以不要再已经推送到远程仓库后使用这种操作

提交建议:

本次更新的简要描述(50 个字符以内)

如果必要,此处展开详尽阐述。段落宽度限定在 72 个字符以内。

某些情况下,第一行的简要描述将用作邮件标题,其余部分作为邮件正文。

 其间的空行是必要的,以区分两者(当然没有正文另当别论)。

如果并在一起,rebase 这样的工具就可能会迷惑。

 另起空行后,再进一步补充其他说明。 - 可以使用这样的条目列举式。 - 一般以单个空格紧跟短划线或者星号作为每项条目的起始符。每个条目间用一空行隔开。 不过这里按自己项目的约定,可以略作变化。

  • 查看提交日志:

Git log 会打印出当前分支的所有提交历史

Git log -p 表示显示最近一次提交的详细信息以及与前一次的差异

Git show <标识符>  表示显示指定的提交与其上一次之间的差异,以及它的详细信息

Git log -num  表示显示最近提交的num条记录

  • 图形化工具

运行gitk这条命令,就会出现图形化

  • 处理暂存区工具

git add -i  是一个交互式处理工具,可以很方便的处理暂存区,包括加入暂存区,撤销暂存区文件,不追踪文件等等功能

  • 查看区别

git status查看当前的状态(已修改,已暂存,未跟踪等等)

git diff命令可以查看已暂存与已修改之间的差别

git diff --cached 可以查看已经暂存起来的文件和上次提交时的快照之间的差异

git diff master...contrib中,... 添加在原始分支和当前分支中间,表示比较mastercontrib分支的共同祖先和contrib之间的差别,这样就能看出分支即将引入的代码

  • 克隆别人的项目:

git clone  git://github.com/schacon/grit.git    或者

git clone  git://github.com/schacon/grit.git  mygrit

这会在当前目录下生成一个grit或者mygrit的目录,里面有所有的文件

  • 添加和删除远程仓库:

git remote add [shortname] [url]

git remote rm [shortname]

  • 查看远程仓库:

git remote    只是列出远程仓库的名字

git remote -v   列出远程仓库的名字和地址

git remote show [remote-name] 显示某个仓库的详细信息

git remote rename oldName newName  修改某个远程仓库在本地的简称

 

  • 远程仓库和克隆项目的区别:

为项目添加远程仓库,远程仓库和自己的项目其实是同一个项目,只是可以通过远程仓库拉取别人的提交成果,共同完成项目

而克隆别人的项目,是自己没有这个项目的任何资源,克隆一个别人的项目,把这个项目作为自己的一个本地的项目

  • git分支

git branch name           用于创建分支

git checkout -b name       创建新的标签并且换到新的标签

git branch                查看分支

git branch -d              删除分支

git checkout              切换到新的分支

git merge                合并分支

git branch --merged        查看当前分支的上游(并入当前分支的分支)

git branch --no-merged     查看当前仍未并入的分支

分支的合并需要格外注意,如果是对同意文件修改的两个分支合并,必定产生冲突,需要手动讲两个文件内容进行取舍,变成一致后才能成功,如果是对不同文件的编辑或者修改新增等,能够直接和并成功

  • 变基:

如图里c3’就是打的补丁,这样提交历史就不会有c3,而是c3’,是基于c4的提交

git rebase [主分支] [特性分支]    将特性分支的补丁打到主分支上

变基也可以放到其他分支进行,并不一定非得根据分化之前的分支。

git rebase --onto master server client  serverclient两个特性分支的不同部分作为补丁,打到master分支上

一定要注意:一旦分支中的提交对象发布到公共仓库,就千万不要对该分支进行变基操作。因为这可能导致下载公共仓库里面提交的人,得到错误的提交历史

  • git标签:

Git tag -a  v1.0  带注释的标签,记录这标签是啥时候打的,谁打的,添加个标签的注解

git tag -a version 85fc7e7(提交的校验码)  能够对之前的提交追加标签

git tag -d v1.1  删除标签

Git tag   列出标签

git tag -l 'v1.4.2.*'  按照匹配列出标签

git show v1.0  查看标签的注释内容

Git push 远程库名  标签名  推送标签到远程服务器上

Git push 远程库名 --tags  表示推送所有标签到远程库

  • 抓取数据

git fetch <远程仓库名>            取回远程仓库所有数据,不合并

git fetch <远程仓库名>  <分支名>  取回远程仓库固定分支数据,不合并到主分支

git pull <远程主机名> <远程分支名>:<本地分支名> 拉取远程分支上的数据,合并到本地分支

git pull <远程主机> <远程分支>  拉取远程分支和当前分支合并

git pull  有跟踪分支时,可以自动获取

比如master就是一个跟踪分支,那么在master上用git pull 会自动将远程master分支数据拉取下来进行合并

  • 远程分支

远程分支(remote branch)是对远程仓库中的分支的索引。它们是一些无法移动的本地分支 (远程仓库名)/(分支名) 这样的形式表示远程分支远程分支不用自己创建,在拉取远程仓库的数据时,由git自己创建

远程分支无法移动,但是通过git fetch 抓取下来的远程分支会指向最新的记录,同时可以通过merge语句将远程分支的内容合并到本地分支

删除处于服务器上的远程分支:git push 远程仓库名 :远程分支名

$ git checkout -b Name origin/serverfix   创建跟踪分支,跟踪分支是从远程分支checkout出来的,是可以移动的,并且在跟踪分支里面用pushpull都可以自动推送或者拉取远程仓库对应的分支,并进行合并

  • 推送数据:

Git push   表示将本地master分支上的提交数据推送到远程仓库的master分支(因为跟踪分支的作用)

Git push  远程仓库名  本地分支名 :远程分支名      表示推送自己的分支到服务器,并且指定了此分支在服务器上的名字

  • 删除数据:

git rm   不再跟踪,并且完全删除该文件

git rm -f  如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 

git rm --cached  仅仅是想从跟踪清单里面删除,而不是删除文件

  • 重命名:

git mv oldName newName 重命名并不会体现出这是一次改名操作。不用从新提交

  • 储藏

储藏能够让你在工作目录中存在修改未暂存,以及暂存的文件在切换分支时不用提交,而是新开一个栈对数据进行保存

git stash              对工作目录进行储藏

git stash list           查看现有的储藏

git stash apply         应用最新的一次储藏

git stash apply stashID   应用指定的储藏(不会删除暂存)

git stash apply --index   

git stash pop stashID    应用并且删除暂存

git stash drop stashID    删除栈上的暂存

git stash show -p stashID | git apply -R    取消暂存的应用

git stash branch name   应用场景是当你储藏了修改,并且继续在本分支里面工作,工作时修改了和储藏里面一样的文件,那么重新应用储藏时会发生冲突,用这个命令会新建一个分支,并且将储藏的数据pop到新分支

被暂存的数据不一定要在自己的分支恢复,可以将暂存的数据放到另一个分支里面进行恢复

原文地址:https://www.cnblogs.com/by-my-blog/p/11493785.html