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分枝所指向的目录。

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 pull的操作会将这一切都白费掉。

Git 重置揭秘

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/commits
8、文件操作
git 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

  1. 避免使用常规的删除操作进行文件的删除,请使用 git rm 来操作

  2. git rm 分两种情况

    • 一:删除工作目录的文件,删除暂存区中对应的文件,取消追踪
    • 二:只删除暂存区中的文件和该文件的追踪关系
  3. 情况一:直接使用 git rm <file>

  4. 情况二:使用 --cached 参数

    1
    $ git rm --cached README

    此时,README 文件只会从暂存区中删除,并取消与工作目录的追踪关系,而并不删除工作区的文件

  5. git rm 命令后面可以列出文件或者目录的名字,也可以使用 glob 模式

git mv

  1. 尽量使用 git mv 来进行文件的移动或重命名

  2. 运行 git mv 就相当于运行了下面三条命令:

    1
    2
    3
    $ 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 的文件,列出要忽略的文件模式。

 

 

posted @ 2017-07-27 19:39  月上柳梢头,  Views(280)  Comments(0)    收藏  举报