Git常用操作
Git常用操作 下载地址:https://git-scm.com/
本地版本库
1、创建本地版本库
mkdir git-repository
cd git-repository
git init2、提交 git add 将修改后的文件放到暂存区。git commit 将暂存区的文件提交到版本库
vi readme.txt
aaa
bbb
git add readme.txt
git commit -m ‘add readme.txt’如果不需要将修改提交至暂存区,可以直接使用git commit -a来跳过git add操作,快速提交
3、修改
vi readme.txt
aaa ccc
bbb
git status
git diff readme.txt #查看工作区和版本库里最新版本的区别
git add readme.txt #添加文件
git status
git commit -m ‘add ccc’ #提交至暂存区,-m 添加提交日志
git status #查看当时状态4、版本回退(重置)git reset HEAD(表示当前版本) HEAD^(上一个版本) HEAD~30(往前30个版本)。
git log #查看命令日志,不显示已经删除的commit记录
git log --pretty=oneline #只会留下commit id (版本号 (用SHA1字串表示))和提交时的描述信息
git reset --hard HEAD^ #回到上一个版本
git reset --hard 98765a21 #回到最后的版本,输入前6-7位commit id即可
git pull #重新拉取文件,也是一种回到最后版本的方式,不过未push的文件会消失
git reflog #查看所有(包括commit和reset的操作)命令日志
git diff HEAD -- FILENAM #查看工作区和版本库里最新版本的区别
git checkout -- FILENAME #有两个意思,一种是FILENAME自修改后还没有被放到暂存区,现在,撤消修改就回到和版本库一模一样的状态;一种是FILENAME已经添加到暂存区后,又作了修改,现在,撤消修改就回到添加到暂存区后的状态。
git reset HEAD FILENAME #删除git add到暂存区的内容,相当于撤消未当前未提交的git add操作。版本回滚(撤消) git revert COMMIT_ID
git log
git revert 98765a21回退(重置)reset跟回滚(撤消)revert的区别 回退(重置)reset是强制恢复到指定版本,同时该版本之后的所有提交记录都被清除 回滚(撤消)revert是撤消指定ID的提交内容生成一个新的合并,同时保留所有(包含撤消节点之后)的提交记录,且不会影响在它之后的已有提交,除非后面的提交内容跟撤消内容有关联(例如同一个文件的修改)。 具体操作可参考[[#如果想要恢复 Git 仓库中的较早历史版本,可以使用 Git 的回滚或者重置操作。]]
5、文件删除
git rm FILENAME #正确的删除方式
git commit -m ‘del FILE’ #提交删除
git rm FILENAME #不小心删错了,想恢复
git reset HEAD FILENAME #先撤消暂存区的记录
git checkout -- FILENAME #撤消修改到和版本库一至的状态(因为目前暂存区没有修改)。远程仓库
全局配置:告诉git 你是谁
git config --global user.name ‘admin’
git config --global user.email ‘[email protected]’
git config --global credential.helper store # 记住用户名、密码,避免反复输入创建仓库(一般是在服务端操作):
mkdir git git-repository.git #创建一个仓库目录, .git表示是git仓库,可要可不要
git init --bare git-repository.git #初始化仓库
chown -R git:git git-repository.git #修改目录权限,让git用户可以访问全新仓库:在服务端新建了项目,无任何内容
git clone [email protected]:/git-repository.git
cd git-repository
touch README.md
git add README.md
git commit -m "add README"
git push -u origin master使用本地现有目录:将本地内容提交到新创建的项目中
cd existing_folder
git init
git remote add origin [email protected]:/git-repository.git
git add .
git commit -m "Initial commit"
git push -u origin master使用现有仓库:已经提交过多个版本的本地仓库
cd existing_folder
git remote add origin [email protected]:/git-repository.git
git push -u origin master克隆指定分支:使用-b branch_name来检出指定分支
cd existing_folder
git clone -b dev [email protected]:/git-repository.git #-b dev 检出dev分支分支管理
新建分支
git checkout -b dev #-b参数表示创建,相当于 git branch dev + git checkout dev
git branch #查看当前分支,当前分支前面会有*标识分支切换
git checkout master | dev分支合并
git merge dev #git merge 将dev分支合并到当前分支。这种方式称之为fast forward(会删掉分支,丢掉分支信息)删除本地分支
git branch -d dev
git branch -D dev #未被合并的分支无法用 -d删除。可以用-D来强制删除。删除远程分支
git push origin --delete dev #删除远程分支 慎用!!!
git remote prune origin #删除远程分支后,其它人如果之前查看过,则还能看到被删除的分支。通过该命令在其它客户端删除远程并不存在的远程分支。正常情况应该是master做为正式分支,所有人围绕dev分支开发,建立自己的分支,开发完成后合并到dev分支,测试无误之后合并到master分支做为上线版本。
这种情况下建议继续保留自己的分支,后期继续开发,那么在合并时就用以下方式
git merge --no-ff -m’commit log’ # no-ff 就是不用fast forward方式,会保留分支信息下面是一个完整的操作演示
git checkout -b dev #创建一个开发版本
touch 1 #创建文件
git add . #添加
git commit -m ‘add 1’ #提交
git push origin dev #推送dev分支到服务端
git pull #服务端没有的情况下(第一次拉取)会提示未关联。需要进行关联
git branch --set-upstream-to=origin/dev #本地分支跟服务端关联
git pull #再次拉取远程数据
git branch -b tom #基于dev分支创建属于tom的分支
tocch 2333
git add .
git commit -m ‘log from tom’
git checkout dev
git merge --no-ff tom #将tom的分支跟dev分支合并
git checkout master #如果测试完开发版本无问题,切换到主分支
git merge --no-ff dev #将dev分支合并到主分支
git push origin master其它人员直接使用dev分支开发
git clone git@server:/data/git.git #拉取主分支
git branch --all #查看所有分支(含远程)
remotes/origin/dev #远程dev分支
remotes/origin/master #远程主分支
git checkout -b dev origin/dev #本地创建dev分支,关联远程origin/dev分支
git branch -b jerry #基于dev分支创建属于jerry的分支
tocch 3344
git add .
git commit -m ‘log from jerry’
git checkout dev
git merge --no-ff jerry #将jeryy的分支跟dev分支合并,如果合并后发现跟其它内容有冲突,解决冲突合并后建议删除自己的分支,然后基于最新的dev分支重创建一个个分支,以免再次冲突。
git push origin dev #推送至dev分支
git checkout master #如果测试后开发版本无问题,切换到主分支
git merge --no-ff dev #将dev分支合并到主分支
git push origin masterBUG分支:临时需要紧急处理,但当前工作还没完成,当前版本不合适提交时。
git stash #暂存当前工作状态。
git stash list #查看之前暂存的工作状
git stash pop #恢复暂存至现在环境并删除暂存区的暂存内容。
git stash apply stash@{0} | stash@{1} #恢复指定的stash冲突处理
Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容 创建一个分支,并故意制作错误冲突
git checkout -b test-error
vi readme.txt #修改一行内容
git add redme.txt
git commit -m ‘change one line‘
git checkout master
vi readme.txt #修改同一文件,制造冲突
git add redme.txt
git commit -m ‘change …’
git merge test-error
git status #查看状态会发现有冲突的文件,删除冲突部分,保留正确的即可。然后再add、commit即可标签管理:注意,标签不是按时间顺序列出,而是按字母排序的。可以用git show <tagname>查看标签信息
git tag v1.0 #创建标签
git tag v0.9 fc026475 #给之前提交的版本打标签
git tag -d v1.0 #删除标签
git tag -a v1.2 -m ‘version 1.2 released’ fc026475 #-a 标签名,-m描述
git push origin v1.0 #将标签推送到服务端强制恢复到某次提交
git reset --hard xxxxxx
git push -f origin master # 如果推送了一个错误版本到master,可以通过上一条命令回到某一版本,然后强制推送到远程分支,不然本地版本落后于远程版本,将无法推送
git fetch --all && git reset --hard origin/master && git pull # 强制覆盖本地版本。如果发现推送了一次错误的提交,请用git revert命令来撤消,然后再推送一次。这样就不会造成冲突错误,如果对别人的合并也造成了回退,别人可以通过在本地reset回退到指定版本,拉取分支,重新跟最新的合并然后再提交就不会有问题。(比如目前版本为A1-A2-B1 B1为别人在你的基础上进行合并后提交的,你撤消到了A1版本,会导致基于B1的版本在提交的时候有冲突 ,这时B用户只需要reset到B1版本,然后拉取一个分支,跟B用户最新的版本合并,然后再提交就不会有冲突)
git fsck --lost-found # 查找、恢复误删文件git 中忽略提交指定文件或目录
在项目根目录下新建.gitignore文件,然后编辑该文件,一行一个内容。在提交的时候就不会同步这个文件中所列的目录或文件
vi .gitignore
*.class
*.apk
bin/
gen/
.settings/
proguard/.gitignore文件的使用
.gitignore文件的使用当我们在git库中遇到不想提交的一些文件或目录时,可以使用.gitignore来进行忽略 官方有一些现成的范本可以参考,也可以自己往该文件中添加 格式如下
.evn/
./path/filename
./path/*.gif以上操作会有一个问题,就是如果一个文件已经被提交过,之后将其添加在.gitignore文件中也不会被忽略。 这是因为.gitignore 文件只能作用于 Untracked Files,也就是那些从来没有被 Git 记录过的文件(自添加以后,从未 add 及 commit 过的文件)。 如果已经有这种情况出现,想要忽略,可以使用以下方法来实现
git rm --cached filename
# 通过上面的命令将文件从库中删除,更新.gitignore文件,然后再add\commit\push 如果想要恢复 Git 仓库中的较早历史版本,可以使用 Git 的回滚或者重置操作。
回滚操作: 使用 git revert 命令可以回滚到指定的历史版本。这个命令会创建一个新的提交,将代码回滚到指定版本的状态。
例如,如果你想要回滚到某个历史版本,可以使用 git log 命令查看历史记录,找到目标版本的 SHA 标识符,然后使用 git revert 命令回滚到该版本:
git log
commit 321bcf32b7a67bca10b2dcd6af102e6aa8fa6c45 (HEAD -> master)
Author: John Doe <[email protected]>
Date: Sat Apr 10 10:00:00 2023 -0500
Add new feature
commit 1234567890123456789012345678901234567890
Author: John Doe <[email protected]>
Date: Fri Apr 9 10:00:00 2023 -0500
Fix bug
git revert 1234567890123456789012345678901234567890这将创建一个新的提交来回滚到历史版本。
重置操作: 使用 git reset 命令可以将 Git 仓库的状态重置到指定的历史版本。这个命令会移除所有指定版本之后的提交记录,并且将指定版本设置为当前版本。
例如,如果你想要将仓库重置到某个历史版本,可以使用 git log 命令查看历史记录,找到目标版本的 SHA 标识符,然后使用 git reset 命令重置到该版本:
git log
commit 321bcf32b7a67bca10b2dcd6af102e6aa8fa6c45 (HEAD -> master)
Author: John Doe <[email protected]>
Date: Sat Apr 10 10:00:00 2023 -0500
Add new feature
commit 1234567890123456789012345678901234567890
Author: John Doe <[email protected]>
Date: Fri Apr 9 10:00:00 2023 -0500
Fix bug
git reset 1234567890123456789012345678901234567890这将移除所有 1234567890123456789012345678901234567890 之后的提交记录,并将仓库状态重置到该版本。
如果git log中有a1 a2这两个记录,我提交的a3记录后,想撤消a3的提交,应该是 revert a3还是revert a2 如果你想撤消 a3 的提交,最好的方式是使用 git revert 命令来创建一个新的提交来撤消 a3 的更改,而不是回滚到 a2 的提交。
使用 git revert 可以保留所有提交记录,并创建一个新的提交来撤消 a3 的更改。这样,其他开发人员不会失去他们的提交记录,并且你的撤消操作也可以追踪。 要撤消 a3 的提交,可以使用以下命令:
git revert a3这将创建一个新的提交来撤消 a3 的更改。注意,如果 a3 的提交有多个父提交,那么 git revert 将创建一个新的合并提交来撤消更改。
如果你使用 git reset 命令将 Git 仓库重置到 a2 的提交,会删除所有在 a2 之后提交的内容,这可能导致其他开发人员失去他们的提交记录,而且你的撤消操作也不能被追踪。因此,使用 git revert 来撤消 a3 的提交是更安全、更保险的选择。
如果已经有了a4的提交,撤消a3的提交会不会影响a4的提交内容
使用 git revert 撤消 a3 的提交不会直接影响 a4 的提交内容。当你使用 git revert 撤消 a3 的提交时,Git 会创建一个新的提交来撤消 a3 的更改,而不是直接修改之前的提交。
这意味着,a4 的提交内容不会被改变,Git 仓库中的提交历史记录也会保持不变。但是,如果 a3 的提交和 a4 的提交之间存在冲突,撤消 a3 的提交可能会导致冲突出现。在这种情况下,你需要手动解决冲突,并创建一个新的提交来解决冲突。
总之,使用 git revert 撤消 a3 的提交不会影响 a4 的提交内容,但是可能会引起冲突。为了避免冲突,你应该尽可能在每个提交之间只修改一个文件或者相关的代码,这样可以使你的撤消操作更加安全、可预测。
[[GIT钩子自动更新]]
[[通过gitolite控制权限]]
[[Git错误解决]]
最后更新于