Git常用命令
GitHub
创建新仓库
git init
检出仓库
创建本地仓库的克隆版本:
git clone /path/to/repository
克隆远程仓库:
git clone username@host:/path/to/repository
或者 git clone https://github.com/username/repository
克隆分支仓库:
git clone -b 分支名 仓库地址
添加与提交
git add <filename> 或 git add * 或 git add .
git commit -m "information about this commit"
推送改动
git push origin master //master可以换成任何分支
如果还没有关联远程仓库,则需要如下添加命令:
git remote add origin <server>
分支操作
创建 git checkout -b feature_x
切换 git checkout master
删除 git branch -d feature_x
删除远程分支 git push --delete origin feature_x
更新与合并
git pull //此操作即在你的工作目录中获取(fetch)并合并(merge)远端的改动
git merge <branch> //合并其他分支到你的当前分支
git diff <source_branch> <target_branch> //合并改动前查看可能导致的冲突
如果希望对比暂存区和当前的HEAD,可以使用:
git diff --cached
创建标签
git tag 1.0.0 dgf3d45jhe //创建一个1.0.0的标签
删除仓库文件
git rm path/to/file --cached //将文件从暂存区索引中删除,但是会保留在工作目录。
git rm file -f //完全删除文件
恢复暂存区
git reset
git reset --hard
git reset --mixed
git reset --soft
配置本地git账户
git config --global user.name "YourName"
git config --global user.email "email@example.com"
git config –global core.editor vim
git config –list
git config --global http.sslVerify "false"
关联远程仓库
git remote add origin git@github.com:CyanZee/vim.git
其他命令
git status //查看仓库状态
git log //显示从最近到最远的提交日志或 git log --pretty=online
git log --graph --oneline --all
git reset --hard HEAD^ //回退上一个版本
git reset --hard commit_Id //根据具体的版本号回退版本
git reflog //查看历史命令
git branch -d hyy-feat-vehicle //删除分支hyy-feat-vehicle
git checkout -b vir-branch //基于当前分支,新建一个分支vir-branch
删除暂存区文件
git reset HEAD bash_demo.txt
git checkout -- bash_demo.txt
删除仓库内文件
git rm bash_demo.txt //将文件从暂存区索引中删除
git commit -m "delete bash_demo.txt" //将暂存区的更改提交到本地仓库
备注:要先在github上创建同名的仓库;要先提交到本地仓库,再进行与远程仓库关联;
要先拉取更改(git pull),再提交更改(git push);一般步骤如下:
git add .
git commit -m "..."
git push -u origin master
常用操作
git本地已经有了master分支,如何获取develop分支的源代码(不做合并操作,只拉取代码):
git checkout -b develop origin/develop
用 git clone --depth=1 的好处是限制 clone 的深度,不会下载 Git 协作的历史记录,这样可以大大加快克隆的速度
恢复本地误删的文件或文件夹
step1: git status
step2: git reset HEAD 被删除的文件或文件夹
step3: git checkout 被删除的文件或文件夹
git rebase 的使用
1、切换到自己功能开发分支
git checkout feature_01
2、执行rebase
git rebase dev
以上命令会把"feature_01"分支里的每个提交取消掉,并且把它们临时保存为补丁(path),这些补丁放到".git/rebase"目录中,然后把"feature_01"分支更新到最新的"dev"分支,最后把保存的这些补丁应用到"feature_01"分支上。
例如,当前的分支状态如:
执行git merge之后
执行git rebase之后
在rebase的过程中,也许会出现冲突(conflict). 在这种情况,Git会停止rebase并会让你去解决 冲突;在解决完冲突后,用"git-add"命令去更新这些内容的索引(index), 然后,你无需执行 git-commit,只要执行:
$ git rebase --continue
这样git会继续应用(apply)余下的补丁。
在任何时候,你可以用--abort
参数来终止rebase的行动,并且"mywork" 分支会回到rebase开始前的状态。
$ git rebase --abort
git stash 的使用
git stash //执行存储
git stash save "save message" //执行存储时,添加备注,方便查找
git stash list //查看stash
git stash show [stash@{$num}] [-p] //显示做了哪些改动,默认显示第一个存储
git stash apply [stash@{$num}] //应用某个存储,但不会把存储从列表中删除,默认使用第一个,即stash@{0}
git stash pop [stash@{$num}] //恢复之前缓存的工作目录,将缓存堆栈中的对应stash删除,并将对应修改应用到当前的工作目录下,默认为第一个stash
git stash drop stash@{$num} //丢弃stash@{$num}存储,从列表中删除
git stash clear //删除所以缓存的stash
注:新增的文件,直接执行stash是不会被存储的
git submodule的使用
添加子模块
git submodule add <子项目url> <子项目存放的本地的文件夹名>
eg: git submodule add https://github.com/falconray0704/libShell.git ./libShell
查看子模块
git submodule
更新子模块
//更新项目内子模块到最新版本
git submodule update
//更新子模块为远程项目的最新版本
git submodule update --remote
克隆包含子模块的项目
方法一:先克隆父项目,再更新子模块
//克隆父项目
# git clone git clone https://github.com/falconray0704/sysCfg
# cd sysCfg/libShell
//查看子模块
# git submodule
--7cd06c7282baf317b254205676fd50fd17379622 ./
//初始化子模块
# git submodule init
Submodule 'libShell' (https://github.com/falconray0704/libShell.git) registered for path './'
//更新子模块
# git submodule update
或者 git submodule update --init
方法二:递归克隆整个项目
git clone git clone https://github.com/falconray0704/sysCfg libShell --recursive
删除子模块
删除子模块文件夹
git rm --cached libShell
rm -rf libShell
删除.gitmodules文件夹中相关子模块信息
[submodule "libShell"]
path = libShell
url = https://github.com/falconray0704/libShell.git
删除.git/config文件夹中的相关子模块信息
[submodule "libShell"]
active = true
url = https://github.com/falconray0704/libShell.git
删除.git文件夹中的相关子模块文件
rm -rf .git/modules/libShell
Syncing works流程
如何在本地建立开发工作区
1、先fork工作仓库到自己的仓库
2、clone fork出来的仓库到本地
git clone https://github.com/CyanZee/rk1126.git
git branch
git branch -a
git branch -v
git config --local core.editor vim
3、与远程upstream建立同步开发链接
git remote add upstream https://github.com/zsync/rk1126.git
git branch
git branch -a
git branch -v
4、拉取远程origin更新
git fetch origin
git branch -a
git branch -r
5、拉取远程upstream更新
git fetch upstream
git branch -a
git branch -r
6、checkout远程upstream的dev分支
git checkout -b dev upstream/dev
git log --oneline
7、将拉取到的最新的upstream/dev分支提交到远程origin/dev分支
git push -u origin develop
git branch -a
git branch -r
git remote -v
git status
8、在本地基于dev分支checkout自己的一个开发分支
git checkout -b feature_0
/\*开发过程,略\*/
...
...
9.开发完成后,向远程origin提交开发分支
git push -u origin feature_01
git branch -a
git branch -v
git status
git log --oneline
10.在github上发起一个pull request 将origin/feature_01 merge 到 upstream/dev分支上
#################################################################################
Make pull request for merging branch “origin/feature_01” into branch “upstream/develop” on github website.
#################################################################################
如果是 upstream repo,你只可以拉取最新代码(即 git fetch ),从而保证你本地的仓库与源仓库同步
如果是 origin repo,就是你自己的repo(自己创建的,或者 fork 的项目)你可以做 任何推拉操作(pull and
push)你可以通过 pull request 向 upstream repo 贡献代码
如何进行同步开发以及pull request
1、从dev分支checkout出新的分支feature_01做功能开发
git checkout -b feature_01 //在dev 分支下操作
2、开发完成后,对dev做rebase,再提交本地代码到远程仓库
git rebase dev //在feature_01分支下操作
git push -u origin feature_01 //提交到远程仓库,并建立跟踪
3、在github上将feature_01对upstream仓库发起pull request