git日常操作

初始化仓库:Git init

查看隐藏文件:ls -al

查看git配置:git config

仓库级(全局)修改用户名:git config --local(global) user.name 'CloudBai'

仓库级(全局)修改用户邮箱: git config --local(global) user.email '[email protected]'

仓库级(全局)删除用户名:git config --local(global) --unset user.name

仓库级(全局)删除用户邮箱:git config --local(global) --unset user.email

更新所有文件的用户名和邮箱:git commit --amend --reset-author

查看所有配置信息:git config --list

查看用户名配置:git config user.name

查看用户邮箱配置:git config user.email

将文件状态加入git暂存区:git add <file>   (git add .  会把当前目录下所以文件加入暂存区)

回到文件未修改状态(丢弃掉新增的相对于暂存区最后一次文件提交的内容):git checkout -- <file>

git暂存区移除文件:git rm --cached <file>   ||   git reset head <file>  

将暂存区文件提交:git commit (然后会弹出一个界面进入编辑模式输入本次提交的注释然后保存即可,或者可以使用-m参数直接在后面加注释如:git commit -m ‘注释’  -am注释的话用于添加入暂存区并提交,但对于新增文件不适用。)

查看历史提交记录:git log  (参数- 2可以让他只显示前2条记录)

查看历史操作记录:git relog (常用于版本回退后的历史查看。)

删除文件:git rm <file>    (删除后要提交更改)

重命名文件:git mv <file> <filename>

修正上一次消息提交的注释:git commit --amend -m ‘提交注释’

查看文件的修改历史:git blame <file>

添加别名:git config --global alias.<别名> <命令名>   (命令名如何过长的话用’’号括起来,外部命令的话命令名前面加!号。不加的话默认git会在你的别名命令执行前面加上git)

 

新建标签:git tag -a <标签名> -m <注释>

查看标签:git show <标签名>

删除标签:git tag -d <标签名>

 

查看仓库所有分支:git branch  (-av参数可以查看远程分支)

新建分支:git branch <分支名>   (新建分支并切换到该分支用git checkout -b <分支名>)

切换分支:git checkout <分支名>

删除分支:git branch -d <分支名>  (如果分支未合并的话删除得用-D)

合并分支:git merge <分支名>

分支改名:git branch -m <原分支名> <更改的分支名>

 

比较暂存区与工作区文件之间的差异:git diff

比较最新的提交与工作区文件之间的差异:git diff HEAD

比较最新的提交与暂存区文件之间的差异:git diff -cached

 

git日常操作

回退版本第二种(切换到此节点后为处于游离的commit结点状态。新做出的commit结点更改也会处于游离状态需要用新增分支来保存):git checkout <commit_id>

 

 

保存当前文件更改的状态(工作现场)到栈中(常用于当代码未开发完成却需要切换分支时使用):git stash save ‘注释’

查看工作现场:git stash list

恢复工作现场:git stash apply(恢复最近的一条,恢复后stash中对应的内容不会被删除)

              git stash pop(恢复最近的一条,恢复后stash中对应的内容会被删除)

              git stash apply [email protected]{序号}

删除工作现场:  git stash drop [email protected]{序号}

 

 

git日常操作git日常操作git日常操作

 

 

 

 

Gitlab

Push:推送    pull:拉取==fetch+merge

使用SHH**绑定远程仓库:

添加远程仓库地址:git remote add origin <远程仓库地址>

生成公私钥:shh-******

git日常操作

拿到 id_ras.pub中的公钥。添加到远程仓库中、赋予可写的权限。

git日常操作git日常操作

查看远程仓库连接(成功的话则表示绑定成功): git remote show origin

 

推送:git push (底层实际命令是git push origin <本地分支名>:<远程分支名>  默认使用同名)

拉取远程仓库地址并强行合并:git pull origin master --allow-unrelated-histories

推送master到远程仓库并绑定:git push -u origin master

向远程推送并创建该分支:git push --set-upstream origin <分支名>  ||   git push -u origin   <分支名>

新建本地分支并与远程的新分支相关联(常用于远程有新的分支创建并拉取了的情况下本地没有与远程分支对应的本地分支):git checkout -b <本地分支名> <origin/远程分支名>

  (git branch av查看远程分支。例子:git checkout -b text origin/text)  ||    git checkout --track <origin/远程分支名>   (该命令创建的分支名默认与远程分支名相同)

删除远程分支:git push origin  :<远程分支名>  (记得冒号前面有空格。意思是将空分支传递给远程的某个分支,也就是删除。)  ||   git push origin --delete <远程分支名>

重命名远程分支(只能先删除远程分支。然后再在本地更改分支名推送到远程):

推送本地标签到远程:git push origin <标签名> (多个标签名空格分隔)  || git push origin --tags  (把本地未推送到远程的标签全部推送到远程)

拉取远程标签(也可以直接git pull所有):git fetch origin tag <远程标签名>

删除远程标签:git push origin  :refs/tags/<标签名>   ||  git push origin --delete tag <远程标签名>

更新远程分支跟本地分支的对应关系(常用于远程分支被删除而本地分支还存留的情况):git remote prune origin

查看远程分支的信息:git log origin/<分支名>

 

 

子模块(子仓库)

第一种做法  使用submodule (不推荐):

给当前仓库创建子仓库(创建完后会将对应远程仓库引入目录名中,该目录自动创建。接着在父仓库使用git addgit pull将这些操作推送到远程):git submodule add <远程仓库地址> <目录名>

更新所有子仓库(单独更新子仓库的话进入对应的子仓库目录进行git pull即可):git submodule foreach git pull    (更新完后父仓库会提示子仓库有修改。进行add和pull即可)

 

第二种做法  使用subTree(推荐):

创建远程连接:git remote add <远程连接名> <远程仓库地址>

拉取远程仓库并作为某主仓库的子仓库(最后记得git push将这些操作提交到远程):git subtree add --prefix=<子仓库目录名> subtree-origin master   (可以在最后加上--squash参数启动压缩策略,会将子仓库的多次提交结点合并到master上成一个提交,如果决定使用的话那么接下来子仓库所有的拉取操作都要用该参数不然会出现问题)

更新拉取子仓库(最后记得git push将该操作提交到远程):git subtree pull --prefix=<子仓库目录名> subtree-origin master   (记得判断要不要加--squash参数)

更新推送子仓库(最后记得git push将该操作提交到远程):git subtree push --prefix=<子仓库目录名> subtree-origin master(这里不用--squash参数)

 

克隆有子模块的远程仓库(submodule)

第一种做法:

克隆远程仓库(如果有子仓库的话子仓库会为空。需要你去初始化):git clone <仓库地址>

初始化子仓库:git submodule init

更新所有子仓库(进入子仓库后默认会进入最新的commit结点。这时候可以在子仓库中用git checkout master切换到主分支):git submodule update --recursive

第二种做法:

克隆远程仓库(会自动遍历子模块并初始化):git clone <仓库地址> --recursive

 

 

删除远程仓库的子模块(submodule)

从暂存区中移除目录:git rm --cached <子仓库名>

删除子仓库:rm -rf <子仓库目录>    &&  git add .   &&   git commit -m “注释”  &&  git push

删除对应的子模块文件(文件在根目录下):rm .gitmodules   &&  git add .   &&   git commit -m “注释”  &&  git push

 

 

 

 

Rebase用法(不推荐。跟merge相似)

git日常操作git日常操作

git日常操作