git config
设置本地用户信息git config --global user.name "John Doe"
git
git config --global user.email johndoe@example.com
服务器
若是使用了 --global 选项,就是全局设置的。编辑器
git config --list
列出全部 Git 的配置选项git help [你想了解的git命令]
,得到详细解释git init
建立仓库git status
查看git状态建立或修改文件,会被git发现差别,git status
能够查看这些变更工具
git add [fileName]
暂存或追踪文件git statu查看git状态是查看的当前git所追踪的文件的变更状态,之因此git不自动追踪全部文件的缘由是给用户的选择空间。因此才有暂存的存在,暂存过的文件就会被git作diff比较,进而能够将暂存区的内容存入仓库。加入暂存这一操做,被git称做追踪track。因此追踪一个文件和暂存一个文件本质区别不大。因此都适用git add一个命令完成。若是你不知道哪些须要增长到暂存,git status会告诉你fetch
想要增长更多或者所有文件,可使用git add *或.或-A或-all,若是想要配置不须要追踪的文件,能够在仓库跟目录下建立.gitignore,来看一个实际的例子:ui
$ cat .gitignore
url
*.[oa]
指针
*~
code
第一行告诉 Git 忽略全部以 .o 或 .a 结尾的文件。通常这类对象文件和存档文件都是编译过程当中出现的。 第二行告诉 Git 忽略全部以波浪符(~)结尾的文件orm
git checkout [fileName]
从暂存区取回并替换工做区文件git reset [fileName]
删除暂存区的内git diff fileName
查看改了具体内容总结:暂存一方面起到临时保存的做用,还有追踪的做用。经过暂存,能够简单的保存,可是做用有限 ,好比,你暂存了某个文件并再次作了修改,若是你从暂存区checkout后,你就再也找不到最新修改的部分了。而且,若是你屡次暂存了这个文件,暂存区只有最近一次暂存状态,你不能查看前几回修改的快照。因此对此需求,就须要将快照持久化,也就是commit提交到仓库。
对git来讲,有如上流程,add the file, edit the file, stage the file,remove the file咱们已经说过,完整commit提交后,本来暂存区中保存的修改了的内容就会被清空,git会认为当前是环境是干净的,没有被修改过的,缘由有二:
1.既然已经将修改持久化保存,就算清空暂存区也不会出错。
2.若是暂存区不会清空,就能够无限提交,显然这是不被容许的。
git commit -m '提交时的文字描述'
该命令能够提交暂存区内容到仓库,也就是将暂存区的内容持久化保存为仓库中的快照,成功提交后,git将打印此次提交的快照的索引号,若是你愿意的话能够记住,不少gui工具都不须要你记,有些时候,若是你以为先把修改提交到暂存区再提交到仓库画蛇添足,实际上能够一步直接将修改提交到仓库
git commit -a -m '提交时的文字描述'
git mv old new
若是你移动了或者重命名了一个文件,git就认为这是新的,实际上,咱们想让git知道这是仓库中的文件而不是新文件你须要git mv README.md README
,为何要让git知道呢?
a.若是git不知道,那就认为是新文件,
b.若是git不知道,在多人合做时,合并代码就会出问题
git log
查看历史提交若是你只想看最近两次的历史,使用git log -2
,
若是想看历史详细差别,git log -p
精炼的查看历史信息,git log --pretty=format:"%h - %an, %ar : %s"
,
--graph
能够可视化展现分支图
git reflog
查看历史操做,用于挽尊
git commit -amend '提交时的文字描述'
从新提交有时你在某次提交后,发现漏提交了一些文件,或是某次提交信息不够完善,总之你想从新编辑此次提交,你能够作完一系列操做后使用这个命令
git reset --hard/soft/mix [索引号]
. 切换到某一次提交但凡你不知道你在作什么,请操做以前必定提交后推送到远程,在工做目录保持干净的状况下在使用这个命令。
git reset file
,会将暂存区的file删去,也能够git reset 清空暂存区
git reset commit file
,若是commit不是head,将commit的file 放入暂存区
git rm --cached [fileName]
删除取消追踪仓库中的某个文件若是想删除仓库和本地目录的文件git rm
能够把他当作快照head与快照head-某次commit的合并,并且会出现奇怪的冲突。不是推荐作这样的事
他会先从暂存区找file,若是找不到,在当前仓库找,找到了就用来替换工做区的文件,git checkout commit file 直接将commit的file替换工做区
git branch testing
建立但不切换分支这会在当前所在的提交节点上建立分支
git checkout testing
切换分支git checkout -b testing
建立并切换分支,这个比较混淆,算做特殊用法。
git checkout -b testing origin/testing
从远程取得一个分支并在本地建立
git branch
查看本地
git branch -r
查看远程分支
git branch -a
查看全部分支
git branch -d testing
git branch -D testing
强制删除
git branch -r -d
删除远程分支
git merge master
合并分支开分支后,必然会作一些改动,且必然要合并到主分支上。若是当前是testing分支,git merge master就会将merge合并到testing,merge有可能会出现冲突,须要手动解决冲突,而后commit。拉取远程分支时git pull也会作一次合并。解决冲突的工具备不少,使用vscode编辑器足以,方法很简单,打开冲突文件便可
git clone url
克隆远程仓库git remote
查看远程仓库服务器一般origin 是默认的远程服务器
git remote -v
,查看远程服务器url地址
git remote add <远程服务器> <url地址>
git remote remove <远程服务器>
git fetch origin testing
仅拉取
git pull origin testing
拉取并合并,若是已经有追踪分支,origin能够省略
git pull origin master --allow-unrelated-histories
拉取忽略不相关
git checkout -b testing origin/testing
或是git clone
建立的分支自带了与远程的联系
git branch -vv
能够查看全部分支关联的远程分支
git push -u origin master
, git branch -u origin/testing
手动设置与远程分支创建联系,创建关系后,git push就能够直接推送到远程
git push
推送git push [remote-name] 分支名
,等价于下面
git push [remote-name] 本地分支名:远程分支名
若是远程没有该分支,会在远程自动建立,但必须创建与远程的联系
注意: 若是本地分支的最新进度<= 远程分支,则远程将拒绝你的push,必须先pull(也就是先merge远程),才能push
git push origin --delete testing
git branch -r -d testing
git clone url
若是远程建立了分支,要切换到那个分支git checkout -b tt origin/tt
若是本地建立了分支,要推送到远程(远程没有这个分支),git push [remote-name] 本地分支名:远程分支名
,而后要绑定远程分支,git branch -u origin/分支名
若是远程是https链接的,每次都须要输入密码,为了不这样,能够克隆时手动改写一下url如,http://用户名:密码@远程仓库httpsurl
,固然你也能够改写remote地址达到一样效果:git remote set-url http://用户名:密码@远程仓库httpsurl
。
使用git reset --hard 并不能彻底保证当前工做目录的干净,好比你从远程合并了master分支,出现了冲突,没提交直接reset到合并以前的commit,reset以后发现多出来了好多未跟踪的文件或文件夹,为何会有多出来的文件,由于你在当前commit上,而你以前合并没提交,因此远程的commit并未成功写入本地,也就是说远程追踪的有些文件还没在本地追踪,你reset的时候,本地仓库只管你追踪的文件,多出来无论,若是要彻底恢复到该commit的状态,git clean就好了,它将移除未追踪的文件,git clean -df能够把目录一块儿删了,因此git reset 一般和git clean连用。