git add后取消_满满干货!——Git知识总结

e1fe0307480f64f68139efd6c22f94a8.png

git是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。

下面就详细的介绍一下git:

2f9259e39f20c3da6d1ef515082cf66a.png

6609d496acffc19207ca271eb1592939.png

本地库

通过命令 git init 把这个目录变成git可以管理的仓库

git 本地工作流程

295a09e7872b13020e78ec889f3bf15a.png

git的工作流程一般是这样的:

1、在工作目录中添加、修改文件;

2、将需要进行版本管理的文件放入暂存区域;

3、将暂存区域的文件提交到版本库。

文件4种状态

1011e9dc26c60eedf1d323d396c403c3.png

本地库提交

首先新建一个文件readme.txt,把文件提交到仓库:

git add readme.txt

git commit -m "description"

如果有大量文件进行改变,全部进行add,则使用 git add .。

如果想add并commit,则使用 git commit -a -m "Changed some files"。

git commit 命令的-a选项可将所有被修改或者已删除的且已经被git管理的文档提交到仓库中。

千万注意,-a不会造成新文件被提交,只能修改。

我们现在可以使用git show命令查看这一提交详细信息。

924c9c4352e3bf08c22c34b538c49383.png

如果想查看全部提交信息,则使用git log。

git log

git log --pretty=oneline

时光机穿梭

现在改变readme.txt文件,添加一些内容,使用git status命令看看结果。

git status命令可以让我们时刻掌握仓库当前的状态。

虽然 Git 告诉我们 readme.txt 被修改了,但如果能看看具体修改了什么内容,自然是很好的。比如你休假两周从国外回来,第一天上班时,已经记不清上次怎么修改的 readme.txt,所以,需要用git diff readme.txt这个命令看看。

git diff <file> # 比较当前文件和暂存区文件差异

git diff <id1><id1><id2> # 比较两次提交之间的差异

git diff <branch1> <branch2> # 在两个分支之间比较

git diff --staged # 比较暂存区和版本库差异

git diff --cached # 比较暂存区和版本库差异

git diff --stat # 仅仅比较统计信息

远程库

当你从远程库克隆时候,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且远程库的默认名称是origin。

1. 要查看远程库的信息 使用 git remote

2. 要查看远程库的详细信息 使用 git remote –v

git clone <版本库的网址> <本地目录名>

如果本地库需要和远程库进行关联,则:

git remote add [shortname] [url]

远程拉取

git pull = git fetch + git mergegit pull --rebase = git fetch + git rebase //推荐

git rebase和git merge区别

4e305b4d12954c55e0fa39a1be96acbb.png

a06d3d26cf05a192fb5b5e4e9027dd23.png

想要更好的提交树,使用rebase操作会更好一点,这样可以线性的看到每一次提交,并且没有增加提交节点。

在rebase的过程中,也许会出现冲突(conflict)。 在这种情况,Git会停止rebase并会让你去解决冲突;在解决完冲突后,用"git add"命令去更新这些内容, 然后,你无需执行 git-commit,只要执行:

git rebase --continue // 继续

git rebase --abort // 取消

git rebase –skip // 忽略冲突

而merge 操作遇到冲突的时候,当前merge不能继续进行下去。手动修改冲突内容后,add 修改,commit 就可以了。

给git pull默认加上rebase功能

git pull时可以加上--rebase参数, 使之不产生Merge点, 保证了代码的整洁, 即: git pull --rebase

但每次都加--rebase似乎有些麻烦,我们可以指定某个分支在执行git pull时默认采用rebase方式:

git config branch.dev.rebase true

如果你觉得所有的分支都应该用rebase,那就设置:

git config --global branch.autosetuprebase always

这样对于新建的分支都会设定上面的rebase=true了,已经创建好的分支还是需要手动配置的。

git stash

如果当前开发内容并不想提交,但是又有另外紧急开发任务,可以使用此命令。

git stash //把当前工作的改变隐藏起来

git stash list //查看已存在更改的列表

git stash pop //可从堆栈中删除更改并将其放置在当前工作目录中

远程提交及撤销

git push origin master

// git远程版本回退

git push origin HEAD --force

git分支

 查看分支:git branch

 创建分支:git branch name

 切换分支:git checkout name

 创建+切换分支:git checkout –b name

 合并某分支到当前分支:git merge name

 删除分支:git branch –d name

删除远程分支:git push origin --delete [branch-name] //git push origin :br

合并分支

git checkout master //切换到master

git merge <branch name> //合并分支

--no-ff指的是强行关闭fast-forward方式。

fast-forward方式就是当条件允许的时候,git直接把HEAD指针指向合并分支的头,完成合并。属于“快进方式”,不过这种情况如果删除分支,则会丢失分支信息。因为在这个过程中没有创建commit

git merge --squash 是用来把一些不必要commit进行压缩,比如说,你的feature在开发的时候写的commit很乱,那么我们合并的时候不希望把这些历史commit带过来,于是使用--squash进行合并,此时文件已经同合并后一样了,但不移动HEAD,不提交。需要进行一次额外的commit来“总结”一下,然后完成最终的合并。

总结:

--no-ff:不使用fast-forward方式合并,保留分支的commit历史

--squash:使用squash方式合并,把多次分支commit历史压缩为一次

897f6f0272f4cb1010f3c114f498ed67.png

git rebase

使用git rebase <branch name>也可以合并分支,但是最好只是本地分支使用,如果是公开的分支,建议不要使用

git rebase dev // 将要裤合并的分支如果有冲突,先解决冲突git add .git rebase --continuegit push --force-with-lease

提取其他分支提交

在cherry-pick,您可以从其他分支复制指定的提交,然后导入到现在的分支。

git cherry-pick <commit id>

分支策略

master主分支应该非常稳定,用来发布新版本,一般情况下不允许在上面工作,工作一般情况下在新建的dev分支上工作,工作完后,比如上要发布,或者说dev分支代码稳定后可以合并到主分支master上来。

推荐看下:阮一峰:Git分支管理策略

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值