Git 实用命令项目基操【合集】

x33g5p2x  于2021-12-18 转载在 其他  
字(3.2k)|赞(0)|评价(0)|浏览(377)

1. 分支篇

# 查看本地分支列表
git branch
# 查看远程版本库分支列表
git branch -r
# 查看本地与远程所有的分支列表
git branch -a

# 从当前分支创建新的dev分支
git branch dev

# 删除dev分支
git branch -d dev
# 删除远程dev分支
git push origin --delete dev

# 重命名分支
git branch -m dev dev1

# 从当前分支拉出新的分支dev
git checkout -b dev
# 从远程分支拉取到本地
git checkout -b dev origin/dev
# 根据tag拉出新的分支
git checkout -b branch_name tag_name
# 把新建的分支push到远端
git push origin dev

# 切换到dev分支
git switch dev
git checkout dev

# 查看关联远程的分支信息及权限
git remote -v
# 删除关联的远程分支origin
git remote remove origin
# 添加远程分支关联
git remote add origin https://xxx.git

# 将远程分支覆盖本地代码
git fetch --all
git reset --hard origin/master (这里master要修改为对应的分支名)
git pull

2. 查看篇

查看状态与日志

# 查看当前工作区状态
git status

# 查看提交记录
git log
# 查看所有的log
git reflog
# 查看feature1分支是否push到远程分支
git log feature1 ^origin/feature1

查看差异

# 工作区 vs 暂存区
git diff  
# 暂存区 vs 本地版本库(最近一次commit)
git diff --cached   
# 工作区 vs 本地版本库(最近一次commit)
git diff HEAD       
# 工作区 vs 指定commit-id的差异
git diff commit-id  
# 暂存区 vs 指定commit-id的差异
git diff --cached commit-id 
# commit-id-1 vs commit-id-2
git diff commit-id-1 commit-id-2

3. 回退篇

git reset --hard commit_id

# 放弃工作区修改(如果是所有文件把文件名改成 . 点就行)
git checkout -- xxx.js
# 放弃暂存区修改,回退到Unstaged状态
git reset HEAD .
# 回退提交
git reset HEAD@{index}

参数
--mixed :为默认值,等同于git reset。 将文件回退到工作区,此时会保留工作区中的文件,但会丢弃暂存区中的文件;
--soft :将文件回退到暂存区,此时会保留工作区和暂存区中的文件;
--hard :将文件回退到修改前,此时会丢弃工作区和暂存区中的文件;

4. 合并篇

# 添加几个文件到暂存区
git add xx.js yy.js
# 添加所有文件到暂存区
git add .
# 提交暂存区的修改到本地版本库
git commit -m "本次修改的comment"
# push到远程仓库分支 origin-关联的仓库名 master-分支名
git push origin master

# 合并dev分支修改到当前分支
git merge dev -m "merge from dev"
# 合并某一次提交到当前分支(产生一次提交,需要push)
git cherry-pick fsa0dsads
# 强制将远程分支覆盖本地分支
git fetch --all
git reset --hard origin/master
git pull

# 非快速合并 会产生一条commit
git merge dev  --no-ff -m "merge dev"

5. 事故篇

常在河边走,哪有不湿鞋;人在江湖飘,哪有不挨刀!
事故1:刚提交了一次代码,突然发现少了一个空格或多了一个分号,类似这些小问题又得重新提交一遍,如果按正常的提交又会产生一次提交记录,这样会多出很多的提交记录,我们是拒绝的,那怎么做呢?

一般的小伙伴会想到先提交一次再用git rebase -i通过变基来合并提交,这也可以,但是我想大家隆重介绍比它快一万倍的--amend,See:

git add .
git commit --amend --no-edit

上面的命令是在前一次提交后,发现有小问题然后就再提交一次,只需要加个参数--amend就会自动合并上一次的提交,--no-edit参数是不需要修改注释,如果需要修改就不加这个参数就行了。
需要注意的是--amend不要滥用,如果一直用这个来合并,最终就只有一条提交记录了,如果是别的功能修改就不要使用--amend让它生成新的提交记录。

事故2:新的开发任务还没编写完成,本地有部分代码还不能提交,而需要马上解决一个bug,此时该怎么做?

这里需要用到git stash命令,它的作用就是保存当前的工作区暂存区的状态,把当前的工作隐藏起来,等以后需要的时候再恢复,git stash 这个命令可以多次使用,每次使用都会新加一个stash@{num},num是编号

# 隐藏当前的工作区与暂存区,可以切换到别的分支继续工作
git stash

# 查看被隐藏的stash列表
git stash list

# 恢复最新的stash到工作区(原来暂存区的需要重新进行add暂存)
git stash pop

# 删除所有的stash
git stash clear

先保存当前工作区和暂存区的修改,此时的工作区会显示上一次提交后的样子,修改和暂存的文件被隐藏了 ,这时候就相当于working tree clean状态,可以切换到别的分支去修改bug或紧急任务,等那边的问题解决了,再回到这个分支来执行git stash pop恢复之前的工作到工作区,注意之前保存到暂存区的需要重新暂存。

注意:工作区有文件已修改没有添加到暂存区或没有提交,都不能切换到别的分支。
事故3:本来应该提交到新分支的东西,提交到了主分支!

# 从当前状态的主分支新建一个分支
git branch new-master
# 取消主分支的最新一次提交
git reset HEAD~ --hard
# 切换到新分支
git checkout new-master

注意:如果你已经推送到了远程分支,那一切都晚了。如果你已经修改了别的文件,那第二行应该是git reset HEAD@{number},而不是HEAD~,以回到最初犯错的时间和地点。

事故4:提交到了错误的分支上!

解决办法1:git stash保留现场

# 取消最新的提交,保留工作区现场原状
git reset HEAD~ --soft
# 保存现场到stash
git stash

# 切换到正确的分支
git switch dev
# 还原现场
git stash pop
# 这里可能会有冲突,如果有就解决下冲突
# 然后再添加暂存,提交
git add .
git commit -m "balabala..."

解决办法2:cherry-pick(摘樱桃🍒) 喜欢🍒吗?

# 假设应该提交到dev分支的代码,提交到了master分支

# 切换到正确的分支
git branch dev
# 把错误的分支的最新提交🍒摘过来
git cherry-pick master
# 回退错误分支的代码
git switch master
git reset HEAD~ --hard

事故5:git pull 时提示因某些文件冲突不能合并

其实这个是常规操作,因为有很多小伙伴一起编辑,所以文件冲突是正常的,这时候有两个情况:
1.你想保留你自己的本地修改
处理方案:

git stash
git pull origin dev
git stash pop

接下来解决文件冲突,再提交即可

2.你不想保留自己的修改
处理方案:

git reset --hard 
git pull origin dev

事故现场未完待续。。。

详细Git教程,参考专栏:传送门

相关文章