赞
踩
推荐一个在线学习工具,是GitCode的一个教程:
https://codechina_dev.gitcode.host/learn-git-branching/?locale=zh_CN
还有沙盒可以练习:
https://codechina_dev.gitcode.host/learn-git-branching/?NODEMO=&locale=zh_CN
笔者的一些学习笔记:
https://gitcode.net/sinat_32872729/git-learning-course/-/tree/master/02.Git_online
① 克隆一个仓库:clone
git clone <仓库地址>
# 例:
git clone http://xxx/yyy.git
cd yyy # 进入仓库yyy
git branch # 查看分支,默认是只有master分支
默认克隆的master分支,如果克隆一个非master分支,加上-b <分支名>
:
git clone -b <分支名> <仓库地址>
# 例:克隆一个仓库的dev分支
git clone -b dev http://xxx/yyy.git
cd yyy # 进入仓库yyy
git branch # 查看分支,默认是只有dev分支
② 建立新的分支:checkout -b
git checkout -b devx <分支名> # 基于某分支<分支名>建立分支newdev,并切换到devx分支
# 例:基于master分支建立新分支dev1,并切换到dev1分支
git checkout -b dev1 master
# 例:基于dev分支建立新分支 dev2,并切换到dev2分支
git checkout -b dev2 dev
切换分支:checkout
git checkout <分支名>
# 例:切换到master分支
git checkout master
# 例:切换到devx分支
git checkout devx
③ 对仓库中的文件修改后,将文件添加到暂存区:add
git add <文件名>或<目录> # 可直接添加文件或目录
# 例:
git add /yourdir/changedFile.txt
git add /changedDir/file1.txt
# 或:
git add . # 添加当前目录所有变更,使用相对路径
add
添加后,使用commit
将暂存区内容添加到本地仓库中:(加-m
对本次提交进行简要说明)
git commit -m "your change info"
# 例:
git commit -m "fix bug"
④ 将本地的分支推送到远程:push
git push origin <分支名>
# 例:
git push origin devx
⑤ 将分支与master合并:merge
# 合并前,切换到master分支:
git checkout master
# 如果多人开发,切换后,应该从远程pull下master分支:git pull origin master
# 合并分支:弹除编辑文件框,编写本次合并说明
git merge --no-ff devx # 将<devx>分支合并到master,编辑合并日志之后":wq"保存
# 合并到master后,推送master
git push origin master
# 注意再从master切换会开发分支
git checkout devx
git管理时希望忽略一些文件,按如下步骤:
直接在git根目录下创建文件.gitignore
,编辑要忽略的文件:
.gitignore
*.log
*.pyc
abc.e
c/d/x.txt
上面示例中忽略文件:文件.gitignore
、以log后缀的文件*.log
、以txt后缀的文件*.pyc
和指定文件abc.e
、指定路径下的文件c/d/x.txt
。
删除要忽略的文件:
git rm --cached <file> # 删除缓存中要忽略的文件
提交说明该忽略操作:
git commit -m "rm and ignore xxx"
⑥ 撤回 reset
https://git-scm.com/book/zh/v2/Git-%E5%9F%BA%E7%A1%80-%E6%92%A4%E6%B6%88%E6%93%8D%E4%BD%9C
上一步add
了一些文件(但是没有commit提交),撤回使用:
git reset HEAD <要撤回的文件路径> # add后,撤回指定文件
git reset HEAD # add的所有文件都想撤回,后面不加文件即可:即撤回上一步add的所有文件
例如:使用了如下命令
git add <myfile1> <myfile2> # 添加了两个文件
git reset HEAD <myfile1> # 撤回添加myfile1
git reset HEAD # 直接撤回添加的所有文件
git status # 查看提交文件已撤回
add后使用commit
提交了文件(但是没有push推送),就是上一步commit
了一些文件:
git reset --soft HEAD^ # 撤回上一步提交
git reset HEAD # 撤回添加的所有文件
git add <file1>
git commit -m "add file"
git reset --soft HEAD^ # 撤回上一步提交
git commit -m "add new file" # 重新修改说明再提交
git add <file1> <file1> <file3> # 一开始提交的文件(比如,file4忘记提交,或file3有小变动
git commit -m 'initial commit' # commit提交了
git add <file4> # 发现file4没有提交,但是不想再撤回commit,直接add要增加提交的文件
git commit --amend # 提交增加的文件后,使用`-amend`命令即可(会弹出文本,确认是否重新编辑刚才提交的commit)
如果 add, commit后,还推送push
到了远程仓库,如何退回?【谨慎操作】
files还需要的话请备份!因为是使用强制退回,回删除要退回处之后的提交!
# 示例已进行的操作: git add <files> git commit "add files" git push origin dev1 # 推送到了dev1远程开发分支 # 此时向退回到没有添加 <files> 的操作 # files还需要的话请先备份!因为是使用强制退回,回删除要退回处之后的提交! # 先找要退回对应的提交号 git log # 对应退回commit后的值, 取几位即可, 比如是 abcdefg # 强制撤销变更到指定提交【谨慎操作】 git reset --hard abcdefg # 强制推送【谨慎操作】 git push origin master --force
如果是从远程git pull
拉取后向撤回,使用git reset --hard <提交号>
撤回到指定<提交号>对应版本。(操作时注意确认是否备份修改)
参考:
待整理:合并后如何退回?
Check out, review, and merge locally
Step 1. Fetch and check out the branch for this merge request
git fetch origin
git checkout -b devx origin/devx
Step 2. Review the changes locally
Step 3. Merge the branch and fix any conflicts that come up
git fetch origin
git checkout origin/master
git merge --no-ff devx
Step 4. Push the result of the merge to GitLab
git push origin master
Tip: You can also checkout merge requests locally by following these guidelines.
当本地进行了一些修改,发现修改错误,想返回到没有修改的时候。也就是想撤回到与最近一次提交相同的状态。请注意,这个撤回表示放弃当前本地修改,请谨慎操作!!
git checkout -- <file> # 指定将`file`撤回到与最近一次提交相同
如果所有本地修改的文件都撤回本地修改,还可以直接:用git checkout
后加点.
当前目录下,请慎用:
git checkout .
关于git中,所有不熟悉的修改、删除、撤回等变更操作,都应该先测试或在熟悉的情况下,再操作具体命令!!!
如果有一种情况是,并不是想真正的撤回到最近一次提交,而是先回到最近一次提交,执行一些操作后,再继续当前的修改。
比如一个任务场景是:有一个开发需要(1)一周才能完成,第2天修改的中途,发现有另一个需求(2)需要快速完成,但(2)只是基于最近一次提交的变更。
使用stash
命令:
暂时存放当前对需求(1)的修改(现场):
git stash save "一些相关描述"
对进行到一半的对需求(1)的修改暂时保存,这时当前工作区会恢复到最近一次提交状态。可以对需求(2)继续修改、提交、推送等。
完成需求(2)后,将刚才暂存的数据再还原:
git stash pop
如何打标签? tag
git log --pretty=oneline # 查看commit id
git tag -a v1.0 d32a97d # 取commit id一部分打标签(Enter后,弹出注释信息:initial version v1.0)
git push origin v1.0 # 推送指定版本标签到所有分支仓库
# git push origin --tags # 推送所有标签
# 克隆指定标签版本:
git clone -b v1.0 http://xxx/yyy.git
# git tag -a v1.0 -m 'version 1.0'
删除标签:
# 比如已经有了v1.0版本标签
# 先删除 v1.0
git tag -d v1.0
# 再推送
git push origin :refs/tags/v1.0
先本地修改分支名称:
# 若在当前分支上,使用如下命令修改分支
git branch -m <new-branch-name>
# 若在其他分支上,使用如下命令修改分支
git branch -m <old-branch-name> <new-branch-name>
然后删除远程旧分支名称:
git push origin --delete <old-branch-name>
最后再推送新分支名称;
git push origin <new-branch-name>
来自chatGPT回答
要同步两个远程库,可以使用以下步骤:
首先,确保你具有访问两个远程库的权限。
进入你的本地代码仓库,并添加第二个远程库作为一个新的远程仓库。假设第一个远程库名为 origin,第二个远程库名为 second,你可以使用以下命令添加第二个远程库:
git remote add second <URL of second remote repository>
执行 git fetch 命令来从两个远程库中获取最新的变更:
git fetch origin
git fetch second
这将拉取每个远程库中的最新提交和分支信息,但不会合并到本地分支。
查看分支信息以确保两个远程库都被成功获取:
git branch -a
这将显示本地分支和远程分支列表。
如果你想将第二个远程库的更改合并到你的本地分支,可以执行合并操作。比如,假设要将 second/main 分支合并到本地的 main 分支:
git merge second/master # 注意:可能有冲突!!!
或者你也可以选择使用 rebase 将第二个远程库的提交放在你的本地提交之前:
git rebase second/master
请根据你的项目需求选择适合的合并策略。
最后,将本地更改推送到第一个远程库(origin):
git push origin master
这将把合并后的更改推送到第一个远程库中。
注意:对于第5步合并时,可能出现冲突:fatal: refusing to merge unrelated histories
。冲突是说,两个分支的历史没有共同的祖先导致的。可以进行强制合并,但是应注意可能导致的冲突和意外:
使用 --allow-unrelated-histories 选项强制合并两个不相关的分支历史。
git merge --allow-unrelated-histories <branch-name>
如果你只是想合并两个不相关的分支,并且不需要保留它们各自的历史记录,你可以创建一个新的空分支,并将其与两个不相关的分支合并。
git checkout --orphan <new-branch-name>
git commit -m "Merge unrelated branches"
当前笔者测试没有进行合并,只是想同步后期的提交更新。
当关联了多个远程仓库,想删除其中一个。执行命令:
git remote remove <remote_name>
# 比如关联时定义的名称是second
git remote remove second
这里可以先使用git remote -v
查看管理的远程仓库列表。
# 移动了文件夹
git mv old_file new_file # 移动或重命名文件(文件夹)
git status # 此时查看移动的状态是renamed,如果直接移动则被认为是删除(deleted)了old_file,增加了new_file
发现移动错误了文件,想撤回,跟一般添加文件后撤回相同:
git reset HEAD # 撤回了上一步变更的所有文件,也可指定撤回文件:git reset HEAD filexxx
但是,请注意,这个reset
操作执行后并不会将你的文件撤回移动到原来的文件,相当于只是撤回了在Git缓存中的移动操作。本地还需要手动自己还原:
mv new_file old_file
然后再重新移动操作。
可能是移动后又撤回了,然后又在电脑上手动移动了导致报错:
Another git process seems to be running in this repository, e.g.
an editor opened by ‘git commit’. Please make sure all processes
are terminated then try again. If it still fails, a git process
may have crashed in this repository earlier:
remove the file manually to continue.
意思大概是说,有进程正在运行被锁定了。不知道是什么进程影响(可能是我一边在win-Git下操作一边在电脑修改文件夹导致吧)。参考这个博客解决了,就是删除这个锁定文件即可:
rm -f .git/index.lock
git diff <file> # 查看修改文件和暂存区的区别
git rm <file> # 删除git add到暂存区的文件
git branch -d <dev> # 删除dev分支
# 获取远程的所有分支
git fetch origin
git branch -a
一篇不错的git常用操作常见介绍:https://blog.csdn.net/xinzhifu1/article/details/123271097
更新中。。。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。