转载自:https://blog.csdn.net/qq_43768851/article/details/124277192
一、常用命令
//1. 用户签名的作用:区分我们是哪一个操作者
//第一步:设置用户名和邮箱:
git config --global user.你的姓名 // 设置用户签名
git config --global user.你的邮箱 // 设置用户签名
//查看是否设置好了:C盘 -> 用户 -> 你当前登录的用户 -> .gitconfig文件,记事本打开,里面有姓名和邮箱信息即可。
---------------------------------------------
//2. 创建你想要存放本地代码库的目录,然后在此目录下打开gitbash
//输入命令,初始化本地库:
git init // 初始化本地库
---------------------------------------------
//3. .git同级的文件夹中创建新的文件,如a.txt后,即可看到本地库文件状态
git status // 查看本地库状态
//我们的文件还在untracked状态(未被追踪、未添加到暂存区),下一步就是git add命令,将文件添加到暂存区。
---------------------------------------------
//4. 添加到暂存区
git add 文件名
//在将工作区的 a.txt 文件上传至 暂存区后,工作区内的 a.txt 文件并没有消失
git rm --cached 你的文件(a.txt) //删掉暂存区的文件
---------------------------------------------
//5. 将暂存区的文件提交到本地库
git commit -m "日志信息" 文件名 //提交到本地库
---------------------------------------------
//6. 查看版本信息(查看是否提交到本地库成功了)
git reflog //查看本地记录
或
git log //详细地查看是谁在什么时间提交了什么到了本地库中,会出现用户签名、完整的版本号
---------------------------------------------
//7. 版本穿梭,回退到指定版本
git reset --hard 版本号
---------------------------------------------
//8. 检查本地的代码修改
git diff //可以查看当前没有add 的内容修改(不在缓冲区的文件变化)
git diff --cached //查看已经add但没有commit 的改动(在缓冲区的文件变化)
git diff HEAD //是上面两条命令的合并
//9. 将其他分支的某些新commit更改 加入到当前分支中(可能要解冲突)
git cherry-pick xxxx // 拉取来一个commit,commit ID是xxxx
git cherry-pick xxxx^..yyyy // 拉取从xxxx到yyyy间所有commit更新到本分支。^是包含起始点commit
//10. 获取最新的commit id的简短结果
git rev-parse --verify --short HEAD // ea79e49b2
git rev-parse --verify HEAD // 这是完整结果:ea79e49b21ae8706dfbe5e2f13a766b5b10ac9db
//11. 获取当前repo的最新tag
git describe --tags `git rev-list --tags --max-count=1` //后面''内的不加,会输出带commit号的:v2.0.2-1-g00eea27
二、Git分支操作
git branch 分支名称 // 创建分支
git checkout -b 分支名称 // 创建分支并切换当前工作环境至此分支
//注意此时创建的分支只是在本地,并未和远程仓库关联。一般都会用git网页上create branch选项,这样会自动关联
git branch -v
// 查看分支
git checkout 分支名
// 切换分支
// 删除本地分支
git branch -d 分支名 // 会检查更改是否merge
git branch -D 分支名 // 强制删除,无检查
// 删除远端分支
git push origin --delete 分支名
git merge 分支名
// 把指定的分支合并到当前分支上
具体展示
-
查看分支 - git branch -v
-
创建分支 - git branch 分支名称
-
切换分支 - git checkout 你想要切换到的分支的名称
切换分支后可以对此分支文件进行修改:
我有两个分支,一个叫master(主分支),一个叫lindaobie。
我现在先切换到lindaobie分支中去修改文件,然后再回到master分支,看看我们在master分支中的文件是否也会被修改。然而实际上master分支中的文件是不会被修改的!
-
合并分支 - git merge 分支名
请注意,git merge 分支名,这里的分支名,是我们要合并到当前分支上的,其他分支的名称
4.1 演示一下,我们把lindaobie分支,合并到当前的master分支上:
4.2 合并成功,查看一下,发现当前master分支上的文件已经被lindaobie的文件内容覆盖了,成功。
特殊情况:分支合并冲突
合并分支时,两个分支在同一个文件有不同的修改。
- 在老版本中,Git无法替我们决定选择哪一个,必须人为决定新代码的内容。
- 在新版本中,git会自动弹出一个窗口并且进行选择性合并,之后我们再人为对这个文件进行修改,重新上传。
原因:实际上在正常合并两个分支上的内容时,我们只应该修改其中的一个分支,不修改的分支应该称之为主分支。但如果我们一直都在修改不同分支上的同一个文件,那么合并的时候就会出现不知道谁向谁合并的问题。说得有点晦涩,让我们具体操作一下来理解这个问题。
开始操作!
- 现在我们的两个分支(lindaobie、master)中的yangziyi.txt中的内容是完全一致的。
- 开始修改,master分支中的yangziyi.txt文件,在最后一行加上 “我是一只布偶猫”
提交至暂存区,然后提交至本地库。
- 开始修改,lindaobie分支中的yangziyi.txt文件,在倒数第二行加上 “我是一只英国短毛猫”
提交至暂存区,然后提交至本地库。
- 此时,我们的两个分支中的同一个文件都被修改了!在master分支中合并一下lindaobie分支试试看,结果是合并之后同时抽取了特征值,但是多了一行,虽然git已经自动帮我们解决了合并的大部分问题,但依旧需要我们手动进行进一步的修改。尽管如此,git已经足够智能了。
我们vim打开自动合并后的文件yangziyi.txt,手动进行进一步的修改:
这才是我们想要的状态:
- 请注意,附带 合并冲突 的 自动选择合并,是新版本的特性,在之前的版本里,系统不知道应该保留哪一部分,合并之后,我们的master分支中的 “我是一只布偶猫” 就会被覆盖掉,但不要这样啊,我们想同时保留“我是一只布偶猫”和“我是一只英国短毛猫”!所以说git其实并不笨,它把这种处理不了的情况报告给我们了。
6.重新上传到暂存区,再上传到本地库,发现,很OK!问题经过git和我们的共同努力,已经解决了!合并成功!