Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

git 详细的操作指南笔记(从零开始) #3

Open
aototo opened this issue Mar 14, 2017 · 5 comments
Open

git 详细的操作指南笔记(从零开始) #3

aototo opened this issue Mar 14, 2017 · 5 comments

Comments

@aototo
Copy link
Owner

aototo commented Mar 14, 2017

设置

安装git后我们需要配置一下,告诉git我们的基本信息等等..一般在用户范围内去配置 git ,也就是在 global 范围。

  • global 全局设置

      $ git config --global user.name 'xxxx'
      $ git config --global user.email 'xxxx'
    

    同时我们可以用 $ git config --list来查看我们的设置,
    如果需要修改重新设置使用

      $ git config --unset --global user.name
    

    全局范围的配置会保存在当前用户的主目录下面 叫.gitconfig 的文件里面。我们可以使用cat ~/.gitconfig来查看

      $ cat ~/.gitconfig
    
    设置别名-alias

    通过别名可以简化经常输入的内容,别名的配置也可以在gitconfig里面查看

      git config --global alias.cm commit
    

    这样当你在commit 的时候 就可以 使用 git cm -m 'xx'来代替了。

  • 全局忽略文件

    有时候我们需要去忽略系统生成的文件比如mac 下的.DS_Store,我们可以在全局设置gitignore

      git config --global core.excludesfile ~/.gitignore_global
    

    然后在gitignore文件里面写入需要忽略的文件

      .DS_Store
    

    你可以参考下面的链接来看更多要忽略的文件
    https://gist.github.com/octocat/9257657

    如果在项目中可以创建名为.gitignore,为每个项目配置。具体忽略的文件可以查看上面的链接

    如果你想忽略掉已经跟踪的文件,可以使用 git rm cached选项,再指定一下文件名称,这样可以取消跟踪指定的文件。


Git 基础命令

  • 初始化Git

    控制和管理项目需要初始化git

      $ git init
    
  • 查看当前修改 -git status

      $ git status
    
  • 查看提交的信息 -git log

      $ git log
      $ git log --oneline //显示在一行
      $ git log --oneline --before = '2017-01-01' //显示2017-01-01的提交
    

你可以使用git help log 查看更多信息

  • 提交 -git commit

    添加新的文件,或者修改已有的文件,之后使用commit告诉 git 你做了哪些事情。可以使用git log 查看以往的提交。

      $ git commit -m '这里来描述事情'
    
  • 对比差异 -git diff

    如果你修改了文件,你想查看自己目前修改的了哪些,可以使用

      $ git diff
    

    如果想跟暂存区里面的文件进行对比(暂存区就是git add 文件),可以用

      $ git diff --staged
    
  • 重命名,移动 -git mv

    git mv可以重命名或者移动文件和目录

      $ git mv xx1.js xx2.js //重命名
      $ git mv xx1.js js/ //移动文件
      $ git mv js asset/ //移动目录
    
  • 删除文件 -git rm

      $ git rm fileName
    

    如果你想删除暂存区的可以使用

    $ git rm --cached fileName

  • 撤销操作 -git amend

    如果提交commit之后发现有遗漏的文件可以使用该命令,具体流程

      $ git conmmit -m "xxx.js"
      $ git add "xxx2.js"
      $ git commit --amend --no-edit
    

上面的三条命令最终只是产生一个提交,第二个提交命令修正了第一个的提交内容。提交之后你就可以使用git log --name-status提交了哪些文件

  • 修改撤销文件 -git checkout

    比如你删除了index.html,使用以下命令恢复文件,也可以恢复之前修改过的

      $ git checkout  -- index.html 
      $ git checkout .  //会取消所有本地的
    
  • 撤销已经add的文件 -git reset

有时我们会不小心git add,取消某些add的文件。(还原暂存区)

    $ git reset HEAD fileName
  • 撤销已经commit的文件 -git reset

    假如你的项目已经commit了,可以用到该命令恢复到指定的commit。
    第一步 git log --oneline

      5c422a3 add html
      6804500 Delete a.css
    

    第二步

      $ git reset id  //id 是指上面commit 的id
    

    第二种方法,更快捷的

      $ git reset HEAD^ // 回退到上一个commit, 默认--mixed
    

    git reset 有3个选项,
    --soft 不会影响到工作目录还有暂存区里的东西
    --hard 工作目录,暂存区直接重置到指定的提交状态
    --mixed 默认选项,会把暂存区里的东西重置到指定提交状态,并且指针指向这个提交。

    一般情况, 如果你发现commit文件是存在bug情况,你只需要修改文件代码,那就用默认的mixed,hard会重置文件的内容到指定的commit,也就是说你的之前写的代码会被重置删除掉,切记。

      git reset [--soft | --mixed | --hard] [-q] [<commit>]
    
  • 保存修改恢复进度文件 -git stash

    stath 可以让工作进度先保存起来,需要用到的时候在恢复。
    场景: 你修改文件app.js ,然后你git add file后你暂时不想跟后面的文件一起commit,那么就可以先储存起来

      $ git stash save "这里可以是说明"
    

    查看保存的进度,或者显示进度的目录

      $ git stash list
      $ git stash show -p stash@{..}
    

    恢复进度(取出之前保存的进度)

      $ git stash apply stash@{..}
    

    删除不需要的进度

      $ git stash drop 或者 后面跟上stash@{..}代号
    

分支branch

Git 分支 - 何谓分支

  • 查看,创建项目分支

      $ git branch
      $ git checkout -b [name_new_branch] 
    
  • 删除分支

      $ git branch -d [name_branch] 
    
  • 切换分支

      $ git checkout [branch-name]
    
  • 对比分区的区别

      $ git checkout branch
    
  • 分区合并

      $ git merge [your_branch]
    

    注意:如果你合并master ,首先需要切换到master 分支下进行合并。

  • 分区对比

      $ git diff [branch]..[branch]
    
  • 重命名branch

      $ git branch -m [branch] [new_name_branch]
    

远程 remote

  • 添加远程地址

      $ git remote add origin [git_address]
    
  • 分支推送到远程的版本

      $ git push origin master
    

具体很多细节去多看看深入的实战


git log 命令支持选项参考这里

选项 说明
-p 按补丁格式显示每个更新之间的差异
--word-diff 按 word diff 格式显示差异。
--stat 显示每次更新的文件修改统计信息。
--shortstat 只显示 --stat 中最后的行数修改添加移除统计。
--name-only 仅在提交信息后显示已修改的文件清单。
--name-status 显示新增、修改、删除的文件清单。
--abbrev-commit 仅显示 SHA-1 的前几个字符,而非所有的 40 个字符。
--graph 显示 ASCII 图形表示的分支合并历史。
--relative-date 使用较短的相对时间显示(比如,“2 weeks ago”)。
--pretty 使用其他格式显示历史提交信息。可用的选项包括 oneline,short,full,fuller 和 format(后跟指定格式)。
--oneline --pretty=oneline --abbrev-commit 的简化用法。

更多的深入了解可以去git api查看
参考
git 官网
5.2 代码回滚:Reset、Checkout、Revert的选择
git 中文
Create a new branch with git and manage branches

@linzx89757
Copy link

取消已经commit的修改 -git revert(标题这里应该是reset吧),文章不错,虽不适合新手入门,但可以当做一门手册

@aototo
Copy link
Owner Author

aototo commented Mar 15, 2017

@amenrun 谢谢提醒!

@cc2e
Copy link

cc2e commented Apr 26, 2017

very good

@super456
Copy link

作者你好,感谢您的分享,挺全面的,又让我认认真真的复习了一遍,挺好的,不过也发现了一些需要改正的地方,比如说:第一个错误,还有这个,建议改为分支,比较好理解,因为很多网上的教程都是用分支来解释的,您突然来个“分区”,有点懵逼
default
default
哈哈哈,随便看到的,建议修改一下:smile:

@super456
Copy link

我也顺便补充一些作者没有提到的内容(主要是想装一下逼 :simple_smile:):
git add -A 也是一次性把更改的文件加到暂存区
git add -u 一次性添加更改过的文件到暂存区,但是不包括untracted的文件
git add -i 可以查看更改且没有提交的文件

git add --cashed 当我们需要删除暂存区或分支上的文件, 但本地又需要使用, 只是不希望这个文件被版本控制, 可以使用
注意与git rm [filename]的区别

git branch [new_name_branch] git checkout [new_name_branch]这是第二种创建分支的方法,虽然是分两步的,但是也是可以学习使用的
git rebase 也是合并分支的方法,跟merge合并分支的方法不同,各有各的有点,这里不详细解释
git branch -D [branchname] 强行删除分支
git tag [tagname] 新建标签,感觉这个作用挺大的,大项目足够多人开发和一直维护的时候,这个挺实用的
git tag -a [tagname] -m "message"创建一个带有说明的标签信息,-a指定标签名,-m
指定说明文字
git tag [tagname] [commit_id]可以对某次提交绑定一个标签
git show [tagname]查看指定的标签信息
git checkout [tagname] 切换到指定标签
git tag -d [tagname]删除标签
git push origin [tagname]可以推送远程标签
git push origin --tags推送全部尚未推送的标签
如果要删除已经推送的远程的标签,要先删除本地的标签git tag -d [tagname],再删除远程的标签git push origin:refs/tags/[tagname]
git reflog 可以查看所有分支的所有操作记录
git remote 可以查看远程仓库信息
git remote -v可以查看远程仓库更详细的信息
git clone git@github.com:yourname/repo.git使用的事SSH协议复制远程仓库的文件,也支持https协议复制远程仓库
git branch -r可以查看远程分支列表
git pull origin master 通过拉取远程仓库的文件来更新本地仓库
以上这些,纯属参考,欢迎作者采纳

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants