Git使用笔记

声明:
本博客欢迎转发,但请保留原作者信息!
新浪微博:@孔令贤HW;
博客地址:http://blog.csdn.net/lynn_kong
内容系本人学习、研究和总结,如有雷同,实属荣幸!


git config --list 查看系统变量的配置

export https_proxy="http://XXXXXX:XXXXXX@XXXXXX:8080/" 配置代理
密码中的特殊字符转义:
ampersand & (%26)
at @ (%40)
space (%20)
double-quote " (%22)
single-quote ' (%27)
colon : (%3A)

git clone git://github.com/schacon/grit.git mygrit 后面可以自定义要新建的项目目录名称
git status 查看哪些文件当前处于什么状态
git add <file> 将文件添加到暂存区

删除文件:
1、手动删除
2、git rm <filename> (如果要删除之前修改过且已暂存的文件,要加-f)
3、提交
从暂存中移除,但不删除文件:
git rm --cached readme.txt
取消暂存:
git reset HEAD readme.txt
放弃未暂存文件所做的修改:
git checkout -- readme.txt

文件重命名:
git mv <file_from> <file_to> ,相当于:
$ mv README.txt README
$ git rm README.txt
$ git add README


git diff 查看尚未暂存的文件更新了哪些部分
git diff --cached 查看已经暂存起来的文件和上次提交之间的差异

忽略文件
$ cat .gitignore
*.[oa]
!lib.a
temp/
如果文件已经暂存,不会立即使用gitignore的新规则,此时先用git rm --cached filename
也可使用全局的.gitignore文件来对所有的代码库生效,比如新建文件~/.gitignore_global,然后执行:
git config --global core.excludesfile ~/.gitignore_global


提交:
git commit
git commit -m "commit message" 提交
git commit -a -m "commit message" 跳过暂存,直接提交
git commit --amend 重新提交,刚才提交完没有作任何改动,可以重新编辑提交说明,也可以
git add <file>, git commit --amend 增加要提交的文件,只会产生一次提交记录

日志查看:
git log -p展开显示提交的内容差异;-2显示最近两条;--stat,仅显示简要的增改行数统计;
git log --pretty=oneline  每个提交放在一行显示
git log --no-merges  不显示merge的记录
git log --since=2.weeks  查看两周内提交记录,或类似于--since="2008-10-01" --before="2008-11-01"
--grep  搜索提交中的关键字
--author  --committer
图形化工具:gitk

标签:
git tag  列出标签
为先前的提交加标签:
1、git log --pretty=oneline
2、git tag -a v1.2 9fceb02
推送标签到远端仓库:
git push origin v1.2
一次性推送所有标签:
git push origin --tags

git remote -v 查看远程仓库和克隆地址
git remote add [shortname] [url] 添加一个远程仓库
git remote show [remote-name]  显示远端仓库的详细信息
git remote rename old_name new_name  修改远端仓库在本地的简称
git remote rm [remote-name]  移除远端仓库
git fetch [repo] [branch] 抓取远程仓库的更新,但不合并(克隆操作会自动使用默认的 master 和 origin 名字)
git fetch origin branch1  设定当前分支的 FETCH_HEAD' 为远程服务器的branch1分支, 这个操作是git pull origin branch1的第一步
git fetch origin branch1:branch2  
首先执行上面的fetch操作
使用远程branch1分支在本地创建branch2(但不会切换到该分支),
如果本地不存在branch2分支, 则会自动创建一个新的branch2分支,
如果本地存在branch2分支, 并且是`fast forward', 则自动合并两个分支, 否则, 会阻止以上操作
git pull [repo] [branch]  将远端分支自动合并到本地仓库中当前分支
git push [remote-name] [branch-name] 将本地仓库中的数据推送到远程仓库,一个示例(将本地分支提交到远程仓库的另一个分支):git push origin localbranch:remotebranch


分支:

git checkout -b [分支名] [远程名]/[分支名]  创建分支(-d 删除分支,-D 强制删除)

git checkout <branch_name> 切换到分支(-b 新建并切换)
删除远程服务器上的分支:git push origin :<remote_branch>
git merge <new_branch> 将新分支的内容合并到当前分支,如果遇到冲突,可以使用git status查看冲突的文件,手工解决后,git add,比如:

<<<<<<< HEAD:index.html
<div id="footer">contact : email.support@github.com</div>
=======
<div id="footer">
  please contact us at support@github.com
</div>
>>>>>>> iss53:index.html

git merge --no-ff myfeature  --no-ff标记会使合并永远创建一个新的commit对象,在新的分支中保留myfeature分支的merge记录。


或者使用rebase(衍合):
    git checkout dev
    git rebase master
生成dev分支的patch,在master分支打一遍,使dev成为master分支的直接下游(会修改dev的提交历史),这样,在maste分支执行git merge dev就完成了分支的合并;
git rebase --onto master server client  取出 client 分支,找出 client 分支和 server 分支的共同祖先之后的变化,然后把它们在 master 上重演一遍(暂不合并server分支),然后在进入master分支进行merge操作。
git rebase master server  随后衍合server分支
使用衍合需要注意:旦分支中的提交对象发布到公共仓库,就千万不要对该分支进行衍合操作。如果把衍合当成一种在推送之前清理提交历史的手段,而且仅仅衍合那些尚未公开的提交对象,就没问题。

git branch --merged,查看哪些分支已合并到当前分支
git branch --no-merged,查看那些分支尚未合并到当前分支,此时也可以强制删除分支:git branch -D <branch_name>


假如你想要丢弃你所有的本地改动与提交,可以到服务器上获取最新的版本并将你本地主分支指向到它:
git fetch origin
git reset --hard origin/master


git format-patch  为每个提交生成一个 .patch 后缀的 mbox 文件

应用补丁:

1、对于git diff命令生成的补丁文件,使用git apply,是事务性操作,比patch命令严谨很多 ,可以先用git apply --check查看补丁是否能够干净顺利地应用到当前分支;

2、对于format-patch生成的补丁,使用git am,自动创建提交对象,如果出现冲突:

$ (fix the file)
$ git add file
$ git am --resolved
有时上传一些大文件(比如图片),会出现 fatal: The remote end hung up unexpectedly的提示,这是由于git/https的缓冲设置导致,可以通过如下方式解决:
git config http.postBuffer 524288000

使用github时,在git push往往会对用户名和密码进行认证,每次的输入很烦躁,效率很低。如果已经上传了本机的ssh公钥到github,那么可以配置项目目录下的.git/config文件:
remote.origin.url=git@github.com:username/projectname.git

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值