Git学习

First Post:

Last Update:

Word Count:
1.6k

Read Time:
6 min

Git学习

命令

1

基本操作

代码克隆

1
git clone  [url]

查看状态

1
git status

添加所需要push的文件或文件夹

1
git add . # 递归选定当前路径下的所有文件

给修改的文件进行注释

1
commit -m "msg"

推送

推送你的代码到github仓库

1
2
3
4
git push
# git push -u origin master
# 如果新建的远程仓库是空的,所以要加上-u这个参数,等远程仓库里面有了内容之后,下次再从本地库上传内容的时候只需下面这样就可以了:
# git push origin master

空仓库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//如何使用git上次自己的代码.
cd project_path //进入到工程目录
git init //初始话git仓库
git add . //添加当前项目的所有文件
//添加省份标识:
git config --global user.email "you@example.com" //你的邮箱
git config --global user.name "Your Name" //你的姓名
//git commit
git commit -m "Your_msg" //预提交. -m 是代表一些注释.
//创建SSH KEY
ssh-keygen -t rsa -C "youremail@example.com"
将 ~/.ssh/id_rsa.pub中的内容添加到github中
登录Github,找到右上角的图标,打开点进里面的Settings,再选中里面的SSH and GPG KEYS,点击右上角的New SSH key,然后Title里面随便填,再把刚才id_rsa.pub里面的内容复制到Title下面的Key内容框里面,最后点击Add SSH key

第九步:关联好之后我们就可以把本地库的所有内容推送到远程仓库(也就是Github)上了,通过:
git remote add origin git@github.com:I0gan/Litalk.git

.gitignore

创建工程时,按照工程采用的语言框架在项目根目录下自行定义 .gitignore文件对不需要push的文件进行排除。

例如Unity3d项目的.gitignore

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
UserSettings
# ProjectSettings
.vscode

# This .gitignore file should be placed at the root of your Unity project directory
#
# Get latest from https://github.com/github/gitignore/blob/master/Unity.gitignore
#
/[Ll]ibrary/
/[Tt]emp/
/[Oo]bj/
/[Bb]uild/
/[Bb]uilds/
/[Ll]ogs/
/[Mm]emoryCaptures/

# Asset meta data should only be ignored when the corresponding asset is also ignored
!/[Aa]ssets/**/*.meta

# Uncomment this line if you wish to ignore the asset store tools plugin
# /[Aa]ssets/AssetStoreTools*

# Autogenerated Jetbrains Rider plugin
[Aa]ssets/Plugins/Editor/JetBrains*

# Visual Studio cache directory
.vs/

# Gradle cache directory
.gradle/

# Autogenerated VS/MD/Consulo solution and project files
ExportedObj/
.consulo/
*.csproj
*.unityproj
*.sln
*.suo
*.tmp
*.user
*.userprefs
*.pidb
*.booproj
*.svd
*.pdb
*.mdb
*.opendb
*.VC.db

# Unity3D generated meta files
*.pidb.meta
*.pdb.meta
*.mdb.meta

# Unity3D generated file on crash reports
sysinfo.txt

# Builds
*.apk
*.unitypackage

# Crashlytics generated file
crashlytics-build.properties

Assets/Plugins
Assets/Plugins.meta
Assets/StreamingAssets
Assets/StreamingAssets.meta
Assets/ThirdParty
Assets/ThirdParty.meta
Assets/K2Examples
Assets/K2Examples.meta
NuiDatabase
obj
msc
.vs
*.jpg
*.dll
OpenNI2
*.ini
*.data

合作工程

多日参与git项目编写时,得需要注意某些事项。

编写代码之前注意事项

每次写代码或者修改文件之前,先git pull一下,确保当前代码状态是最新的,这样之后出现冲突的几率少一些,改冲突也没那么麻烦了。

编写代码之后注意事项

修改了一些重要代码文件之后,尽快push到远程仓库。

提交步骤

  1. 先对自己修改的文件打Commit,
  2. 再点击Fetch,
  3. 之后有Pull的话也点击Pull,
  4. 最后Push

出现冲突解决步骤:

先打commit,再pull,打开文件解决冲突 , push

Git撤销&回滚操作

开发过程中,你肯定会遇到这样的场景:

场景一:

1
糟了,我刚把不想要的代码,commit到本地仓库中了,但是还没有做push操作!

场景二:

1
彻底完了,刚线上更新的代码出现问题了,需要还原这次提交的代码!

场景三:

1
刚才我发现之前的某次提交太愚蠢了,现在想要干掉它!

撤销

上述场景一,在未进行git push前的所有操作,都是在“本地仓库”中执行的。我们暂且将“本地仓库”的代码还原操作叫做“撤销”!

情况一:文件被修改了,但未执行git add操作(working tree内撤销)

1
2
git checkout fileName
git checkout .

情况二:同时对多个文件执行了git add操作,但本次只想提交其中一部分文件

1
2
3
4
$ git add *
$ git status
# 取消暂存
$ git reset HEAD <filename>

情况三:文件执行了git add操作,但想撤销对其的修改(index内回滚)

1
2
3
4
# 取消暂存
git reset HEAD fileName
# 撤销修改
git checkout fileName

情况四:修改的文件已被git commit,但想再次修改不再产生新的Commit

1
2
3
# 修改最后一次提交 
$ git add sample.txt
$ git commit --amend -m"说明"

情况五:已在本地进行了多次git commit操作,现在想撤销到其中某次Commit

1
git reset [--hard|soft|mixed|merge|keep] [commit|HEAD]

回滚

上述场景二,已进行git push,即已推送到“远程仓库”中。我们将已被提交到“远程仓库”的代码还原操作叫做“回滚”!*注意:对远程仓库做回滚操作是有风险的,需提前做好备份和通知其他团队成员!*

如果你每次更新线上,都会打tag,那恭喜你,你可以很快的处理上述场景二的情况

1
git checkout <tag>

如果你回到当前HEAD指向

1
git checkout <branch_name>

情况一:撤销指定文件到指定版本

1
2
3
4
# 查看指定文件的历史版本
git log <filename>
# 回滚到指定commitID
git checkout <commitID> <filename>

情况二:删除最后一次远程提交

方式一:使用revert

1
2
git revert HEAD
git push origin master

方式二:使用reset

1
2
git reset --hard HEAD^
git push origin master -f

二者区别:

  • revert是放弃指定提交的修改,但是会生成一次新的提交,需要填写提交注释,以前的历史记录都在;
  • reset是指将HEAD指针指到指定提交,历史记录中不会出现放弃的提交记录。

情况三:回滚某次提交

1
2
3
# 找到要回滚的commitID
git log
git revert commitID

删除某次提交

1
2
git log --oneline -n5
git rebase -i ``"commit id"``^

注意:需要注意最后的^号,意思是commit id的前一次提交

1
git rebase -i "5b3ba7a"^

在编辑框中删除相关commit,如pick 5b3ba7a test2,然后保存退出(如果遇到冲突需要先解决冲突)!

1
git push origin master -f

通过上述操作,如果你想对历史多个commit进行处理或者,可以选择git rebase -i,只需删除对应的记录就好。rebase还可对 commit 消息进行编辑,以及合并多个commit。

git reset –hard HEAD^

加引号:git reset -hard "HEAD^"
加一个^:git reset -hard HEAD^^
换成:`git reset –hard HEAD或者git reset –hard HEAD1 ` 后面的数字表示回退几次提交,默认是一次

ref: https://www.cnblogs.com/heqiyoujing/p/10461015.html

打赏点小钱
支付宝 | Alipay
微信 | WeChat