git常用命令
一、git常用命令
重点:提交本地分支到远程分支
$ git push origin test:master // 提交本地test分支作为远程的master分支 //好像只写这一句,远程的github就会自动创建一个test分支
$ git push origin test:test // 提交本地test分支作为远程的test分支
实例:git push origin 20180228mybank-fbi:20180228mybank-fbi
1、git clone
-
获取一个url对应的远程Git repo,创建一个local copy;
-
git clone[url];
-
clone下来的repo会以url最后一个斜线后面的名称命名,创建一个文件夹,如果想要指定特定的名称,可以git clone [url] newname指定;
2、git status
-
查询状态;
-
git status -s: -s表示short, -s的输出标记会有两列,第一列是对staging区域而言,第二列是对working目录而言.
图一
3、git log(show commit history of a branch)
-
查看提交的历史记录
-
注意:在开发过程中多人修改同一个文件很常见,所以可以通过此命令查看修改信息记录
图二
4、git add
-
在提交之前,Git有一个暂存区(staging area),可以放入新添加的文件或者加入新的改动;
-
commit时提交的改动是上一次加入到staging area中的改动,而不是我们disk上的改动;
-
git add.
-
会递归地添加当前工作目录中的所有文件;
-
包括一些编译器的临时文件和编译文件都会被整体add;
-
"."使用点号时,请先git status 查看当前工作区域状态,防止临时文件也被添加
-
git add[文件路径]
-
这样可以直接具体到某个文件
5、git commit
-
提交已经被add进来的改动;
-
git commit -m “the commit message"
-
git commit -a
-
会先把所有已经track的文件的改动add进来,然后提交(有点像svn的一次提交,不用先暂存). 对于没有track的文件,还是需要git add一下;
-
git commit --amend
-
增补提交. 会使用与当前提交节点相同的父节点进行一次新的提交,旧的提交将会被取消;
6、git revert(类似于svn的revent)
-
反转撤销提交.只要把出错的提交(commit)的名字(reference)作为参数传给命令就可以了.
-
git revert HEAD: 撤销最近的一个提交.
-
git revert会创建一个反向的新提交,可以通过参数-n来告诉Git先不要提交
7、git rm
-
git rm file: 从staging区移除文件,同时也移除出工作目录.
-
git rm --cached: 从staging区移除文件,但留在工作目录中.
-
git rm --cached从功能上等同于git reset HEAD,清除了缓存区,但不动工作目录树.
8、git stash
-
把当前的改动压入一个栈.
-
git stash将会把当前目录和index中的所有改动(但不包括未track的文件)压入一个栈,然后留给你一个clean的工作状态,即处于上一次最新提交处.
-
git stash list会显示这个栈的list.
图三
-
git stash apply:取出stash中的上一个项目(stash@{0}),并且应用于当前的工作目录.
图四
-
也可以指定别的项目,比如git stash apply stash@{1}.
-
如果你在应用stash中项目的同时想要删除它,可以用git stash pop
-
删除stash中的项目:
-
git stash drop: 删除上一个,也可指定参数删除指定的一个项目.
-
git stash clear: 删除所有项目.
9、git branch
-
git branch可以用来列出分支,创建分支和删除分支.
-
git branch -v可以看见每一个分支的最后一次提交.
-
git branch: 列出本地所有分支,当前分支会被星号标示出.
10、git merge
-
把一个分支merge进当前的分支.
-
git merge [alias]/[branch]
-
把远程分支merge到当前分支
11、git fetch(download new branches and data from a remote repository.)
-
git fetch将会取到所有你本地没有的数据,所有取下来的分支可以被叫做remote branches,它们和本地分支一样(可以看diff,log等,也可以merge到其他分支),但是Git不允许你checkout到它们.
12、git pull(pull == fetch + merge FETCH_HEAD)
-
git pull会首先执行git fetch,然后执行git merge,把取来的分支的head merge到当前分支.这个merge操作会产生一个新的commit.
-
如果使用--rebase参数,它会执行git rebase来取代原来的git merge.
13、git rebase
-
--rebase不会产生合并的提交,它会将本地的所有提交临时保存为补丁(patch),放在”.git/rebase”目录中,然后将当前分支更新到最新的分支尖端,最后把保存的补丁应用到分支上.
-
rebase的过程中,也许会出现冲突,Git会停止rebase并让你解决冲突,在解决完冲突之后,用git add去更新这些内容,然后无需执行commit,只需要:
-
git rebase --continue就会继续打余下的补丁.
-
git rebase --abort将会终止rebase,当前分支将会回到rebase之前的状态.
14、git push
-
git push [alias] [branch]
-
git push origin master
-
将会把当前分支merge到alias上的[branch]分支.如果分支已经存在,将会更新,如果不存在,将会添加这个分支.
-
如果有多个人向同一个remote repo push代码, Git会首先在你试图push的分支上运行git log,检查它的历史中是否能看到server上的branch现在的tip,如果本地历史中不能看到server的tip,说明本地的代码不是最新的,Git会拒绝你的push,让你先fetch,merge,之后再push,这样就保证了所有人的改动都会被考虑进来.
15、关于切分支的异常处理
-
fatal: unable to stat 'node_modules/gulp-connect/node_modules/gulp-util/node_modules/dateformat/node_modules/meow/node_modules/normalize-package-data/node_modules/validate-npm-package-license/node_modules/spdx-expression-parse/parser.generated.js': Filename too long
-
git config --system core.longpaths true
-
也可以仅设置当前项目:
-
git config core.longpaths true
-
查看设置状态:
-
git config core.longpaths
16、git checkout -b (创分支)
git checkout -b [分支名称]
git branch[分支名称] 切换到该分支
git pull #git会提示我们相应的操作命令(如图五所示)
git branch --set-upstream-to=origin/<branch> ANTM0253544_20171103_bkloansceneprod
git branch --set-upstream-to=origin/ANTM0253544_20171103_bkloansceneprod ANTM0253544 _20171103_bkloansceneprod
图五