天天看点

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目录而言.

git常用命令

图一

3、git log(show commit history of a branch)

查看提交的历史记录

注意:在开发过程中多人修改同一个文件很常见,所以可以通过此命令查看修改信息记录

git常用命令

图二

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常用命令

图三

git stash apply:取出stash中的上一个项目(stash@{0}),并且应用于当前的工作目录.

git常用命令

图四

也可以指定别的项目,比如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

git常用命令

图五