git 详细的操作指南笔记(从零开始)
aototo opened this issue · 5 comments
设置
安装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 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
取消已经commit的修改 -git revert(标题这里应该是reset吧),文章不错,虽不适合新手入门,但可以当做一门手册
@amenrun 谢谢提醒!
very good
我也顺便补充一些作者没有提到的内容(主要是想装一下逼 :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
通过拉取远程仓库的文件来更新本地仓库
以上这些,纯属参考,欢迎作者采纳