git基础——持续更新
常用命令
- Workspace:工作区
- Index / Stage:暂存区
- Repository:仓库区(或本地仓库)
- Remote:远程仓库
起步
# 显示当前的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 提交的但未合并的测试文件,
分支合并
- 在当前分支上进行了修改,此时需要在原有分支上进行紧急修复
- 建立新分支
$ 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