git使用

10次阅读

共计 1848 个字符,预计需要花费 5 分钟才能阅读完成。

认识 git

什么是 git?

Git 是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。

什么是版本控制?

版本控制是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术。简单的说就是管理多人协同开发项目的技术。

 实现跨区多人协同开发
追踪和记载文件的历史记录
更好的统计工作量
并行开发、提高开发效率
跟踪记录整个项目软件的开发过程
减轻开发人员的负担,节省时间

git 与 svn 的区别

svn 是集中式版本控制系统,git 是分布式版本控制系统

 集中式版本控制:所有的版本数据都保存在服务器上,协同开发者从服务器上同步更新或上传自己的修改


分布式版本控制:客户端并不只提取最新版本的文件快照,而是把原始的代码仓库完整地镜像下来。这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。这类系统都可以指定和若干不同的远端代码仓库进行交互。介此,你就可以在同一个项目中,分别和不同工作小组的人相互协作。你可以根据需要设定不同的协作流程。

git 是将文件存到本地然后再推送到服务器,svn 是直接与服务器进行交互

git 可以不连网进行工作,svn 必须在连网的情况下工作

git 内容按元数据方式存储,svn 是按文件

git 只关心文件数据的整体是否发生变化,而 svn 则只关心文件内容的具体差异。git 为每个项目在根路径下建立一个.git 目录,它是 git 用来保存元数据和对象数据库的地方,该目录非常重要,每次克隆镜像仓库的时候,实际拷贝的就是这个目录里面的数据。

git 没有全局的版本号,svn 有全局版本号

git 可以任意在自己的本地版本库开启无限个分支,svn 分支是一个完整的目录,且这个目录拥有完整的实际文件

工作区

在电脑上能看到的目录。

暂存区

存放工作区未提交的改动。

工作区有一个隐藏目录.git,这个不是工作区,而是 git 的版本库;git 的版本库里存了很多东西,其中最重要的就是称为 stage 的暂存区,还有 git 为我们自动创建的第一个分支 master,以及指向 master 的一个指针叫 HEAD。git 把需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。

git 配置及连接远程仓库

在 git 客户端配置本地 email 和 user,

创建本地 ssh

在 github 中添加 ssh 密钥

将 ssh 配置到 GitHub,使用命令验证是否配置成功:ssh -T git@github.com

常用的 git 操作指令

git clone

拷贝 git 仓库到本地

git log

查看所有提交过的项目版本信息

git reflog: 可以查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作)

git status

查看文件状态

git add

把改动文件提交到暂存区

git add . 把所有修改变化提交到暂存区,不包括被删除的文件
git add -A 提交所有变化

git commit

把暂存区文件提交到本地的版本库

git commit -m 'msg' 提交添加备注,smg 为备注信息
如果备注信息太多,可以通过以下形式备注:git commit -m '
    msg1
    msg2
    msg3
    '

git push

把本地版本库分支提交到远程分支

git push origin master  将本地分支推送到与之存在追踪关系的远程分支,如果该远程分支不存在,则会被新建
git pull origin test1:master  origin 主机的 test1 分支,与本地的 master 分支合并

git pull

获取远程分支更新内容

git pull origin test1 远程分支 test1 与当前分支合并

git branch

查看分支

git branch              查看本地分支
git branch -r           查看远程分支
git branch -a           查看所有分支
git branch test1        创建分支名为 test1 的本地分支
git branch -d test1     删除本地分支 test1

git checkout

切换分支

git checkout -b 创建并切换分支

git fetch

获取远程分支到本地

git fetch --all 获取所有的远程分支

git merge

合并分支

使用 git 的开发步骤(个人心得)

使用一般工作流程:

  1. git pull 更新本地的文件;如果远程修改了,需要同步远程的内容
  2. 本地在修改之后,可以通过 git status 查看修改的文件
  3. 使用 git add 添加修改的文件暂到缓冲区
  4. git commit 把暂存区内容添加到当前的工作区
  5. git push 将本地的修改提交到远程 git 服务器
正文完
 0

git使用

10次阅读

共计 1452 个字符,预计需要花费 4 分钟才能阅读完成。

完整的流程是

第一种方法:(简单易懂)

1、git add .(后面有一个点,意思是将你本地所有修改了的文件添加到暂存区)
2、git commit -m””(引号里面是你的介绍,就是你的这次的提交是什么内容,便于你以后查看,这个是将索引的当前内容与描述更改的用户和日志消息一起存储在新的提交中)
3、git pull origin master 这是下拉代码,将远程最新的代码先跟你本地的代码合并一下,如果确定远程没有更新,可以不用这个,最好是每次都执行以下,完成之后打开代码查看有没有冲突,并解决,如果有冲突解决完成以后再次执行 1 跟 2 的操作
4、git push origin master 将代码推至远程就可以了

第二种方法:

1、git stash(这是将本地代码回滚值至上一次提交的时候,就是没有你新改的代码)
2、git pull origin master(将远程的拉下来)
3、git stash pop(将第一步回滚的代码释放出来,相等于将你修改的代码与下拉的代码合并)
然后解决冲突,你本地的代码将会是最新的代码
4、git add .
5、git commit -m””
6、git push origin master
这几步将代码推至了远程
最后再 git pull origin master 一下,确保远程的全部拉下来,有的你刚提交完有人又提交了,你再拉一下会避免比的不是最新的问题

如果希望保留生产服务器上所做的改动, 仅仅并入新配置项 , 处理方法如下:
git stash
git pull
git stash pop
然后可以使用 git diff -w + 文件名 来确认代码自动合并的情况.

  • git stash: 备份当前的工作区的内容,从最近的一次提交中读取相关内容,让工作区保证和上次提交的内容一致。同时,将当前的工作区内容保存到 Git 栈中。
  • git stash pop: 从 Git 栈中读取最近一次保存的内容,恢复工作区的相关内容。由于可能存在多个 Stash 的内容,所以用栈来管理,pop 会从最近的一个 stash 中读取内容并恢复。

反过来,如果希望用代码库中的文件完全覆盖本地工作版本. 方法如下:
git reset –hard
git pull

在 git 中如果想忽略掉某个文件,不让这个文件提交到版本库中,可以使用修改根目录中 .gitignore 文件的方法(如果没有这个文件,则需自己手工建立此文件)。这个文件每一行保存了一个匹配的规则例如:

# 此为注释 – 将被 Git 忽略
  
*.a       # 忽略所有 .a 结尾的文件
!lib.a    # 但 lib.a 除外
/TODO     # 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
build/    # 忽略 build/ 目录下的所有文件
doc/*.txt # 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt

把某些目录或文件加入忽略规则,按照上述方法定义后发现并未生效,原因是.gitignore 只能忽略那些原来没有被追踪的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore 是无效的。那么解决方法就是先把本地缓存删除(改变成未被追踪状态),然后再提交,这样就不会出现忽略的文件了。git 清除本地缓存命令如下:

git rm -r --cached .
git add .
git commit -m 'update .gitignore'

注意::不要误解了.gitignore 的用途,该文件只能作用于未被跟踪的文件,也就是那些从来没有被 git 记录过的文件(自添加以后,从未 add 及 commit 过的文件)。如果文件曾经被 git 记录过,那么.gitignore 就对他们完全无效。

正文完
 0

git使用

10次阅读

共计 438 个字符,预计需要花费 2 分钟才能阅读完成。

常用操作

如果想将本地项目用 git 管理,进入该项目的目录,初始化一个 git 仓库

pull:是下拉代码,相等于将远程的代码下载到你本地,与你本地的代码合并
push:是推代码,将你的代码上传到远程的动作

git init 

该操作将会在该文件夹初始化一个 git 子目录,此时只是初始化了一个空的仓库,你的项目文件夹还没有被添加进本地的 git 仓库;

1.git add .(后面有一个点,意思是将你本地所有修改了的文件添加到暂存区)

2.git commit -m””(引号里面是你的介绍,就是你的这次的提交是什么内容,便于你以后查看,这个是将索引的当前内容与描述更改的用户和日志消息一起存储在新的提交中)

3.git pull origin master 这是下拉代码,将远程最新的代码先跟你本地的代码合并一下,如果确定远程没有更新,可以不用这个,最好是每次都执行以下,完成之后打开代码查看有没有冲突,并解决,如果有冲突解决完成以后再次执行 1 跟 2 的操作

4.git push origin master 将代码推至远程就可以了

正文完
 0

git使用

10次阅读

共计 1587 个字符,预计需要花费 4 分钟才能阅读完成。

统观全局 gitHub 共享代码,一种是把本地仓库推送到远程仓库,一种是克隆远程仓库的项目。
把本地的仓库推送到远程仓库
ssh-keygen.exe -t rsa -C “1468017149@qq.com” 生成密钥
.ssh 文件中 中是密钥
// 每台电脑只能有一个密钥,不同的电脑添加
密钥才能与 gitGub 仓库链接
window 系统 .ssh 文件存放的位置
本地的仓库推送到远程仓库指令

克隆远程仓库
git clone 地址
git 指令
本地的项目和本地 git 仓库的创建
在项目中,先在本地文件夹初始化 git
初始化 git init
把工作区的内容提交到仓库,本地仓库和本地工作区操作
添加文件
git add . // 添加所有的文件
git commit -m“这里是描述”// 提交到仓库
git add // 添加所有的文件
git commit -m“这里是描述”// 提交到仓库
查看修改的内容
git status // 查看文件修改
git diff <file> // 查看文件修改的详细内容
当前操作放弃修改
git checkout —<file> 丢弃 修改了但没有 add 的文件内容
如果已经执行 git add , 则需要先把文件撤回到工作区
先执行 git reset HEAD <file> 命令
再执行 git checkout —<file>
回退到指定的版本
git log // 查看提交的所有版本
git reflog // 查看提交的所有版本
git reset –hard < 版本号 >
git log –pretty=oneline –abbrev-commit // 打印提交纪录
分支的操作
git branch test1 // 创建分支
git checkout test1 // 切换分支
git checkout – b test2 // 创建并切换
git branch // 查看本地分支
git branch -r // 查看远程分支
git branch -a // 查看所有分支
git push origin –delete photoShare // 删除远程分支
git branch -d test1 // 删除一个分支, 在主分支下删除其它分支
git merge test1 // 把分支合并到主分支
git merge –no-ff branch // 能看到合并纪录
// 先合并分支,然后删除分支
git merge –no-ff branch // 能看到合并纪录
解决 bug
git stash // 创建一个环境,保存当前的分支的代码
git pop // 恢复当前环境,没有恢复到当前环境是无法看到 git stash 时的内容的
git stash list // 查看创建的环境
// 创建一个分支解决错误
多人协作
git remote -v // 查看远程仓库的 xinxi
git push origin branch-name // 推送分支
git pull
git checkout -b branch-name origin/branch-name // 在本地创建和远程分支对应的分支,名字相同
git branch –set-upstream branch-name origin/branch-name // 建立本地分支和远程分支的关联
创建标签 git tag
为指定的某次提交创建一个标签,可以为本地仓库某个分支添加标签,也可以为远程仓库主分支添加标签。
git log –pretty=oneline –abbrev-commit // 打印提交纪录
git tag <tagName>// 创建一个标签
git tag -a <tagName> -m “ 这里是描述 ” id // 为指定的某一次提交创建标签
git show <tagName>// 查看标记
git tag // 查看所有标记
git tag -d <tagName> // 删除本地仓库某个标签
git push origin <tagName> // 推送某个标签到远程仓库
git push origin –tags // 把所有的标签推送到远程仓库

最后要注意
删除分支的时候 - d 小写 指的是要删除的分支,如果没有合并过是不能删除的,-D 大写是强制删除
创建是 b

正文完
 0

Git使用

10次阅读

共计 2760 个字符,预计需要花费 7 分钟才能阅读完成。

git 分支
查看分支
git branch // 查看本地分支
git branch -r // 查看远端分支
git branch -a // 查看所有分支
创建分支
git branch [branch name] // 创建本地分支
切换分支
git checkout [branch name] // 切换分支
git checkout -b [branch name] // 创建 + 切换分支,相当于 git branch & git checkout
推送新分支
git push origin [branch name]
删除分支
git branch -d [branch name] // 删除本地分支
git push origin :[branch name] // 删除远端分支,分支前面的冒号代表删除

git 处理冲突
当拉取下来的文件与本地修改的文件有冲突,先提交你的改变,或者先将你的改变暂时存储起来
1、将本地修改存储起来
git stash
2、pull 内容
git pull
3、还原暂存的内容
git stash pop stash@{0}
也可以简写
git stash pop

git 放弃修改文件
本地修改了文件但还未 add
git checkout –filename // 单个文件

git checkout . // 全部文件

本地新增了文件还未 add
rm filename / rm dir -rf // 单个文件 // 直接删除文件

git clean -xdf // 全部文件

// 删除新增文件,如果文件已经 git add 到缓存区,并不会删除
已经 git add 提交到了暂存区
git reset HEAD filename // 单个文件
git reset HEAD . // 全部文件
git add 以及 git commit 之后
git reset commit_id //commit_id 是你回到的那个节点,可通过 git log 查看,可以只选前几位

// 撤销之后,已经 commit 的修改还在工作区

git reset –hard commit_id

// 撤销之后,已经 commit 的修改将会删除,仍在工作区 / 暂存区的代码不会清除

git 另一个进程还在运行
问题描述
出现这种情况可能是 git 在执行的过程中,你中止之后异常,进程一直停留
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.

问题原因
因为进程的互斥,所以资源被上锁,但是由于进程突然崩溃,所以未来得及解锁,导致其他进程访问不了。
问题解决
打开隐藏文件夹选项,进入工作区文件目录的隐藏文件.git,把其中的 index.lock 问价删除掉
git 本地版本回退

通过 tortoiseGit 查看日志 show log
选中需要回退的代码版本
右键选择 Reset “master to this…
在弹出的窗口 Reset Type 选择 Hard:Reset working tree and index(discard all local changes)

git lfs 的使用
操作步骤:
1、安装 lfs
安装包地址:https://git-lfs.github.com/
2、把项目从 gitlab clone 下来
F:\ 镜像文件 >git clone https://xxx/dc/vmware-image.git
Cloning into ‘vmware-image’…
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.

3、初始化 git lfs 项目
F:\ 镜像文件 \vmware-image>git lfs install
Updated git hooks.
Git LFS initialized.

4、选择要作为大文件处理的文件扩展名
F:\ 镜像文件 \vmware-image>git lfs track “*.wim”
Tracking “*.wim”

5、提交文件
F:\ 镜像文件 \vmware-image>git add install.wim
Possibly malformed conversion on Windows, see `git lfs help smudge` for more det
ails.

F:\ 镜像文件 \vmware-image>git commit -am “ 添加 install.wim”
[master 43c28b8] 添加 install.wim
1 file changed, 3 insertions(+)
create mode 100644 install.wim

F:\ 镜像文件 \vmware-image>git push origin xxx
Locking support detected on remote “origin”. Consider enabling it with:
$ git config lfs.https://xxxx/dc/vmware-image.git/info/lfs.loc
ksverify true
Uploading LFS objects: 100% (1/1), 11 GB | 23 MB/s, done
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 407 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote:
remote: To create a merge request for xxx, visit:
remote: https://xxx/dc/vmware-image/merge_requests/new?merge_
request%5Bsource_branch%5D=xxx
remote:
To https://xxx/dc/vmware-image.git
* [new branch] xxx -> xxx

参考

https://blog.csdn.net/ustccw/article/details/79068547
https://blog.csdn.net/top_code/article/details/51931916
https://www.cnblogs.com/wteam-xq/p/4122163.html

正文完
 0