Git常用命令

Workspace:工作区
Index / Stage:暂存区
Repository:仓库区(或本地仓库)
Remote:远程仓库


查看git 用户名和邮箱地址:
git config user.name
git config user.email
修改用户名和邮箱地址
git config user.name "xxx"
git config user.email "xxx"
创建一个版本库:
mkdir learngit 然后使用git init 将这个目录变为git可以管理的仓库
添加文件到仓库
git add <file> 将文件添加到暂存区
git commit -m "提交记录" 将文件提交到分支
git status 可以时刻查看仓库的状态
git diff 查看文件变化
我们创建的learngit就是一个工作区
git diff HEAD -- xxx xxx是指需要查询的文件 查看工作区和版本库最新版本的区别
git checkout -- file 撤销工作区的修改
这条命令是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原
同样 如果工作区的内容被误删了,也可以使用这条命令从版本库中还原一下
如果需要撤销暂存区的修改 先使用git reset HEAD file 将暂存区的修改回退到工作区,然后
再使用git checkout -- file 撤销工作区的修改 (HEAD指针是指向当前分支)
删除工作区的文件直接rm就可以,如果需要删除版本库的这个文件
先需要git rm file 删掉 然后再git commit一下
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
如果主线master和分支分别修改同一文件,然后分别提交上去,最后
merge分支就就有冲突,所以在工作区修改掉冲突,再提交上去
git merge --no-ff -m “xxx” 分支名字
合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,
能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并
(合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。
如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。)
经常有这样的事情发生,当你正在进行项目中某一部分的工作,里面的东西处于一个比较杂乱的状态,
而你想转到其他分支上进行一些工作。问题是,你不想提交进行了一半的工作,
否则以后你无法回到这个工作点。解决这个问题的办法就是git stash命令,
先把工作现场储藏起来,然后去修复bug,修复后,再恢复现场后继续工作。
git stash 储藏一下工作现场。
git stash list 查看stash
git stash apply恢复现场,但是恢复后,stash内容并不删除,你需要用git stash drop删除
或者使用git stash pop,恢复的同时将stash内容也删除了。
如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除
命令git tag <name>用于新建一个标签,默认为HEAD,也可以指定一个commit id;
git tag -a <tagname> -m "blablabla..."可以指定标签信息;
git tag -s <tagname> -m "blablabla..."可以用PGP签名标签;
命令git tag可以查看所有标签。
git show <tagname> 可以看到这个tag的信息
命令git push origin <tagname>可以推送一个本地标签;
命令git push origin --tags可以推送全部未推送过的本地标签;
命令git tag -d <tagname>可以删除一个本地标签;
命令git push origin :refs/tags/<tagname>可以删除一个远程标签。
git 命令别名 例子: 下面co就是别名 checkout是原来的命令
git config --global alias.co checkout
git reflog 显示当前分支的最近几次提交
git pull [remote] [branch] 取回远程仓库的变化,并与本地分支合并
要关联一个远程库,使用命令git remote add origin git@server-name:path/repo-name.git;
关联后,使用命令git push -u origin master第一次推送master分支的所有内容;
需要忽略某些文件时,需要编写.gitignore,这个文件本身要放到版本库中,并且可以对.gitignore做版本管理。

git clone是把整个git项目拷贝下来,包括里面的日志信息,git项目里的分支,你也可以直接切换、使用里面的分支等等。
git fetch 是从远程获取最新版本到本地,但不会自动merge。
git pull相当于git fetch和git merge。其意思是先从远程下载git项目里的文件,然后将文件与本地的分支进行merge。

SVN与GIT的区别:
SVN与GIT最大的区别就是,SVN是集中式的版本控制系统,而Git则是分布式的,对于SVN来说,版本库都是保存在
中央服务器的,更新代码和提交代码都必须提交到中央服务器的。而且如果断网了,就不能正常工作了。
而对于GIT来说,每个人电脑都有一个完整的版本库,所以不需要联网工作,安全性也更高。

原文地址:https://www.cnblogs.com/BGPYC/p/7511873.html