git常用命令总结

本文详细介绍了Git的各种常用操作,包括初始化仓库、添加文件、提交、版本回退、解决冲突、分支合并、快进与非快进合并、stash使用、cherry-pick、强制推送等,旨在帮助读者掌握Git日常开发中的核心操作。
摘要由CSDN通过智能技术生成

本文是笔者在阅读 廖雪峰git教程后,总结的工作中常用的git操作命令。
1.git init
初始化一个Git仓库,当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的,
如果你没有看到.git目录,那是因为这个目录默认是隐藏的,用ls -ah命令就可以看见。
2.git add
添加文件至index(暂存区)
3.git add .
添加当前子目录下所有更改过的文件至index
4.git commit -m [message]
将暂存区内容添加到本地仓库中
5.git log --pretty=oneline
显示从最近到最远的提交日志,oneline将每个提交放在一行显示,这在提交数很大时非常有用,效果如下图。
在这里插入图片描述
6.版本回退
有时候,进行了错误的提交,但是还没有push到远程分支,想要撤销本次提交,可以使用git reset –-soft/hard命令
git reset --hard HEAD^
彻底回退到某个版本,工作区,暂存区和版本库都回退到上一个版本,撤销的commit中所包含的更改被冲掉。
git reset --soft HEAD^
回退到某个版本,只回退了commit的信息,不会恢复到index file一级。如果还要提交,直接commit即可。也可以说是版本库回退到上一个版本,两个版本之间的变动内容放入到了暂存区。
git reset --hard commit_id
退到/进到 指定commit的sha码
参数撤销工作区中所有未提交的修改内容,将暂存区与工作区都回到上一次版本,并删除之前的所有信息提交。
git reset HEAD
暂存区保存的变动撤回,并且将这些变动放在工作区。
如果暂存区无保存的内容,将版本库和暂存区回退到上一个版本,并且将两个版本之间的变动放在工作区。
7.git reflog
查看你输入的命令记录
注意:如果回退到某个版本,但是又后悔了,想恢复被撤销的版本,那么也是有办法的,我们可以通过git reflog(查看命令历史,以便确定要回到未来的哪个版本)找到被撤销版本的版本号,然后使用 git reset --hard commit_id进行恢复操作。下图是笔者通过git reflog打印出来的操作记录,从版本d56e8aa通过git reset --hard HEAD^回退到版本f93b362后,又通过git reset --hard d56e8aa恢复到版本d56e8aa的操作。

在这里插入图片描述
8. git status
查看文件,文件夹在工作区,暂存区的状态
9.丢弃修改
git checkout .
把工作区的修改全部撤销,这里有两种情况:
一种是自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commit或git add时的状态。
10.解决冲突
合并代码时,如果出现了冲突,必须手动解决冲突后再提交。

$ git add readme.txt 
$ git commit -m "conflict fixed"

11.git log --graph --pretty=online --abbrev-commit
查看分支的合并情况
如下图是输入该命令后展示的内容,笔者将yolanda_fix_bug_1214分支的内容合并到yolanda_test_master分支后,因为0319cdf这个提交和34d21dc的提交产生了冲突,解决冲突后,再次进行提交,生成0b545d5版本号,合并完成。
在这里插入图片描述
12.fast forward和no fast forward的区分
git merge --no-ff
使用no fast forward的方式合并
git merge --ff
使用fast forward方式合并
合并分支时,有fast forward合并和no fast forward合并两种方式。
比如我们从master分支commit1处拉取develop分支,develop分支处进行了commit2的提交,此时我们打算将develop分支的内容合并到master分支上,且master没有新的提交信息,最新的提交版本号仍然是commit1,那么我们进行合并的时候,Git会用Fast forward模式,合并完成后,master分支的历史记录里有两条提交信息,也就是commit1和commit2。
如果我们强制使用no fast forward合并的方式进行合并,那么master分支的历史记录里会有三条提交信息,除了commit1和commit2,会新生成一个commit3的提交信息。no fast forward方式进行合并,Git会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
13.git stash相关

git stash save “save message”
会把所有未提交的修改(包括暂存的和非暂存的)都保存起来,用于后续恢复当前工作目录。
git stash pop
恢复之前缓存的工作目录,恢复的同时把stash内容也删了
git stash list
查看stash了哪些存储
git stash apply stash@{0}
应用某个存储,但不会把存储从存储列表中删除,你需要用git stash drop来删除。默认使用第一个存储,即stash@{0},如果要使用其他个,git stash apply stash@{$num} , 比如第二个:git stash apply stash@{1}

git stash drop stash@{$num} 

丢弃stash@{$num}存储,从列表中删除这个存储
14

git cherry-pick <commit>

将代码从一个分支转移到另一个分支,如果你只需要需要部分代码变动(某几个提交),可以使用git cherry-pick,注意这个命令生成的commitid不同于你所cherry-pick的commitid,因为这两个commit只是改动相同,但确实是两个不同的commit。
15

git branch -D <name>

如果要丢弃一个没有被合并过的分支,可以通过这个命令强行删除。
16.多人协作模式
(1)首先,可以试图用git push origin 推送自己的修改;
(2)如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
(3)如果合并有冲突,则解决冲突,并在本地提交;
(4)没有冲突或者解决掉冲突后,再用git push origin 推送就能成功!
如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to origin/。
17.git checkout -b branch-name origin/branch-name
在本地创建和远程分支对应的分支
18.git branch --set-upstream branch-name origin/branch-name
建立本地分支和远程分支的关联
19.git rebase
可以把它理解成是“重新设置基线”,将你的当前分支重新设置开始点。rebase需要基于一个分支来设置你当前的分支的基线,这基线就是当前分支的开始时间轴向后移动到最新的跟踪分支的最后面,这样你的当前分支就是最新的跟踪分支。
rebase会把你当前分支的 commit 放到公共分支的最后面,所以叫变基。就好像你从公共分支又重新拉出来这个分支一样。
在rebase的过程中,也许会出现冲突(conflict). 在这种情况,Git会停止rebase并会让你去解决 冲突;在解决完冲突后,用"git-add"命令去更新这些内容的索引(index), 然后,你无需执行 git-commit,只要执行:
git rebase --continue
这样git会继续应用(apply)余下的补丁。
在任何时候,你可以用–abort参数来终止rebase的行动,并且分支会回到rebase开始前的状态。
git rebase --abort
本地rebase完成后,如果要把变更推送到远程,需要使用加上–force参数进行强制推送
git push -f
20.rebase注意事项
严格禁止在公共分支上rebase其他分支(譬如不允许在 master 分支上直接运行 git rebase branchname)
一般来说,执行rebase的分支都是自己的本地分支,千万不要在与其他人共享的远程分支上使用rebase;
这不难理解,远程分支上的代码可能已经被其他人克隆到本地了,如果通过rebase修改了远程分支的提交历史,这样其他人每次拉取代码到本地时,就都需要进行复杂的合并。
只对尚未推送或分享给别人的本地修改执行变基操作清理历史, 从不对已推送至别处的提交执行变基操作。

21.git remote update origin --prune
更新远程分支列表
参考链接:
如何使用rebase

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值