下面是自己学习使用git的常用的命令,还有些使用过程中碰到问题的解决办法,现整理如下。
git clone 从远程主机克隆一个版本库
$ git clone <版本库的网址>
$ git clone <版本库的网址> <本地目录名> (线上目录名和本地不一样)
git remote 列出所有远程主机名 (便于管理,git要求每个远程主机都带一个主机名)
$ git remote -v 查看远程主机网址
$ git clone -o jQuery https://github.com/jquery/jquery.git (克隆版本库时所有主机自动被命名为origin。若用-o可以改变命名)
$ git remote show <主机名> (查看主机详细信息)
$ git remote add <主机名> <网址> (添加远程主机)
$ git remote rm <主机名> (删除远程主机)
$ git remote rename <原主机名> <新主机名> (修改远程主机名)
git fetch
git fetch命令通常用来查看其他人的进程,因为它取回的代码对你本地的开发代码没有影响。
默认情况下,git fetch取回所有分支(branch)的更新。
$ git fetch <远程主机名> <分支名> (取回特定分支的更新)
$ git fetch origin master (比如取回origin主机的master分支)
$ git checkout -b newBrach origin/master (git fetch取回远程分支后可以基于此创建一个本地分支)
git pull
git pull命令的作用是,取回远程主机某个分支的更新,再与本地的指定分支合并
$ git pull <远程主机名> <远程分支名>:<本地分支名>
取回origin主机的next分支,与本地的master分支合并,需要写成下面这样。
$ git pull origin next:master
如果远程分支是与当前分支合并,则冒号后面的部分可以省略。
$ git pull origin next
上面命令表示,取回origin/next分支,再与当前分支合并,实质上,这等同于先做git fetch,再做git merge
在某些场合,Git会自动在本地分支与远程分支之间,建立一种追踪关系(tracking)。比如,在git clone的时候,所有本地分支默认与远程主机的同名分支,建立追踪关系,也就是说,本地的master分支自动”追踪”origin/master分支。
Git也允许手动建立追踪关系。
git branch –set-upstream master origin/next
上面命令指定master分支追踪origin/next分支。
如果当前分支与远程分支存在追踪关系,git pull就可以省略远程分支名。
git push
将本地分支的更新,推送到远程主机
$ git push <远程主机名> <本地分支名>:<远程分支名>
注意,分支推送顺序的写法是<来源地>:<目的地>,所以git pull是<远程分支>:<本地分支>,而git push是<本地分支>:<远程分支>。
$ git push -f <远程主机名> <本地分支名>:<远程分支名> (强制提交,非自己的分支强烈不建议使用)
从远程pull一个本地不存在的分支的方法?
1、git checkout -b local_branch origin/remote_branch
2、git fetch将远程分支信息获取到本地,在执行1的方法。
git的选择性合并
具体操作步骤:
假如在当前的A分支上要合并B分支的某一个文件
先切回到A分支
然后执行 git checkout B xx.php
xx.php直接会覆盖A分支上的xx.php文件
(注意会直接将文件覆盖,并不会合并文件,比如在A的xx.php有修改,在B的xx.php有修改,执行上述操作会直接把B的xx.php覆盖A,若想解决用下面的步骤)
先在A分支的基础上建一个 A-temp分支,拿这个A-temp分支和B分支合并,之后切回到A分支,然后把A-temp分支的文件覆盖A分支相对应的文件即可。
其它命令
提交:git commit -a
对最近一次commit的进行修改:git commit -a –amend
commit之后,如果想撤销最近一次提交(即退回到上一次版本)并本地保留代码:git reset HEAD^
合并分支:(merge from) $ git checkout master
$ git merge mybranch (merge from mybranch)
删除分支: $ git branch -d mybranch
强制删除分支: $ git branch -D mybranch
列出所有分支: $ git branch
查看各个分支最后一次提交: $ git branch -v
查看哪些分支合并入当前分支: $ git branch –merged
查看哪些分支未合并入当前分支: $ git branch –no-merged
更新远程库到本地: $ git fetch origin
推送分支: $ git push origin mybranch
取远程分支合并到本地: $ git merge origin/mybranch
取远程分支并分化一个新分支: $ git checkout -b mybranch origin/mybranch
删除远程分支:$ git push origin :mybranch
分支合并后删除文件问题
问题:A分支有10个文件,B分支有8个文件,这8个文件在A分支和B分支都是一样的,现在切换到A分支执行合并命令,结果A分支的两个文件被删除啦,但是还想在A分支保留那两个文件,该如何处理。
解决:merge的概念是 “把其他分支的变更合并到本分支”。在其他分支删除也是一种merge需要合并的变更
先将A创建一个临时分支temp_A,将A和B合并,在将temp_A把A删除的两个文件还原
$ git checkout (含有想恢复的文件的commit) — (想恢复的文件1的路径) (想恢复的文件2的路径)