一、基本操作
用
git init
来在目录中创建新的 Git 仓库。 你可以在任何时候、任何目录中这么做,完全是本地化的。使用
git clone
拷贝一个 Git 仓库到本地,让自己能够查看该项目,或者进行修改。使用
git add
添加需要追踪的新文件和待提交的更改到暂存区, 然后使用git status
和git diff
查看有何改动, 最后用git commit
将你的快照记录。这就是你要用的基本流程,绝大部分时候都是这样的。在当前工作目录执行命令:
git add .
Git 会递归地将你执行命令时所在的目录中的所有文件添加上去.执行
git status
以查看在你上次提交之后有啥被修改或者临时提交了, 从而决定自己是否需要提交一次快照,同时也能知道有什么改变被记录进去了。git diff
显示已写入缓存与已修改但尚未写入缓存的改动的区别,执行git diff
来查看执行git status
的结果的详细信息 —— 一行一行地显示这些文件是如何被修改或写入缓存的。
git diff HEAD
—— 显示的是工作目录与上一次提交的更新的区别,无视缓存。git commit -a
自动将在提交前将已记录、修改的文件放入缓存区,基本上这句话的意思就是,为任何已有记录的文件执行git add .
不过你仍然需要执行git add 文件名
来添加新文件git 对本地文件的文件名的大小写是不敏感额,如果修改文件名的大小写不会添加修改,命令行运行下列代码,强制git对大小写敏感
$ git config core.ignorecase false
git remote
命令列出所有远程主机 使用-v
选项,可以参看远程主机的网址
二、 常用命令
1. git branch
【 origin 指的是主机名 master 指的是分支名】
git branch -r
查看远程分支
git branch -a
查看所有分支
git branch -d (branch name)
删除本地分支
git branch (new-branch -name)
创建分支
git branch -v
查看各个分支最后一个提交对象的信息
git branch -m <old_branch_name> <new_branch_name>
重命名本地分支
2. git push
$ git push :
git push <远程主机名> <本地分支名>:<远程分支名>
执行 git push [alias 远程仓库名] [branch 远程分支名],就会将你的当前 分支推送成为 [alias] 远端上的 [branch] 分支。 让我们试试推送我们的主分支到先前添加的“github”远端仓库上去。
$ git push origin master
如果省略远程分支名,则表示将本地分支推送与之存在"追踪关系"的远程分支(通常两者同名),如果该远程分支不存在,则会被新建。
不带任何参数的git push
,默认只推送当前分支,这叫做simple方式。
git push origin --delete <branchName>
删除一个远程分支
git push origin :<branchName>
推送一个空分支到远程分支,其实就相当于删除远程分支
3. git pull
$ git pull
比如,取回origin主机的dev分支,与本地的master分支合并,需要写成下面这样。git pull <远程主机名> <远程分支名>:<本地分支名>
$ git pull origin dev:master
上面命令表示,取回origin/dev分支,再与当前master分支合并。实质上,这等同于先做git fetch,再做git merge。
$ git fetch
$ git fetch origin dev
$ git merge origin/dev
合并fetch下来的远程dev分支数据到当前分支上
git fetch origin 远程分支名:本地分支名
上面命令表示,取回origin/next分支,再与当前分支
合并。实质上,这等同于先做git fetch,再做git merge。
4. git checkout
git checkout -b [分支名] [远程主机名]/[分支名]
5. git log
git log --oneline
显示log一行摘要
git log --author="author-name"
显示某个用户提交的log
git log -p (file-name)
某个文件的提交log
6. git tag
- 列出现有标签的命令
$ git tag
- 带有通配符的列出命令
$ git tag -l 'v1.4.2.*'
- 新建标签
$ git tag -a v1.4 -m 'my version 1.4'
引号里面的是标签说明 - 把标签推到git服务器上
$ git push origin [tagname]
- 一次推送所有本地新增的标签到git服务器
git push origin --tags
7. git 追踪关系
在某些场合,Git会自动在本地分支与远程分支之间,建立一种追踪关系(tracking)。比如,在git clone的时候,所有本地分支默认与远程主机的同名分支,建立追踪关系,也就是说,本地的master分支自动”追踪”origin/master分支。
Git也允许手动建立追踪关系。
git branch --set-upstream master origin/dev
上面命令指定本地master分支追踪远程 origin/dev分支。
但是据说上面--set-upstream
这个命令被废弃了,建议使用--track 或者 --set-upstream-to
来代替
git branch --set-upstream-to=origin/远程分支名 本地分支名
如果当前分支与远程分支存在追踪关系,git pull就可以省略远程分支名。
$ git pull origin
上面命令表示,本地的当前分支自动与对应的origin主机”追踪分支”(remote-tracking branch)进行合并。
如何查看本地跟踪分支对应的远程分支
git branch -vv(两个v),就能够看到本地分支跟踪的远程分支。
获取远程服务器上某个分支
加入服务器上被合作的伙伴新创建了一个分支,我们可以通过如下方式来获取:
$ git fetch origin
然后我门会获取到新的分支的名字
值得注意的是,在 fetch
操作下载好新的远程分支之后,你仍然无法在本地编辑该远程仓库中的分支。换句话说,在本例中,你不会有一个新的new_added_branch
分支,有的只是一个你无法移动的 origin/new_added_branch
指针。
如果要把该内容合并到当前分支,可以运行 git merge origin/new_added_branch
。如果想要一份自己的 new_added_branch
来开发,可以在远程分支的基础上分化出一个新的分支来:
$ git checkout -b new_added_branch origin/new_added_branch
Branch new_added_branch set up to track remote branch refs/remotes/origin/new_added_branch.
Switched to a new branch "new_added_branch"
这会切换到新建的 new_added_branch
本地分支,其内容同远程分支 origin/new_added_branch
一致,这样你就可以在里面继续开发了。
三、冲突解决
如果没有冲突的话,merge完成。有冲突的话,git会提示那个文件中有冲突,比如有如下冲突:
<<<<<<< HEAD:test.c
printf (“test1″);
=======
printf (“test2″);
>>>>>>> issueFix:test.c
可以看到 ======= 隔开的上半部分,是 HEAD(即 master 分支,在运行 merge 命令时检出的分支)中的内容,下半部分是在 issueFix 分支中的内容。解决冲突的办法无非是二者选其一或者由你亲自整合到一起。比如你可以通过把这段内容替换为下面这样来解决:
printf (“test2″);
这个解决方案各采纳了两个分支中的一部分内容,而且删除了 <<<<<<<,=======,和>>>>>>> 这些行。
在解决了所有文件里的所有冲突后,运行git add 将把它们标记为已解决(resolved)。
然后使用git commit命令进行提交,merge就算完成了