给自己的 git 备忘
给自己的 git 备忘:
- git 使用流程
- git 分支管理
- git 撤销
- 连接到 github
- fork
- IDEA git 项目颜色含义
- git stash 暂存
git使用流程
初始化
于一个目录下,初始化git
1 | git init |
add
新建/修改文件后,把修改内容 add 到 git 上面
1 | git add . |
三个 add 的区别
git add .
监控工作区的状态树,将所有变化提交到暂存区,包括 modified 以及 new ,但不包括被删除的文件git add -u
仅监控已经被 add 的文件(即tracked file),不会提交新文件(untracked file)。(git add –update的缩写)git add -A
上面两个功能的合集(git add –all的缩写)
commit 提交到仓库
1 | git commit -m "modified" |
关联和同步
关联远程仓库
1 | git remote add origin git@github.com:JerrySheh/repository_name.git |
推送到远程
第一次推送,加 -u 参数
1 | git push origin branch_name |
同步
如果远程已经有文件,需要先 pull
1 | git pull origin master |
从远程仓库克隆
1 | git clone git@github.com:jerrysheh/helloworld |
diff
git diff filepath
工作区与暂存区比较
git diff HEAD filepath
工作区与HEAD ( 当前工作分支) 比较
git diff --staged
或 --cached filepath
暂存区与HEAD比较
git diff branchName filepath
当前分支的文件与branchName 分支的文件进行比较
git diff commitId filepath
与某一次提交进行比较
git 分支管理
新建并切换到分支
1 | git checkout -b branch_name |
把新建的本地分支 push 到远程
1 | git push origin branch_name:branch_name |
删除远程分支
1 | git push origin -d branch_name |
git 撤销
查看更改日志,找到你想返回去的commit_id (一般第一条是你搞错了的,第二条就是上次你想返回去的id)
1 | git log |
撤销提交和修改过的代码
1 | git reset --hard commit_id |
只撤销提交,不撤销修改过的代码(可以直接通过 git commit
重新提交对本地代码的修改)
1 | git reset commit_id |
如果想撤销的commit已经提交到远程仓库了,在本地 reset 修改后,重新强制提交。这样上次的错误提交就消失了。但是这样做有个弊端,就是如果你的错误commit(如commit3)之后还有其他人再提交了(commit4), commit4也会消失。
1 | git push --force |
在新电脑配置git,并连接到githiub
设置 git 的username 和 usermail
1 | git config --global user.name "yourname" |
生成SSH密钥
查看是否已经有了ssh密钥:cd ~/.ssh
如果没有密钥则不会有此文件夹,有则备份删除
生成密钥:
1 | ssh-keygen -t rsa -C “haiyan.xu.vip@gmail.com” |
按3个回车,密码为空。
1 | Your identification has been saved in /home/tekkub/.ssh/id_rsa. |
最后得到了两个文件:id_rsa和id_rsa.pub
在 .ssh 文件夹中执行 ssh-add id_rsa
,再输入正确密码
在github上添加ssh密钥,这要添加的是“id_rsa.pub”里面的公钥。
打开 https://github.com/ ,在设置中添加密钥
测试:
1 | $: ssh git@github.com |
测试成功就可以push code和 git clone 之类的操作了。
fork
一般如果要参与开源项目,都是先 fork 别人的项目到自己的github,然后通过 git clone
自己的仓库克隆到本地进行修改。修改完毕后,通过pull request
向原作者提交合并申请。
但是我们 fork 了别人的项目之后, 原作者 commit 了新内容, 我们 fork 的项目并不会更新。解决办法为:在本地建立两个库的中介,把两个远程库都clone到本地,然后拉取原项目更新到本地,合并更新,最后push到你的github。
流程如下:
1 | git clone https://我们fork的地址.git |
cd 进入该目录,git remote -v
,可以看到只有两条我们自己的。
1 | git remote add nsd https://原作者的地址.git |
再次git remote -v
,可以看到多出来两条。
nsd 只是一个别名,可以任意取
把原作者的更新 fetch 到本地
1 | git fetch nsd |
查看分支
1 | git branch -av |
可以看到,出现一条 remotes/nsd/master xxxxx
的更新
合并
1 | git checkout master |
如果有冲突,需要丢掉本地分支
1 | git reset –hard hunter/master |
这时你的当前本地的项目变成和原作者的主项目一样了,可以把它提交到你的GitHub库
1 | $ git commit -am ‘更新到原作者的主分支’ |
LF/CRLF
LF will be replaced by CRLF
禁用自动转换即可
1 | git config –global core.autocrlf false |
代理
1 | 设置sock5代理 |
IDEA git项目颜色含义
- 绿色: 创建了仓库没有的新文件,还未提交
- 蓝色: 仓库已有的文件,被修改了,还未提交
- 红色: 没有添加到版本控制的文件(包括 ignore 的)
参考:
git stash 暂存
有时候我们在本地写了一些代码,之后可能紧急要切换到另一个分支做一些修复,可以先将本地变更的代码“暂存”,稍后再在任意分支恢复。
暂存代码
1 | git stash |
切换到别的分支工作
1 | git checkout master |
工作完换回来
1 | git switch dev |
查看暂存区
1 | git stash list |
暂存内容恢复
1 | git stash pop |