git 使用总结
git 用户配置
先设置好用户名和邮箱,这些信息会在 commit 记录中出现.之后再添加其他配置,方便使用.详细命令如下:
1 | git config --global user.name "lichen404" #填写用户名 |
配置 github
生成 SSH key 并把它添加到 Github
- 进入 https://github.com/settings/keys
- 点击 New SSH key,你需要输入 Title 和 Key,但是你现在没有 key,往下看
- 打开 Git Bash
- 复制并运行
rm -rf ~/.ssh/*
把现有的 ssh key 都删掉. - 运行
ssh-keygen -t rsa -b 4096 -C "f360family@gmail.com"
. - 按回车三次,运行
cat ~/.ssh/id_rsa.pub
,得到一串东西,完整的复制这串东西. - 回到上面第 2 步的页面.
- 在 Key 里粘贴刚刚你你复制的那串东西.
- 点击 Add SSH key
- 回到 Git Bash
- 运行
ssh -T git@github.com
git 的一些概念
- 工作区:就是你在电脑里能看到的目录.
- 版本库: 工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库.
git add 就是把文件添加进版本库,实际上是把文件修改添加到暂存区;
而git commit 实际上就是把暂存区的所有内容提交到当前分支.
常用 git 操作
命令 | 说明 |
---|---|
git init | 初始化当前目录为 git 仓库 |
git status | 查看显示当前仓库文件状态,-s (summary) -b (branch),-sb 就是显示当前所有文件的状态 |
git add | 将文件添加到「暂存区」,表示要加到仓库里,git add . 意思是把当前目录(.表示当前目录)里面的变动都加到「暂存区」 |
git commit -m “message” | 将你 add 过的内容提交到仓库里,并添加注释信息,方便日后查阅. - v verbose 显示更多信息 |
git merge | 合并分支 Ex: git merge test |
git switch(git checkout) | 切换分支 |
git branch | 创建分支 Ex:git branch x 参数 - D 删除分支 |
git log | 查看版本提交历史 |
git rm | 从版本库和工作区中删除该文件,作用和git add 相反。当只是需要从版本控制中移除本地还需要使用时可以使用 git rm --cached file_path |
git reset --hard 版本号 |
版本回退,注意这个操作会使没有 commit 过的变动消失 |
git reflog | 查看所有版本提交历史,包含已经“删除”的版本 |
git diff | 用于比较当前文件和暂存区文件的差异,暂存区文件就是你add过的文件 |
git restore | git restore 用来取代 git checkout 来实现撤销对工作区文件的修改,让文件回到最近一次git commit 或 git add 时的状态 Ex:git restore readme.txt.git restore --staged 取代了 git reset HEAD ,可以把暂存区的修改撤销掉,重新放回工作区 Ex:git restore readme.txt –staged |
git fetch 和 git pull
git fetch 是将远程主机的最新内容拉到本地但并不进行 merge,用户可以自行决定是否 merge。在取回更新后,会返回一个 FETCH_HEAD,指的是某个 branch 在服务器上的最新状态,我们可以在本地通过它查看刚取回的更新信息:
1 | git log -p FETCH_HEAD |
可以通过这些信息来判断是否产生冲突,已确定是否将更新 merge 到当前分支。
git pull 是将远程主机的最新内容拉到本地并直接合并,即 git pull = git fetch + git merge,这样可能会产生冲突,需要手动解决。
git rebase
git rebase 可以把本地未 push 的分叉提交历史整理成直线
使用 Github
关联远程仓库: Ex:
git remote add origin git@github.com:lichen404/jirengu.git
origin 为远程仓库的名称,可以修改,但通常使用这个提交代码: Ex:
git push origin master //提交本地 master 分支到远程仓库master分支
git push origin master:test //提交本地 master 分支到远程仓库的test分支
参数 -f 为强制提交,会覆盖远程仓库的版本 参数 -u 记住上次push的分支,下次避免重新输入,直接git push即可抓取远程仓库代码: Ex:
git pull origin master
克隆仓库: Ex:
git clone git@github.com:lichen404/blog-test.git test
克隆到 test 文件夹,为空则文件夹名称与 repo 名称相同
Github 文件说明
- .gitingore 标识哪些文件应该被 git 忽略,注意 .gitignore 只能修改那些没有被 track 的文件,如果某些文件已经被纳入版本管理中,则修改.gitignore 是无效的
- README.md 代码说明
- License 代码开源协议
解决冲突
当两条分支各自都有新的提交时,Git 无法执行”快速合并”(git merge),只能试图把各自的修改合并起来,但这种合并就可能会有冲突. 当 Git 无法自动合并分支时,就必须首先解决冲突.解决冲突后,再提交,合并完成. 解决冲突就是把 Git 合并失败的文件手动编辑为我们希望的内容,再提交.
git stash
注意:工作区和暂存区是公共的.未 add 的内容不属于任何一个分支, 未 commit 的内容也不属于任何一个分支.当执行命令 git checkout develop
切换到 develop 分支时,如果之前的分支对文件有修改,也会将修改的文件信息带到 develop 分支上来. git stash 可以将你的修改临时储存起来,保证你的工作区是干净的,避免切换分支时你的修改被带到其他分支. git stash list //查看被临时储存的修改
如何恢复:
1 | git stash pop //恢复后,stash内容并不删除,你需要用git stash drop来删除 |
####cherry-pick cherry-pick 命令让我们能复制一个特定的 commit 到当前分支
1 | $ git branch |
配置别名
可以将 git 命令缩写,减少工作量
1 | $ git config --global alias.co checkout |
配置文件
配置Git的时候,加上--global
是针对当前用户起作用的,如果不加,那只针对当前的仓库起作用. 每个仓库的Git配置文件都放在.git/config
文件中. 当前用户的 Git 配置文件放在用户主目录下的一个隐藏文件.gitconfig
配置别名也可以直接修改这个文件,如果改错了,可以删掉文件重新通过命令配置.