Git 日常操作

Git 日常操作
1、克隆服务器仓库到本地分支mydep
git clone http://************* mydep
克隆远程仓库分支develop到本地分支mydep
git clone -b develop http://************* mydep

2、获取开发分支
git fetch origin develop:mydep
3、配置个人设置
git config --global user.name "***"
git config --global user.email "***@*****"


3、创建本地分支mydep
git branch mydep
4、添加文件到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 newestdevelop
7、提交本地分支mydep到远程分支develop
git push origin mydep:develop
6、获取远程分支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 log
git 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----------->commit
status: 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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值