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 | git mv originfilename changed_filename |
删除文件或文件夹
删除文件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 |