Git基本命令
一、配置文件
$ git config --global user.name &$git config --global user.eamil
因为每次Git提交都会使用该信息。它被永远的嵌入到了个人的提交中:
$ git config --global user.name "wirelessqa"
$ git config --global.user.email "1323@meituan.com"
二、对于git中三个工作目录的理解
工作区:自己的coding区,具体在仓库(.git)文件所在的目录下。
版本库:隐藏的.git文件


三、仓库的基本操作
1、$git init 初始化仓库
现在运行 git init,这会创建一个 Git 仓库,其中的 HEAD 引用指向未创建的分支(master 还不存在)。此时,只有工作目录有内容。

只会会在当前目录生成一个隐藏的.git的文件夹。他位于当前目录下,一般为working directory 所在根目录下。
2、$git clone 克隆仓库
$git clone http://git.com/sh/asxd.git
会在当前目录下生成一个隐藏的.git的文件夹。
3、$git pull更新代码库到最新版本
This operation must be run in a work tree。
4、$git status 查看仓库所在目录的文件的状态

如果想显示一种紧凑的格式,
$git status –s
add前后的状态都是M:
- 当work directionary 与stage不一致时显示为红色
- 当stage与repository不一致时M显示为绿色
5、暂存区操作
- $git add xxx 将代码提交到暂存区
- $git reset HEAD xxxx 删除暂存区的文件。
- $git reset HEAD 将暂存区的目录替换成commit的master分枝所指向的目录。
![潘治颖 > git基本操作 > image2016-11-23 12:19:48.png]()
6、reset
三种reset操作
reset的本质是移动分支指针的指向,而checkout改变的是head指向。

-
- git reset --mixed:此为默认方式,不带任何参数的git reset,这种方式,会回退到某个版本,只保留源码,回退commit和index信息
- git reset --soft:回退到某个版本,只回退了commit的信息(即取消了commit的操作),不会恢复到index file一级。如果还要提交,直接commit即可。
- git reset --hard:彻底回退到某个版本,本地的源码也会变为上一个版本的内容,此命令 慎用!
- git reset --mixed:此为默认方式,不带任何参数的git reset,这种方式,会回退到某个版本,只保留源码,回退commit和index信息
但是还有问题,$git pull的操作会将这一切都白费掉。
reset 做的第一件事是移动 HEAD 的指向。 这与改变 HEAD 自身不同(checkout 所做的);reset 移动 HEAD 指向的分支。 这意味着如果 HEAD 设置为 master 分支(例如,你正在 master 分支上),运行 git reset 9e5e64a 将会使 master 指向 9e5e64a。![]()
git reset --hard 不能对具体某个文件进行操作。
7、$git diff查看代码改动
这个是对status的增强版。
|
工作区
git diff # 查看工作区与暂存区的文件差异git diff origin # 工作区与本地仓库原始版本比较git diff HEAD # 工作区与最后一次本地提交之间的差异暂存区
git diff --cached # 查看暂存区与最后一次本地提交的文件差异查看指定两次commit的diff,并将diff详情保存到diff.txt文件中
git diff 0687ea369b4ea81bd61b01925163e1bbba896b8f a7aa04ea916feb8af569c7b63e31f3d6fff61814 >> diff.txt
|
8、$git log查看提交记录
git log # 查看默认格式的提交记录git log -5 # 查看最近5条提交记录git log -p # 查看提交记录并显示代码改动内容git log -p --author=abc # 查看abc的提交记录并显示代码改动内容git log --since=2011-05-24 --until=2011-05-25 # 查看从2011-05-24到2011-05-25的提交git log --name-only # 只显示文件名git log --pretty=oneline # 只显示一行git log --pretty=format:%h:%s # 自定义格式git log --graph # 图形化查看git log --stat # 查看修改文件统计# 也可以使用 stash 页面来查看 - http://git.sankuai.com/projects/WEB/repos/www/commitsgit help command # command是对应的git命令git help diff # 查看diff命令的帮助git help branch # 查看branch命令的帮助9、$git commit -m "xxxx"提交代码到本地仓库
add将代码提交到暂存区后,执行
$git commit -m "xxxx"(这里xxxx是commit的message)
$git commit . //提交所有staged内容
git commit --amend
10、远程仓库
10.1、将本地仓库关联到远程仓库
git remote add origin https://github.com/pssword/git-repository.git
10.2、$git pull更新仓库
将远程仓库的最新内容更新到work directiontory.
pull = fetch + merge
merge的是当前分枝与当前关联的远程分枝。
10.3、$git push推送到远程仓库
在进行push的过程中,报错:
! [remote rejected] feature/FECHI-3087-bd -> feature/FECHI-3087-bd (pre-receive hook declined)
原因:
在commit时,-m “xxxx”的格式不规范。应该在message中加入push的分支名称:feature/FECHI-3087-bd
所以message为:“feature/FECHI-3087-bd XXXXX”
三、撤消操作
1、$ git commit --amend修改最后一次commit
有时候我们提交完了才发现漏掉了几个文件没有加,或者提交信息写错了。想要撤消刚才的提交操作,可以使用 --amend 选项重新提交:
$ git commit --amend
此命令将使用当前的暂存区域快照提交。如果刚才提交完没有作任何改动,直接运行此命令的话,相当于有机会重新编辑提交说明,但将要提交的文件快照和之前的一样。
启动文本编辑器后,会看到上次提交时的说明,编辑它确认没问题后保存退出,就会使用新的提交说明覆盖刚才失误的提交。
如果刚才提交时忘了暂存某些修改,可以先补上暂存操作,然后再运行 --amend 提交:
$ git commit -m 'initial commit'
$ git add forgotten_file
$ git commit --amend
上面的三条命令最终只是产生一个提交,第二个提交命令修正了第一个的提交内容。
2、取消指定的commit操作
git reset commit号
3、取消已经暂存的文件
git reset HEAD <file>
与git rm --cached <file>...
相当于撤销了add操作
4、取消对文件的修改
git checkout -- <file>
所有对文件(working directory)的修改都没有了,因为我们刚刚把之前版本的文件复制过来重写了此文件。
5、git stash 用法:
git stash: 将改动存起来, 恢复当前代码到初始状态。
git stash apply: 重新提出暂存的代码。//但是栈中的元素没有pop出来。所以最好用git stash pop //出栈顶元素
stash命令可以很好的解决这样的问题。当你不想提交当前完成了一半的代码,但是却不得不修改一个紧急Bug,那么使用’git stash’就可以将你当前未提交到本地(和服务器)的代码推入到Git的栈中,这时候你的工作区间和上一次提交的内容是完全一样的,所以你可以放心的修 Bug,等到修完Bug,提交到服务器上后,再使用’git stash apply’将以前一半的工作应用回来。因为在working directory 与 index 与 head三棵树完全保持一致时才可以进行切换分枝多操作或进行push操作。
stash从本质上是一个伪commit,对 working directory 的改动进行一次快照。但是没有同步三棵树。
当你多次使用’git stash’命令后,你的栈里将充满了未提交的代码,这时候你会对将哪个版本应用回来有些困惑,’git stash list’命令可以将当前的Git栈信息打印出来,你只需要将找到对应的版本号,例如使用’git stash apply stashxxx就可以将你指定版本号为stashxxx的工作取出来,当你将所有的栈都应用回来的时候,可以使用’git stash clear’来将栈清空
git stash apply
四、对文件的操作
与reset的--hard效果相同。
git rm
-
避免使用常规的删除操作进行文件的删除,请使用
git rm来操作 -
git rm分两种情况- 一:删除工作目录的文件,删除暂存区中对应的文件,取消追踪
- 二:只删除暂存区中的文件和该文件的追踪关系
-
情况一:直接使用
git rm <file> -
情况二:使用
--cached参数1$ git rm --cached README此时,README 文件只会从暂存区中删除,并取消与工作目录的追踪关系,而并不删除工作区的文件
-
git rm命令后面可以列出文件或者目录的名字,也可以使用glob模式
git mv
-
尽量使用
git mv来进行文件的移动或重命名 -
运行
git mv就相当于运行了下面三条命令:123$ mv README.md README$ git rm README.md$ git add README从应用上进行理解。head,index,workingsapce 是三棵独立的树。add同步的是index,workingsapce两棵树。而commit同步的是head,index两棵树(此时index,workingsapce两棵树已经同步了)
五、untracked files未跟踪文件
1、定义
未跟踪的文件意味着Git在之前的快照(提交)中没有这些文件;Git 不会自动将之纳入跟踪范围,除非你明明白白地告诉它“我需要跟踪该文件”,因而不用担心把临时文件什么的也归入版本管理。
并且在git init操作时就已经将所有文件都git add了,即快照都已经有了。
2、untracked=》tracked:跟踪新文件
使用命令 git add 开始跟踪一个新文件。所以,要跟踪 README 文件,运行:
$ git add README
3、忽略某些文件
一般我们总会有些文件无需纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。我们可以创建一个名为 .gitignore 的文件,列出要忽略的文件模式。


浙公网安备 33010602011771号