常用git命令

一 设置Git的user name和email:

$ git config --global user.name "xuhaiyan"
$ git config --global user.email "haiyan.xu.vip@gmail.com"

git config --list 查看配置信息

二 生成SSH密钥过程:

1.查看是否已经有了ssh密钥:cd ~/.ssh
如果没有密钥则不会有此文件夹,有则备份删除
2.生存密钥:
$ ssh-keygen -t rsa -C “email@email.com”
按3个回车,密码为空。
(email@email.com是github的账号,即上面的email)
生成的id_rsa和id_rsa.pub
id_ras.pub中的key需要复制下来,在git Server上填写(比如github上)

三 在要保存工程的位置

git init 建立 .git文件

四 addFile提交文件到stage,从stage中清除文件

git add -A 提交所有变化
git add -u 提交被修改(modified)和被删除(deleted)文件,不包括新文件(new)
git add . 提交新文件(new)和被修改(modified)文件,不包括被删除(deleted)文件

git add fileA fileB fileC 多个文件

git add dir 会提交整个目录包括子目录

git stage跟git add功能完全相同,区别是前者名字起的贴切。。

git reset fileA  是 git add的相反操作,清除掉stage中的fileA,(实际操作就是是从库区head恢复到statge,如果库区没有fileA这个文件,那么这个操作就是无效的 )

eg:

如果新建了fileA

add,然后git state 发现  fileA是 新增Add状态

使用git ls-files --stage 发现里面有fileA

git reset A 后 git state 中是未跟踪状态

git ls-files --stage中不包含fileA

git rm --cached fileA  据说除了删stage还会删库区的fileA,但工作区的fileA不会改变,这时fileA实际变成了未跟踪状态

git rm fileA 与上面类似,但是会吧工作区的fileA也删除

git checkout --fileA  从stage恢复到workspace

五 commit

git commit -m "log"
git commit -a -m "log"
git commit -a是把unstaged的文件变成staged(这里不包括新建(untracked)的文件),然后commit,
一般都不推荐使用git commit -a,还是推荐先git add再git commit。

六 版本回退

git reset --soft --mixed --hard 3参数用法

https://www.cnblogs.com/nafio/p/9925575.html

git reset --hard xxxx到任意位置

 https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013744142037508cf42e51debf49668810645e02887691000

七 push

设置origin关键字替代目标地址,关联远程库

git remote add origin git@github.com:yourusername/test.git 
git push -u origin master  这句可以用来代替上面--set-upstream那句,第一次上传master是null的需要加-u,之后就不需要-u了

git remote -v 查看远程库信息,可以查看可抓取和推送的远程地址 

git remote add origin git@github.com:yourusername/test.git 设置的关联就可以用上面命令查到

 取消这个关联使用

git remote remove origin

八 clone

git clone ssh://example.com/~/www/project.git

 clone时git自动把本地master和远程master分支对应

指定路径

git clone git@github.com:xxxxx/xxx.git  d:/ngspace/xx/

指定用户名,密码

原始git地址 https://xxxx/test.git

指定用户名,密码后

git clone https://用户名:密码@xxxx/test.git

小技巧

任意文件夹或任意位置(不需要先建立git init)直接 用上面指定路径的方法clone工程,可以避免多级同名目录的问题

比如在d:/ng/  下执行git init  然后git clone git@github.com:xxxxx/xxx.git  

会在d:/ng/下生成一个.git  ,然后还会在d:/ng/ng/下生成一个.git

九 pull

git pull  从远端仓库提取数据并尝试合并到当前分支

已经clone完的工程使用pull

git pull <远程主机名> <远程分支名>:<本地分支名>
git pull origin next:master

 

十 创建,查看,切换分支

原理

https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001375840038939c291467cc7c747b1810aab2fb8863508000

创建分支

方法1 git checkout -b  branch1 创建分支branch1并切换到这个分支

方法2 git branch branch1    创建分子branch1

          git checkout branch1       切换分支

这里注意git checkout --fileName 是从缓存恢复到工作区

切换时要进入到下载的具体分支文件夹中操作

eg:文件夹结构a/b  git init,git clone都在a中操作,然后下载下来b文件夹,切branch时要cd到b在checkout

创建远程分支

本地创建分支后

git push origin branchLocalName:branchRomateName

查看分支

git branch 查看本地分支(首先需要cd到具体工程目录中)

git branch -a 查看本地和远程所有分支

git branch -s 查看本地分支

git branch -r 查看远程分支

切换分支

git checkout branch1

合并分支

git merge branch1  把branch1合并到当前分支上(这里注意,想合并到哪个分子就要先切换到这个分支然后merge)

如果有冲突,解决完冲突后,需要再次add并commit

git merge --no-ff -m "xxxx"  branch1

通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。

如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息

如果才用 ff 模式的,则直接把 master 的指针直接指向了 dev 分支的最新提交,这样两个分支的最新提交的 commit id 就是一样的。

如果采用 --no-ff 模式合并分支,由于不能直接把 master 指针直接指向 dev 分支的最新提交, master 分支只能进行一次提交操作,所以就会有内容一模一样,commit id 不同的问题。

简单地说就是 -no-ff 模式进行了一次新的 git commit 操作。

这也是为什么采用 -no-ff 模式要加入参数 -m 的原因

冲突

冲突后,回到冲突前

git merge --abort

删除分支

git branch -d fileA  合并分支后,被合并的分支一般就没用了,可以直接删除,对git来说只是清空指针的操作,成本低

git branch -D fileA 强行删除(未合并过的)分支

十一 其他命令

安装lfs,用于上传大文件,否则速度慢

https://blog.csdn.net/wifi74262580/article/details/85060187

对每个仓库 git lfs install

然后依次添加需要追踪的大文件类型

git lfs track "*.mp4"

然后记得把.gitattributes commit上去

git add .gitattributes

git commit -m "xxxxx"

--set-upstream用法关联本地远程分支,本地新建的分支如果与远程分支建立关联

就可以直接使用git push ,git pull 不需要多余参数

如果不使用这个参数做关联,push,pull就需要每次加参数

比如 git pull <remote> <branch>

一些情况

eg1:首次推送本地master到远端

git push --set-upstream git@github.com:OnafioO/xxxx.git master(注意最后这个master指的是本地)

也可以用下面替代,下面会自动建立到master的关联

git remote add origin git@github.com:yourusername/test.git 
git push -u origin master(第一次加-u)

用完上面两种方法之一,下次再push,直接就git push,不需要加其他参数

如果git retmote add时设置的地址错了,可以用下面方法修改

git remote rm origin
git remote add origin git@github.com:Liutos/foobar.git

eg2:新建dev分支,拉取远端dev分支

如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令

git branch --set-upstream-to=origin/dev dev

然后就可以直接使用git push,git pull来操作dev分支,不需要额外参数

取消分支关联

git branch --unset-upstream [<branchname>]

git stash 把工作区和暂存区临时存起来

git stash save 同上

git stash list 查看所有缓存

git stash apply 从最后一个缓存恢复到工作区,恢复后stash内容不删除

git stash apply@{0}    恢复序号为0的那个缓存,具体序号可以通过git stash list查看到

git stash pop 从最后一个缓存恢复到工作区,回复后stash内容删除

git stash drop 删除最后的stash

git stash clear 清理所有

git log 查看每次修改

git log --pretty=oneline 查看修改,把每次修改信息显示成一行 

git log --graph 可以看到分支合并图

git log --graph --pretty=oneline --abbrev-commit   

最后面-abbrev-commit作用:Git 可以为你的 SHA-1 值生成出简短且唯一的缩写。如果你传递 --abbrev-commit 给 git log 命令,输出结果里就会使用简短且唯一的值;它默认使用七个字符来表示,不过必要时为了避免 SHA-1 的歧义,会增加字符数

git reflog 用来记录每一次命令 ,这个可以配合git reset 使用,用来查下恢复版本 

git tag tagname 默认把tag打在当前Head上  也可以git tag tagname f52c633 把tag打到某一个commit id上

git tag -a tagname -m "info" 当前tag加个注释

git tag 查看tag  或者 git show tagname查看某个具体tag

git tag -d v1.0 删本地tag

git push origin v1.0 推送到远端

git push origin --tags 一次性推送

git push origin :refs/tags/v0.9 删除远端tag

命令行下对比基本没鸟用,随手记录

git diff 显示当前工作区的文件和stage区文件的差异

git diff --staged 显示stage区和HEAD的文件的差异

git diff HEAD 显示工作区和上次递交文件的差异

git ls-files --stage 查看缓存区文件index内容

使用git ls-files指令可以查看指定状态的文件列表,格式如下:

#查看指定状态的文件
git ls-files [-z] [-t] [-v] (--[cached|deleted|others|ignored|stage|unmerged|killed|modified])* (-[c|d|o|i|s|u|k|m])

git clean -df   移除所有未跟踪文件,-d标识包含目录,-f强制清除

十二 github上传

…or create a new repository on the command line

 
echo "# Test0" >> README.md
git init
git add README.md
git commit -m "first commit"
git remote add origin git@github.com:xxxx/Test0.git
git push -u origin master

…or push an existing repository from the command line

git remote add origin git@github.com:xxxx/Test0.git
git push -u origin master

子模块下载

git submodule init

git submodule update

 
原文地址:https://www.cnblogs.com/nafio/p/9549761.html