git基础——持续更新

git基础——持续更新

文档

中文文档

常用命令

  • Workspace:工作区
  • Index / Stage:暂存区
  • Repository:仓库区(或本地仓库)
  • Remote:远程仓库

起步

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
> # 显示当前的Git配置
> $ git config --list
> # 编辑Git配置文件
> $ git config -e [--global]
> # 设置提交代码时的用户信息
> $ git config [--global] user.name "[name]"
> $ git config [--global] user.email "[email address]"
>
> # 将当前或新建目录初始化为Git代码库
> $ git init [project-dir]
> $ git add *
> # git add LICENSE
> $ git commit -m 'initial project version'
>
> # 跳过暂存区
> $ git commit -a
> # 克隆一个项目和它的代码历史
> $ git clone [url]
>
>
> # git add可以用它开始跟踪新文件,或者把已跟踪的文件放到暂存区,还能用于合并时把有冲突的文件标记为已解决状态等。 将这个命令理解为“添加内容到下一次提交中”而不是“将一个文件添加到项目中”要更加合适。
> # 显示文件状态
> $ git status -s
> 新添加的未跟踪文件前面有 ?? 标记,
> 新添加到暂存区中的文件前面有 A 标记
> 出现在右边的 M 表示该文件被修改了但是还没放入暂存区,
> 出现在靠左边的 M 表示该文件被修改了并放入了暂存区。
> # 查看未暂存的修改
> $ git diff
> # 查看已暂存的修改
> $ git diff --staged
>
> # git ignore
> https://github.com/github/gitignore
>

别名

$ git config –global alias.co checkout
$ git config –global alias.br branch
$ git config –global alias.ci commit
$ git config –global alias.st status
$ git config –global alias.unstage ‘reset HEAD –’
$ git config –global alias.last ‘log -1 HEAD’
$ git config –global alias.visual ‘!gitk’外部命令

远程仓库

  • git remote -v查看所有远程仓库
  • git remote show 查看某个仓库
  • git remote add 添加仓库
  • $ git fetch 拉取更新,不自动合并到当前分支
  • $ git pull 拉取更新,自动合并到当前分支
  • git push origin master推送到仓库
  • $ git remote rename oldname newname
  • $ git remote rm paul

    取消暂存

  • $ git commit –amend这个命令会将暂存区中的文件提交
  • $ git reset HEAD … 来取消暂存。
  • 撤销未暂存的修改
  • $ git checkout –
  • 将文件变踢出版本控制
  • $ git rm –cached
  • 删除已提交暂存区的文件,同时删除本地
  • $ git rm
  • 修改文件名
  • $ git mv,如果通过外部mv,需要添加新的文件,踢出旧的文件

    标签

  • git tag
  • $ git tag -l ‘v1.8.5*’查看标签
  • $ git tag -a v1.4 -m ‘my version 1.4’打标签
  • $ git show v1.4查看具体标签
  • $ git tag v1.4-lw打轻量标签
  • $ git tag -a v1.2 9fceb02给历史提交打标签,最后的是部分校验和,可用git log查看
  • $ git push origin v1.5给远程仓库也打上标签v1.5
  • $ git push origin –tags给远程仓库同步打上标签

    查看提交日志

    git log [options] [– dir]

  • -n显示最近几次的日志,不写为全部

  • –stat显示哪些文件改变了,增加了几行,减少了几行统计信息
  • -p显示修改的内容
  • –pretty=oneline一次提交在一行显示
  • –pretty=format:”%h - %an, %ar : %s”
  • –graph
  • –since, –after仅显示指定时间之后的提交。
  • –until, –before仅显示指定时间之前的提交。
    $ git log –since=2.weeks
  • –author/–commiter 选项显示指定作者/提交者的提交
  • –grep 选项搜索提交说明中的关键字。
  • -S查看包含字符串的提交 $ git log -Sfunction_name
  • –shortstat只显示 –stat 中最后的行数修改添加移除统计。
  • –name-only仅在提交信息后显示已修改的文件清单。
  • –name-status显示新增、修改、删除的文件清单。
  • –abbrev-commit仅显示 SHA-1 的前几个字符,而非所有的 40 个字符。
  • –relative-date使用较短的相对时间显示(比如,“2 weeks ago”)。
  • $ git log –pretty=”%h - %s” –author=gitster –since=”2008-10-01” \
    –before=”2008-11-01” –no-merges – t/
    查看 Git 仓库中,2008 年 10 月期间,Junio Hamano 提交的但未合并的测试文件,

分支合并

  1. 在当前分支上进行了修改,此时需要在原有分支上进行紧急修复
  • 建立新分支
    $ git checkout -b iss53
    Switched to a new branch “iss53”
    等同于
    $ git branch iss53
    $ git checkout iss53
  • 修改,提交
    git commit -a -m ‘added a new footer [issue 53]’
  • 将修改全部提交!
  • 切回原有分支
    $ git checkout master
    Switched to branch ‘master’
  • 建立分支紧急修复,并提交
    $ git checkout -b hotfix
    Switched to a new branch ‘hotfix’
    $git commit -a -m ‘fixed the broken email address’
  • 切回主分支并合并紧急修复分支
    $ git checkout master
    $ git merge hotfix
  • 删除紧急分支
    $ git branch -d hotfix
    Deleted branch hotfix (3a0874c).
  • 返回修改工作
    $ git checkout iss53
    Switched to branch “iss53”
    $ git commit -a -m ‘finished the new footer [issue 53]’
    你在 hotfix 分支上所做的工作并没有包含到 iss53 分支中。 如果你需要拉取 hotfix 所做的修改,你可以使用 git merge master 命令将 master 分支合并入 iss53 分支,或者你也可以等到 iss53 分支完成其使命,再将其合并回 master 分支。
  • 合并到主分支
    $ git checkout master
    $ git merge iss53
  • 删除修改分支
    $ git branch -d iss53

解决冲突

  • 使用 git status 命令来查看那些因包含合并冲突而处于未合并(unmerged)状态的文件:
  • 在你解决了所有文件里的冲突之后,对每个文件使用 git add 命令来将其标记为冲突已解决。 一旦暂存这些原本有冲突的文件,Git 就会将它们标记为冲突已解决。
  • 图形化工具来解决冲突,你可以运行 git mergetool(mac默认opendiff )
  • git commit

Mac删除.DS_Store

删除项目中的所有.DS_Store。

  • find . -name .DS_Store -print0 | xargs -0 git rm -f –ignore-unmatch
  • echo .DS_Store >> ~/.gitignore
  • git commit -m ‘delete .DS_Store’
  • git push
坚持原创技术分享,您的支持将鼓励我继续创作!