在安装完成 Git 后,开始正式使用前,是需要有一些全局设置的,如用户名、邮箱。
git config --global user.name "your name" // 设置全局用户名
git config --global user.email "your email" // 设置邮箱
查看配置:git config -l
git init
查看目录结构中,就可以看到包含有 .git
子目录,这就说明创建版本库成功
相当于idea中的 vcs----create git repository
git add 001.txt // 添加单个文件到暂存区
git add . // 将当前目录下所有修改添加到暂存区,除按照规则忽略的之外
相当于idea中的git --> add(ctrl+alt+a)
不同之处是在idea中即便不进行add,依旧可以commit
git commit // 如果暂存区有文件,则将其中的文件提交到仓库
git commit -m 'your comments' // 带评论提交,用于说明提交内容、变更、作用等
这个和idea中的git -commit一致,不同点:注释必须写
git status
在idea中,直接在commit界面可以看到改动的所有文件以及未add的文件,双击后可以看到变化:
git diff // 查看版本库中所有的改动
git diff 001.txt // 查看具体文件的改动
在idea中,和上图的commit类似,或者也可以通过右键标签--show diff with working tree查看
git log // 显示所有提交的历史记录
git log --pretty=oneline // 单行显示提交历史记录的内容
相当于idea中的右键项目 -- show history
在 git log
的输出内容中,可以看到每次提交的 ID,是一个 40 位的字符串。
在idea中,也可以找到对应的id:
git reset --hard HEAD^ // 回退到上一个提交版本
git reset --hard HEAD^^ // 回退到上上一个提交版本
git reset --hard 'commit_id' // 会退到 commit_id 指定的提交版本
等同于idea中:
git reflog
git reset --hard 'commit_id'
idea 中
命令行中通过reflog找到id
通过右键项目的reset head进行回退
你修改1个bug,修了一个小时变成了三个bug,这时候你需要对你的代码进行撤销修改操作:
git checkout -- 004.txt // 如果 004.txt 文件在工作区,则丢弃其修改
git checkout -- . // 丢弃当前目录下所有工作区中文件的修改
idea中:
有一个需要注意的地方,撤销按钮隔壁有一个长得很像保存按钮的静态搁置按钮容易被误操作:
点击之后修改的代码也会消失,这个功能主要是用于暂存你修改后的代码,并把你工作区的代码回滚到最后commit的记录,恢复的时候通过:
在被 git 管理的目录中删除文件时,可以选择如下两种方式来记录删除动作:
一、rm + git commit -am "abc"
二、git rm + git commit -m "abc"
另外,git add . 仅能记录添加、改动的动作,删除的动作需靠 git rm 来完成。
最后,rm 删除的文件是处于 not staged 状态的,
也就是一种介于 “未改动” 和 “已提交过” 之间的状态。
idea中直接删除文件后提交即可。
git clone https://gitee.com/rice666/git_demo2.git
idea中即创建项目的时候选择 from version controll
git remote add origin https://gitee.com/rice666/git_demo3.git
git remote [-v] // 显示远程仓库信息
idea中:
git push -u origin "master"
idea:
git remote set-url origin url
git branch // 查看本地分支信息
git branch -v // 查看相对详细的本地分支信息
git branch -av // 查看包括远程仓库在内的分支信息
注意:在
git branch
的输出内容中,有一个分支,前面带有*
号,这标识我们当前所在的分支。
分支创建后,新分支基于当前分支。
git branch dev // 新建 dev 分支
idea中
git checkout dev // 新建完 dev 分支以后,通过该命令切换到 dev 分支
idea:
git checkout -b dev // 新建 dev 分支,并切换到该分支上
想把dev合并到master:先切换到master,在通过merge dev进行合并:
git checkout master // 切换回 master 分支
git merge dev // 将 dev 分钟中的修改合并回 master 分支
idea:先check out 到指定标签,在把需要合并的标签右键合并即可。
git branch -d dev // 删除 dev 分支
git push -u origin/remote_branch 命令推送。
git push origin local_branch:remote_branch
3 本地分支存在,远程分支存在,且关联关系已建立
使用 git push 命令进行推送。如果还没有建立关联,直接使用git push命令呢?
上面中的提示可以看到 ,使用 git push --set-upstream remote_branch 命令 创建本地分支和远程分支的关联关系。
举例:
idea的操作就简单多了,本地标签push时可以直接改名即可:
通过 git fetch
和 git pull
来获取远程仓库的内容。
git fetch origin master
git pull origin master
git fetch
和 git pull
之间的区别:
git fetch
是仅仅获取远程仓库的更新内容,并不会自动做合并。需要先查看更新:
git log -p FETCH_HEAD
或者拉取到一个其他分支(目前还没见过分支创建)
如果没有问题,再进行合并:
git merge origin/master
新建一个本地分支,拉取远程到本地temp,查看不同,没问题则合并,合并后删除即可。
## 在本地新建一个temp分支,并将远程origin仓库的master分支代码下载到本地temp分支;
$ git fetch origin master:temp
## 比较本地代码与刚刚从远程下载下来的代码的区别;
$ git diff temp
## 合并temp分支到本地的master分支;
$ git merge temp
## 如果不想保留temp分支,删除;
$ git branch -d temp
git pull
在获取远程仓库的内容后,会自动做合并,可以看成 git fetch
之后 git merge
。
idea中就比较简单了:
先git-->fetch,随后更新后的远程仓库历史记录,查看不同即可。
merge,可以清楚地看到分支信息,缺点是基线很乱。
rebase,变基,对合并的分支记录进行清除,变基后成为一条漂亮的直线。
想要重新获取之前已经放弃的icon服务,选中记录后点击cherry-pick按钮进行合并(可能需要解决冲突),之后会对icon服务在主干上重新提交,被抛弃的代码也可以重新获得。
是否删除对代码的修改 | 是否删除Commit记录 | 是否会新增Commit记录 | |
Undo Commit | 不会 | 未Push会,已Push不会 | 不会 |
Revert Commit | 会 | 不会 | 会 |
Drop Commit | 会 | 未Push会,已Push不会 | 不会 |
Undo Commit:撤销了Commit的动作。
如果已经进行了Push,线上的Commit记录还是会存在的
Revert Commit:撤销提交记录, 并对改动新生成了一次提交记录。
如果已经进行了Push,线上的Commit记录还是会存在的
Drop Commit:撤销提交,并删除未push的Commit记录