Git工具—指令使用
git 使用
1.检查当前文件状态
$ git status
2.跟踪新文件/暂存已修改文件
$ git add <file> ...
3.查看修改
$ git diff
4.提交更新
$ git commit
5.查看提交历史
$ git log
$ git log -num //-2 查看最近提交的两次记录
6.强制回滚到上一次的提交记录(可删除log记录)
$ git reset HEAD~1
# 有时候我们提交了好几个commit,但是想要回到某次的提交
# 回退到上一个版本
$ git reset --hard HEAD^
# 回退到往上 n 个版本
$ git reset --hard HEAD~n
# 回退到某个版本号的版本
$ git reset --hard <版本号>
7.vim编辑窗口退出
# 按shift+:,输入q,退出编辑
8.将文件撤销回到最近一次修改的状态:git checkout – file
checkout:切换参数,通常用来切换分支仓库
当我们在工作中修改了一个文件,若发现内容好像改的不对,想重新修改,这个时又不知道自己改了什么代码,想撤销修改,有一个最简单的方法,就是git checkout -- file
,注意中间要有“--
”,checkout
这个命令是切换分支的功能,关于它我们后面在细说,你现在只需要知道这个命令加上“--
”可以用来将文件切换到最近一次的状态。
注意这个恢复只能恢复到上一次提交的状态,如你刚提交了这个文件到仓库,随后你修改了它,那么使用这个命令只会回到刚刚提交后的那个状态里,不能回到你还没有提交,但修改的状态中。
注意这个功能不能一直迭代恢复,如你恢复到了修改前的版本,你想再次回滚回滚到修改前在之前的版本是不行的。
9.查看单个文件可回滚版本:git log filename
# 回滚指定文件到指定版本时,需要查看该文件有多少个版本可以回滚时,可以使用git log filename命令
eg:
git log test.c
git log min.c
# 再使用git reset命令将其回滚就可用了,命令格式如:
git reset 1a1e91bf37add6c3914ebf20428efc0a7cea33f3 min.c
# 回退完成之后想要再次提交可以使用git add和git commit提交到本地仓库中,
# 即可更新当前工作环境,让当前文件保持最新。
git add min.c
git commit -m "new"
# 更新完成后可以在使用log查看一下,会发现多出一个历史版本
# 即便你更新了一个文件,也会生成一个新的历史版本,注意历史版本里只包含了你更新的文件,
# 因为刚刚只add了min.c文件,所以新的历史版本里只有更新min.c文件,你当前的工作其它文件没有在这个历史版本里。
10.删除文件:git rm
# 若使用普通的命令,rm删除文件,git状态会提示删除了文件,只需要使用add重新提交一次就可以。
git rm main.c
# 若需要更新,在使用git rm main.c后,需使用git commit提交一次
git commit -m "rm main.c"
# 查看下status的状态
git status
11.查看提交历史:git reflog
# 可以查看当前版本库的提交历史,凡是对仓库版本进行迭代的都会出现在这个里面,包括回滚版本都会出现在这个历史中
git reflog
报错修改
在提交代码时报错——git push
git push origin HEAD:refs/for/XXX,提示失败ERROR: missing Change-Id in commit message footer,丢失Change-Id。
解决方法如下:
按照出错提示执行以下命令:
1.复制保留执行push操作的时候提示缺失的 【Change-Id: XXXX】信息
2.gitdir=$(git rev-parse --git-dir); scp -p -P 29418 gitusername@serverip:hooks/commit-msg ${gitdir}/hooks/
3.执行git commit --amend
,进入编辑界面,将第一步中的【Change-Id: XXXX】信息贴在文本的最后一行,请务必记得请把Change-Id信息粘贴在文本的最后一行。
若把Change-Id信息放在文本注释和描述信息中间,导致的继续push还会报同样的错误。
git冲突解决 —— Merge Conflict
在之前提交的PR(pull request)项目下:
git pull -- rebase
git status
git rebase -i HEAD~2
# 若有冲突,会显示在提示git add 下双方有冲突,解决完冲突后 进行
git add .
git status
git rebase --continue
git push origin master
Read-only file system问题的解决方法:
Linux有时候会遇到无法写文件、新建保存文件的情况,提示Readonly file system,可以在终端输入如下命令即可解决(重新挂载):
mount -o remount rw /
解决 no-cla 问题(提示cla没有签署)
如果提示cla没有签署,需要检查一下本地提交代码使用的git环境变量是否正确。
使用 git log查看已经提交的commit,看看"author"那一项对应的邮箱是不是自己已经注册的邮箱。如果不是的话,需要用如下代码进行修改:
git commit --amend --author="author_name <email_adress>" --no-edit
eg:
git commit --amend --author="xiaoming <123456789@gmail.com>" --no-edit
同时用下面的命令设置一下git环境的user_name和email:
(不配置也行,当遇到要求登录权限的远程仓库会让你在手动输入用户名、邮箱、以及密码)
$ git config --global user.name "输入你的用户名"
$ git config --global user.email "输入你的邮箱"
Change-Id 说明
在Git中,Change-Id
通常是指一个提交的标识符,它是由补丁提交到 Gerrit 代码审查系统时自动生成的。
如果你想回退到一个特定的 Change-Id
对应的提交,你需要首先找到这个提交的哈希值(commit hash)。
执行步骤:
-
找到提交的哈希值:
使用git log
命令查看提交历史,并找到与Change-Id: I91ab0ffa55185800a5c3cc232387888a86da7013
对应的提交哈希值。你可以使用grep
命令来帮助搜索:git log --all --graph --decorate | grep "I91ab0ffa55185800a5c3cc232387888a86da7013"
这将会显示所有包含该
Change-Id
的提交记录。 -
确定正确的提交哈希值:
一旦你找到了包含Change-Id
的提交,你会看到一个长哈希值(例如:a5c3cc232387888a86da7013...
),这是提交的唯一标识符。 -
回退到该提交:
使用git reset
命令将HEAD重置到该提交。你可以使用--soft
、--mixed
(默认)或--hard
选项,这取决于你是否希望保留工作目录中的更改:--hard
:丢弃所有更改,完全回退到该提交。--mixed
:保留工作目录中的更改。--soft
:保留更改,但不更新索引和工作目录。
例如,如果你想完全回退到该提交,可以使用:
git reset --hard <提交哈希值>
替换
<提交哈希值>
为实际的提交哈希值。 -
更新远程仓库(如果需要):
如果需要将这个回退操作推送到远程仓库,使用:git push origin <分支名> --force
替换
<分支名>
为你当前的分支名。
注意,使用 --hard
选项会丢失所有未提交的更改,因此在执行之前请确保你的工作目录是干净的,或者你已经备份了必要的更改。此外,如果你正在与他人协作,强制推送可能会影响其他人的工作,因此在执行之前应该与团队成员沟通。