Git名词
- master: 默认开发分支
- origin: 默认远程版本库
- Index / Stage:暂存区
- Workspace:工作区
- Repository:仓库区(或本地仓库)
- Remote:远程仓库
管理文件
丢弃未追踪文件
1 | git clean -f # 删除 untracked files |
在用上述git clean
前,强烈建议==加上-n
参数==来先看看会删掉哪些文件,防止重要文件被误删,即1
2git clean -nf
git clean -nfd
然后再执行删除命令。
丢弃工作区修改
丢弃针对工作区文件的修改,使文件恢复到未修改前的状态
1 | git checkout -- <file> # restore <file> |
丢弃暂存区修改
使用如下命令可以把暂存区的修改撤销掉(unstage file),重新放回工作区1
2
3git reset # unstage all the files
git reset <file> # unstage file, 重置暂存区的指定文件,与上一次commit保持一致
git reset HEAD <file> # unstage <file> only
丢弃本次提交
如果git commit
之后后悔了,可以通过下面命令撤销操作1
2
3git reset --soft HEAD^ # 撤销commit,仍然保留更改
git reset --mixed HEAD^ # 撤销commit、add,仍然保留更改
git reset --hard HEAD^ # 撤销commit、add,丢弃更改
如果git commit
注释写错了,只是想改一下注释,只需要:1
git commit --amend
此时会进入默认vim
编辑器,修改注释完毕后保存就好了。
删除远程仓库文件夹
在更新本地.gitignore
文件后,可能会忽略本地的某个文件夹,但此时该文件夹可能已经存在于远程仓库了,此时需要删除掉远程仓库中的对应文件夹
1 | git rm -r --cached some-directory |
版本回退
1 | git reset --hard HEAD^ # 回退到上个版本 |
更新/合并代码
远程 -> 本地
克隆远程仓库到本地
1 | git clone repo-url # Clone the repository |
更新子模块:1
2git submodule update --init --recursive
git submodule update --recursive --remote
有时候clone
的时候老是出现错误error: RPC failed; curl transfer closed with outstanding read data remaining
或者错误remote end hung up unexpectedly
,这可能是由于远程仓库太大,这时候可以先进行shallow clone
,即只拷贝最后一次递交的代码,然后再更新整个git历史:
1 | git clone http://github.com/large-repository --depth 1 |
合并远程分支到本地
1 | (master)$ git fetch origin master:temp # 从远程origin仓库的master分支下载到本地并新建一个分支temp |
拉取远程分支到本地
拉取远程分支到本地,并在本地创建分支1
2git checkout -b temp1 origin/temp2 # 拉取远程temp1分支到本地创建temp2分支,并切换到temp2分支
git fetch origin temp1:temp2 # 拉取远程temp1分支到本地创建temp2分支
本地 -> 远程
推送本地分支到远程
1 | (dev)$ git push origin dev:dev # 推送本地dev分支到远程dev分支 |
本地仓库连接远程仓库
本地仓库首次连接远程仓库1
2
3
4
5
6cd existing_folder # 进入本地仓库文件夹
git init # 初始化git,生成.git隐藏文件夹
git remote add origin https://github.com/user/repo.git # 连接远程仓库
git add .
git commit -m "Initial commit"
git push -u origin master # 推送本地到远程
克隆仓库并推送到自己仓库
首先克隆别人的仓库到本地1
git clone https://github.com/other-account/other-repository.git
再在github.com创建自己的空仓库如your-account/your-repository
,
将本地仓库当前的origin
重命名为upstream
:1
git remote rename origin upstream
将origin
重新设置为指向自己的远程仓库1
git remote add origin https://github.com/your-account/your-repository.git
将本地仓库推送到自己的远程仓库1
git push origin master
现在,origin
指向你自己的仓库,upstream
指向别人的仓库,创建一个你自己的分支如git checkout -b my-feature-branch
,你可以推送自己的更改到仓库,也可以通过命令git pull upstream master
来拉取别人仓库的更改到你的master
分支。
branch
常用命令
1 | git branch # 查看本地分支 |
创建分支
在本地仓库创建分支1
git checkout -b temp # 新建并切换到temp分支
如果想在本地仓库新建一个空白分支1
2
3git checkout --orphan tmep # 新建并切换到temp分支
# 但此时分支中的文件处于staged,未commit的状态,需要清空index
git reset --hard #
删除分支
1 | git branch -d temp # 删除本地temp分支 |
tag
1 | git tag # 查看版本 |
gitignore
更新.gitignore
文件
1 | git rm -r --cached . |
submodule
添加/更新子模块
1 | git submodule add [url] [path] |
删除子模块
删除项目中的一个子模块分四步走:
1) git rm --cached [path]
2) 编辑“.gitmodules”文件,将子模块的相关配置节点删除掉
3) 编辑“.git/config”文件,将子模块的相关配置节点删除掉
4) 手动删除子模块残留的目录
其他命令
1 | git status |
下载GitHub仓库的某个文件夹到本地
1 | SUBDIR=foo |
GitHub 提交Pull Request
首先 folk 开源仓库到自己 GitHub 仓库,然后 clone 自己的仓库到本地,更改并 commit,push 到自己的远程分支,在 GitHub 网页发起 Pull Request。
Ref: 如何给开源项目贡献代码
Key
Generate Key
1
ssh-keygen -t rsa -C "your.email@example.com" -b 4096
然后提示
Enter file in which to save the key
,输入文件名(包括文件路径),如Windows系统一般是/c/Users/your_user_name/.ssh/id_rsa
,按回车,提示Enter passphrase (empty for no passphrase):
,直接回车,提示Enter same passphrase again:
,再按回车,完成。Add key
用文本编辑器打开/c/Users/your_user_name/.ssh/id_rsa
,全选复制,再打开Gitlab网页端,点击右上角Setting
, 点击左侧SSH Keys
,粘贴, 点击Add Key
,完成。