git命令

git工作流示意图

git clone

远程操作的第一步,通常是从远程主机克隆一个版本库,这时就要用到git clone命令。

1
$ git clone <版本库的网址>

比如:

1
$ git clone git@github.com:cgc0415/hello-world.git

该命令会在本地主机生成一个目录,与远程主机的版本库同名。如果要指定不同的目录名,可以将目录名作为git clone命令的第二个参数。

1
$ git clone <版本库的网址> <本地目录名>

git remote

为了便于管理,Git要求每个远程主机都必须指定一个主机名。git remote命令就用于管理主机名。
不带选项的时候,git remote命令列出所有远程主机。

1
2
$ git remote
origin

使用-v选项,可以参看远程主机的网址。

1
2
3
$ git remote -v
origin git@github.com:cgc0415/hello-world.git (fetch)
origin git@github.com:cgc0415/hello-world.git (push)

上面命令表示,当前只有一台远程主机,叫做origin,以及它的网址。

git pull

git pull命令的作用是,取回远程主机某个分支的更新,再与本地的指定分支合并。它的完整格式稍稍有点复杂。

1
$ git pull <远程主机名> <远程分支名>:<本地分支名>

比如,取回origin主机的next分支,与本地的master分支合并,需要写成下面这样。

1
$ git pull origin next:master

在某些场合,Git会自动在本地分支与远程分支之间,建立一种追踪关系(tracking)。比如,在git clone的时候,所有本地分支默认与远程主机的同名分支,建立追踪关系,也就是说,本地的master分支自动”追踪”origin/master分支。
如果当前分支与远程分支存在追踪关系,且远端只有一个追踪分支,则直接执行git pull就可以。

1
$ git pull

上面命令表示,当前分支自动与唯一一个追踪分支进行合并。

git push

git push命令用于将本地分支的更新,推送到远程主机。它的格式与git pull命令相仿。

1
$ git push <远程主机名> <本地分支名>:<远程分支名>

如果省略远程分支名,则表示将本地分支推送到与之存在”追踪关系”的远程分支(通常两者同名),如果该远程分支不存在,则会被新建。

1
$ git push origin master

上面命令表示,将本地的master分支推送到origin主机的master分支。如果后者不存在,则会被新建。
如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支。

1
2
3
$ git push origin :master
# 等同于
$ git push origin --delete master

上面命令表示删除origin主机的master分支。
如果远程主机的版本比本地版本更新,推送时Git会报错,要求先在本地做git pull合并差异,然后再推送到远程主机。这时,如果你一定要推送,可以使用--force选项。

1
$ git push --force origin master

上面命令使用--force选项,结果导致远程主机上更新的版本被覆盖。除非你很确定要这样做,否则应该尽量避免使用--force选项。

【git回车换行设置】—避免Windows自动将Linux的换行符转为Windows风格,造成文件二进制不一致

执行git config –list,查看所有设置
确保 core.autocrlf=false
如果不是则用如下命令修改:
git config –global core.autocrlf false

修改文件名

1
2
git mv originfilename changed_filename
git commit -m ""

删除文件或文件夹

删除文件

1
git rm filename

删除foldername文件夹及其下所有的文件

1
git rm foldername -r -f

执行完git rm后,最后再git commit -m “”,然后push即可

stash的使用

有时候我们在工作区进行开发并且不想提交的时候,这时我们又想pull最新代码;或者又想切到另外一个分支上修改紧急bug的时候
git stash可以暂存当前的工作区内容:

1
git stash save "stash information."

等我们切到另外分支修改完了bug之后,可以切回之前分支【一定要先切回原分支再执行下面的pop或apply命令】,然后恢复之前工作区的内容继续开发:

1
git stash pop

也可以查看stash的Git栈信息:

1
git stash list

当我们的stash栈列表里面有很多,并且我们想要找到对应的版本号并且将我们想要的版本号为stash@{2}的工作内容取出来:

1
git stash apply stash@{2}

也可以查看版本号为stash@{2}的工作内容:

1
git stash show stash@{2}

可以将栈清空:

1
git stash clear

查看某次提交中某个文件的改动情况

1
git show commit-id filename

查看分支历史

1
git reflog show --date=iso branchname

git-rebase

当从master拉完分支,修改后,发现需要合入master分支上最新的commit时,可以先提交该分支上的修改,然后checkout到master上,git pull到最新,然后切回分支,执行 git rebase master 即可。

冲突处理:

在进行rebase操作时,可能会遇到文件存在冲突的情况,这时git会显示出存在冲突的(CONFLICT)文件名,可以用beyondcompare进行比较,手动解决冲突后,再用git add来标识该文件冲突已解决,当冲突解决后再执行git rebase –continue即可。

合并最近两次提交

(1)、git rebase -i HEAD~2(合并最近2次commit)
(2)、执行完1后,即进入commit信息编辑界面,在这里将第一次提交改为pick,第2次提交改为squash,意思就是将第二次提交合并到第一次提交上。编辑完后输入:wq保存退出,即进入步骤3。
(3)、在第2步执行完后即进入注释修改界面,可以将第2次commit信息删除,将第1次commit信息修改为想要的内容,之后输入:wq保存并退出。
(4)、使用git log查看最近commit记录,发现最近2次提交已被合并为一个。

修改commit信息

有时候我们执行git commit命令提交完了才发现漏掉了几个文件没有加,或者提交信息写错了。想要撤消刚才的提交操作,可以使用--amend 选项重新提交:

1
2
3
$ git commit -m 'initial commit'
$ git add forgotten_file
$ git commit --amend -m "the correct commit."

initial commit之后,如果没有文件修改遗漏,只是需要修改提交信息的话,直接跳到git commit --amend -m "the correct commit." 即可。

回退节点

1
git reset --hard commitid

【git clean】删除untracked files

1
git clean -f