1、克隆服务器仓库到本地分支mydep
git clone http://************* mydep克隆远程仓库分支develop到本地分支mydep
git clone -b develop http://************* mydep
2、获取开发分支
git fetch origin develop:mydep3、配置个人设置
git config --global user.name "***"
git config --global user.email "***@*****"
3、创建本地分支mydep
git branch mydep4、添加文件到stage区域等待commit
git add . //添加所有已修改的文件
git add -u // 添加所有未跟踪的文件
git add -A // 添加所有文件
4、提交更新
git commit //提交后在vim中添加日志 可以添加分行多段日志git commit -m "update log" // 提交并添加单行日志
带换行的:
git commit -m '
1. this is the test
2. update file
'
5、获取远程分支develop到本地分支mydep
通常用来在合并代码前,比较本地分支和远程分支的差别,以解决冲突
git fetch origin develop:mydep
通常这个命令会失败, 因为其要求比较严格, 如果本地没有什么文件要保留,可以使用暴力一点的方法:
git pull origin develop:mydep
慎用, 可以先使用git status查看本地确实没有文件要保存的.
6、合并本地分支newestdevelop到本地当前分支mydep
git merge newestdevelop7、提交本地分支mydep到远程分支develop
git push origin mydep:develop6、获取远程分支develop合并到本地分支mydep
git pull origin develop:mydep获取远程分支develop合并到本地当前分支
git pull origin develop
获取远程关联分支合并到本地当前分支
git pull
8、制作git格式化补丁, 相对于new分支
git format-patch -M new制作单个patch
git format-patch -1 xxxxxxxxxxxxxxx (xxxxxxxxxxxxxxxxx是commit ID)
9、查阅日志
git loggit log -10
git log mydep (mydep分支的log)
仅仅想看最后一次的提交
git log -n 1
git log -1
想看到最近一次提交所有更改过的文件git log -n 1 --stat
想看到某次提交所有更改过的文件
git log -n 1 ae66deac65861d2c881d3d5454246c110a16c896 --stat
想看到最近一次提交所有更改的细节
git log -n 1 -p
git show -1
我们常用 -p 选项展开显示每次提交的内容差异,用 -2 则仅显示最近的两次更新:
git log -p -2
git show -2
git log --author="username"
显示某个文件的所有修改:
git log -p <file>
git log directory 列的是directory目录下的修改记录
在push之前有时候会不放心是不是忘记加某些文件,或者是不是多删了个什么东西,这时候希望能够看看上次commit都做了些什么。
一开始想到的是用git diff,但是git diff用于当前修改尚未commit的时候较为方便,一旦commit后,需要指定上次节点的名称(一个hash值),不方便。这种时候用git log更合适,因为commit的内容会以log来记录。
要查看尚未暂存的文件更新了哪些部分,不加参数直接输入
git diff
像之前说的,暂存 benchmarks.rb 后再编辑,运行 git status 会看到暂存前后的两个版本:
现在运行 git diff 看暂存前后的变化
若要看已经暂存起来的文件和上次提交时的快照之间的差异,可以用
git diff --cached
给当前版本打标签:
git tag <tag-name>
-------------------------------------
查看某两个修改分支中某个文件的差异:
文件的所有改动历史
git log --pretty=oneline MessageItem.java
git show即可显示具体的某次的改动的修改
git show 356f6def9d3fb7f3b9032ff5aa4b9110d4cca87e
与下面一样
git log -p 7aee80cd2afe3202143f379ec671917bc86f9771
显示某个版本的某个文件修改情况
git show 5aa1be6674ecf6c36a579521708bf6e5efb6795f charge.lua
▼git diff 2345 7766 xxxx.c
10 .gitignore
版本忽略以下类型文件*.o
11. 撤销中间某个单个commit, 并提交这个修改
git revert commitID如果出现冲突:
both modified .....
要手动修改错误文件, 而冲突的地方已经写在了冲突的文件中,
可以使用git diff xxx.java查看具体哪里冲突, 修改之后
git add xxx.java即可
----------------------------------------------------------------12. 撤销最新的commit
git reset
modify--------->git add----------->commitstatus: unstaged index/cache commit
A) 回滚add操纵,会删除index内容,但是本地修改的内容还在
引用
$ edit (1)
$ git add frotz.c filfre.c
$ mailx (2)
$ git reset (3)
B) 回滚最近一次commit, 保留了本地的index修改
git reset --soft HEAD~1
or
git reset --soft HEAD^
--------------------------------------
实例::
---$ git commit ...
$ git reset --soft HEAD^ (1)
$ edit (2)
$ git commit -a -c ORIG_HEAD (3)
(1) 当提交了之后,你又发现代码没有提交完整,或者你想重新编辑一下提交的comment,执行git reset --soft HEAD^,让working tree还跟reset之前一样,不作任何改变。
HEAD^指向HEAD之前最近的一次commit。
(2) 对working tree下的文件做修改
(3) 然后使用reset之前那次commit的注释、作者、日期等信息重新提交。注意,当执行git reset命令时,git会把老的HEAD拷贝到文件.git/ORIG_HEAD中,在命令中可以使用ORIG_HEAD引用这个commit。commit 命令中 -a 参数的意思是告诉git,自动把所有修改的和删除的文件都放进stage area,未被git跟踪的新建的文件不受影响。commit命令中-c <commit> 或者 -C <commit>意思是拿已经提交的commit对象中的信息(作者,提交者,注释,时间戳等)提交,那么这条commit命令的意思就非常清晰了,把所有更改的文件加入stage area,并使用上次的提交信息重新提交。
---
C)撤销commit和index的内容,同时也撤销本地的文件修改,全部回到上一个版本
git reset --hard HEAD~1
F) 在被污染的working tree中回滚merge或者pull
引用
$ git pull (1)
Auto-merging nitfol
Merge made by recursive.
nitfol | 20 +++++----
...
$ git reset --merge ORIG_HEAD (2)
(1) 即便你已经在本地更改了一些你的working tree,你也可安全的git pull,前提是你知道将要pull的内容不会覆盖你的working tree中的内容。
(2) git pull完后,你发现这次pull下来的修改不满意,想要回滚到pull之前的状态,从前面的介绍知道,我们可以执行git reset --hard ORIG_HEAD,但是这个命令有个副作用就是清空你的working tree,即丢弃你的本地未add的那些改变。为了避免丢弃working tree中的内容,可以使用git reset --merge ORIG_HEAD,注意其中的--hard 换成了 --merge,这样就可以避免在回滚时清除working tree。
G) 被中断的工作流程
在实际开发中经常出现这样的情形:你正在开发一个大的feature,此时来了一个紧急的bug需要修复,但是目前在working tree中的内容还没有成型,还不足以commit,但是你又必须切换的另外的branch去fix bug。请看下面的例子
引用
$ git checkout feature ;# you were working in "feature" branch and
$ work work work ;# got interrupted
$ git commit -a -m "snapshot WIP" (1)
$ git checkout master
$ fix fix fix
$ git commit ;# commit with real log
$ git checkout feature
$ git reset --soft HEAD^ ;# go back to WIP state (2)
$ git reset (3)
(1) 这次属于临时提交,因此随便添加一个临时注释即可。
(2) 这次reset删除了WIP commit,并且把working tree设置成提交WIP快照之前的状态。
(3) 此时,在index中依然遗留着“snapshot WIP”提交时所做的uncommit changes,git reset将会清理index成为尚未提交"snapshot WIP"时的状态便于接下来继续工作。
(H) Reset单独的一个文件
假设你已经添加了一个文件进入index,但是而后又不打算把这个文件提交,此时可以使用git reset把这个文件从index中去除。
引用
$ git reset -- frotz.c (1)
$ git commit -m "Commit files in index" (2)
$ git add frotz.c (3)
13.git diff的用法
在git提交环节,存在三大部分:working tree, index file, commit这三大部分中:
working tree:就是你所工作在的目录,每当你在代码中进行了修改,working tree的状态就改变了。
index file:是索引文件,它是连接working tree和commit的桥梁,每当我们使用git-add命令来登记后,index file的内容就改变了,此时index file就和working tree同步了。
commit:是最后的阶段,只有commit了,我们的代码才真正进入了git仓库。我们使用git-commit就是将index file里的内容提交到commit中。
总结一下:
git diff:是查看working tree与index file的差别的。
git diff --cached:是查看index file与commit的差别的。
git diff HEAD:是查看working tree和commit的差别的。(你一定没有忘记,HEAD代表的是最近的一次commit的信息)
---------------------------------------------------------
14. 使用git format-patch生成所需要的patch:
# git format-patch -s 1bbe3c8c197a35f79bfddaba099270a2e54ea9c7
please replace the hash code with your repo previous commit.
then you can find the patch under repo directory.
then mail your patch to configuration admin.
# git format-patch -M master // 当前分支所有超前master的提交
# git format-patch -s 4e16 // 某次提交以后的所有patch, --4e16指的是SHA1 ID
# git format-patch -1 07fe // 单次提交
# git format-patch -3 // 从master往前3个提交的内容,可修改为你想要的数值
# git format-patch –n 07fe // -n指patch数,07fe对应提交的名称, 某次提交(含)之前的几次提交
# git format-patch -s --root origin // 从origin到指定提交的所有patch
# git format-patch 4e16..07fe //从commit 4e16到commit 07fe的所有提交patch
# git format-patch master //在dev1分支上,打出所有dev1分支在master分支基础上的patch
# git format-patch –-root dev2 //在dev2分支上,打出所有dev2分支的所有patch
# git diff dev1 dev2 //比较两个分支
# git diff dev1 dev2 main.c //比较两个分支中单个文件的区别
//将所有的commit信息保存在文件中
# git log > commit.txt
# git log | grep “commit” -A3 >commit.txt 保存commit开始的3行
-An after , -Bn before, -Cn(前后n行)
15. 应用patch
先检查patch文件:# git apply --stat newpatch.patch检查能否应用成功:# git apply --check newpatch.patch
打补丁:# git am --signoff < newpatch.patch
(使用-s或--signoff选项,可以commit信息中加入Signed-off-by信息)
---------------------------------------------------------
16. git提取出两个版本之间的差异文件并打包
git diff这个命令能比较两个提交之间的差异,使用–name-only参数可以只显示文件名。例如:
$ git diff 608e120 4abe32e --name-only
这个输出结果非常有意思,就是差异文件的相对地址,不正好是压缩命令的参数吗?于是立马使用压缩命令
$ git diff 608e120 4abe32e --name-only | xargs zip update.zip